【问题标题】:Problem with Microsoft Compiler macro expansion spacesMicrosoft 编译器宏扩展空间的问题
【发布时间】:2011-04-02 06:59:20
【问题描述】:

我在 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 预处理器扩展第二行 like(custom.h):

#include  <C:\3rdparty\usr\include\headername>

如果我设置:

# define _3RD_PARTY_HEADERS(headername) <_OTHER_INCLUDE_DIR\ headername>

结果是:

#include  <C:\3rdparty\usr\include\ stdint.h>

我该如何解决这个问题?

【问题讨论】:

    标签: c windows visual-c++


    【解决方案1】:

    您似乎想将您的目录和标题名称并列。你使用##,像这样:

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

    【讨论】:

    • 结果是:#include
    • @user:糟糕,编译器似乎将反斜杠视为转义。添加一个额外的,正如我在我编辑的帖子中显示的那样。
    【解决方案2】:

    有没有办法让\ 字符序列以不同的方式表示?问题是这是 C 和 C++ 的转义字符。 C99 明确声明

    如果字符 '、\、"、// 或 /* 发生在 分隔符,行为是 未定义。

    "..." 包含类似的短语。)

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2017-08-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多