gpt4 book ai didi

c - 是否可以将第三种#include 指令中的 "glue"预处理器标记放入双引号中?

转载 作者:太空宇宙 更新时间:2023-11-03 23:49:18 25 4
gpt4 key购买 nike

考虑以下示例:

#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 。问题是我可以用类似的方式用双引号构造 header 吗 "release/myheader.h" ?有什么方法可以“转义”双引号字符,这样(最终)指令可以由多个部分(不仅仅是一个)构造吗?

最佳答案

Grzegorz 的解决方案几乎是正确的。

#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 宏用于避免路径和文件名之间的空格字符。

请注意,标准保证此功能有效,但带有尖括号的代码则不然,因为这种情况下的空白处理是特定于实现的。

关于c - 是否可以将第三种#include 指令中的 "glue"预处理器标记放入双引号中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24745671/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com