我在AS / 400上工作,有时候是非POSIX。我们还需要在UNIX上编译我们的代码。我们遇到的问题很简单,如#include。
在AS / 400上,我们需要写一下:
#include "*LIBL/H/MYLIB"
在UNIX上,我们需要编写
#include "MYLIB.H"
目前我们在每个C / C ++文件的顶部都有这个(丑陋的)块:
#ifndef IS_AS400 #include "*LIBL/H/MYLIB" /* others here */ #else #include "MYLIB.H" /* others here */ #endif
我们想要一个统一的宏。这可能吗?我不知道怎么写。
理想情况下,生成的语法为:
SAFE_INCLUDE("MYLIB"),可在每个平台上正确扩展。
请告知。
答案 0 :(得分:6)
您只需在每个包含丑陋#include
的源文件中#ifndef
一个单独的标题。无论如何,这是一种常见的做法。
答案 1 :(得分:5)
您可以将平台的前缀定义为宏。像
#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)
答案 2 :(得分:4)
有两种更好的解决方案:
-I <path>
(您可以多次执行此操作)。