为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)
有两个更好的解决方案:
- 使用Makefile来正确设置编译器查找包含的路径。 对于GCC,您可以添加到CFLAGS
-I
(您可以多次执行此操作)。 - 使用您自己的头文件包装不兼容的库。