考虑以下示例:
#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
宏用于避免路径和文件名之间的空格字符。注意,标准保证了这一点,但不能保证代码使用大括号,因为在这种情况下,空白处理是特定于实现的。