考虑以下示例:

#define HEADER_OPEN  <
#define HEADER_CLOSE >
#define HEADER_PATH  sys/
#define HEADER_FILE  types.h

#include HEADER_OPEN HEADER_PATH HEADER_FILE HEADER_CLOSE

int main(void)
{
    clock_t c;

    return 0;
}

包含<sys/types.h>头的方法比较长问题是我是否可以用类似的方式构造带有双引号的header,比如"release/myheader.h"是否有任何方法可以“转义”双引号字符,以便可以从多个部分(而不仅仅是一个)构造这样的(最终)指令?

最佳答案

格泽戈兹的解决方案几乎是正确的。

#define EXPAND( X ) X
#define STRINGIZE_LITERAL( X ) # X
#define STRINGIZE( X ) STRINGIZE_LITERAL( X )

#define HEADER( PATH, FILE ) STRINGIZE( EXPAND( PATH )FILE )

#include HEADER( sys/, types.h )

EXPAND宏用于避免路径和文件名之间的空格字符。
注意,标准保证了这一点,但不能保证代码使用大括号,因为在这种情况下,空白处理是特定于实现的。

10-08 07:05
查看更多