为C / C ++编写一个宏#include

我在AS / 400上工作,有时候是非POSIX。 我们还需要在UNIX上编译我们的代码。 我们遇到像#include这样简单的问题。

在AS / 400上,我们需要写:

  #include“* LIBL / H / MYLIB” 

在UNIX上,我们需要编写

  #include“MYLIB.H” 

目前我们在每个C / C ++文件的顶部都有这个(丑陋的)块:

 #ifndef IS_AS400
     #include“* LIBL / H / MYLIB”
     / *其他人在这里* /
 #其他
     #include“MYLIB.H”
     / *其他人在这里* /
 #万一

我们想要一个统一的宏。 这可能吗? 我不知道怎么写。

理想情况下,生成的语法将是:

  SAFE_INCLUDE( “MYLIB”) 

这将在每个平台上正确扩展。

请指教。

您可以简单地在每个包含丑陋#ifndef源文件中包含一些单独的标题。 无论如何,这是一种常见的做法。

您可以将平台的前缀定义为宏。 喜欢

 #define STRINGY(STR) #STR #define SAFE_INCLUDE(HDR) STRINGY(HDR) #ifndef IS_AS400 #define SAFE_INCLUDE(LIB) STRINGY(*LIBL/H/##LIB) #else #define SAFE_INCLUDE(LIB) STRINGY(LIB##.H) #endif 

你可以用它作为

 #include SAFE_INCLUDE(MYLIB) 

有两个更好的解决方案:

  1. 使用Makefile来正确设置编译器查找包含的路径。 对于GCC,您可以添加到CFLAGS -I (您可以多次执行此操作)。
  2. 使用您自己的头文件包装不兼容的库。