Microsoft Compiler宏扩展空间的问题

时间:2011-04-02 06:59:20

标签: c windows visual-c++

我在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>

我如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

看起来您希望并置目录和标题名称。您使用##,如下所示:

# define _3RD_PARTY_HEADERS(headername) <_OTHER_INCLUDE_DIR\\##headername> 

答案 1 :(得分:0)

是否无法以不同方式表示\个字符序列?问题是这是C和C ++的转义字符。 C99明确说明

  

如果字符',\,“,//或/ *   以&lt;之间的顺序发生。   和&gt;分隔符,行为是   未定义。

"..."包含了类似的词组。)

我想,对于C ++,必须有类似的东西。所以也许你可以使用/并且编译器会在内部替换它们以引用系统上的正确文件。

答案 2 :(得分:0)

你知道,大多数编译器都有一个命令行参数来添加到包含路径... -I或/我最有可能是微软的。一个人通常不会做你在这里做的事情,不管你是否能让它发挥作用。