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

kev*_*rpe 4 c macros include ibm-midrange

我在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")
这将在每个平台上正确扩展.

请指教.

unk*_*ulu 6

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


use*_*ged 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
Run Code Online (Sandbox Code Playgroud)

你可以用它作为

#include SAFE_INCLUDE(MYLIB)
Run Code Online (Sandbox Code Playgroud)