我在Microsoft C编译器预处理器下的头宏扩展中遇到此问题:
custom.h
.
.
# define _OTHER_INCLUDE_DIR C:\3rdparty\usr\include
# define _3RD_PARTY_HEADERS(headername) <_OTHER_INCLUDE_DIR\headername>
.
.
使用标题测试:
headertest.h
.
.
#include _3RD_PARTY_HEADERS(stdint.h)
.
Microsoft C预处理器扩展第二行,如(custom.h):
#include <C:\3rdparty\usr\include\headername>
如果我设置:
# define _3RD_PARTY_HEADERS(headername) <_OTHER_INCLUDE_DIR\ headername>
结果是:
#include <C:\3rdparty\usr\include\ stdint.h>
我如何解决这个问题?
答案 0 :(得分:1)
看起来您希望并置目录和标题名称。您使用##
,如下所示:
# define _3RD_PARTY_HEADERS(headername) <_OTHER_INCLUDE_DIR\\##headername>
答案 1 :(得分:0)
是否无法以不同方式表示\
个字符序列?问题是这是C和C ++的转义字符。 C99明确说明
如果字符',\,“,//或/ * 以&lt;之间的顺序发生。 和&gt;分隔符,行为是 未定义。
("..."
包含了类似的词组。)
我想,对于C ++,必须有类似的东西。所以也许你可以使用/
并且编译器会在内部替换它们以引用系统上的正确文件。
答案 2 :(得分:0)
你知道,大多数编译器都有一个命令行参数来添加到包含路径... -I或/我最有可能是微软的。一个人通常不会做你在这里做的事情,不管你是否能让它发挥作用。