小编use*_*697的帖子

有条件的预处理程序分布在#include文件中

这合法吗?

foo.h

    #if 1
    #include "bar.h"
Run Code Online (Sandbox Code Playgroud)

bar.h

    #endif
Run Code Online (Sandbox Code Playgroud)

foo.c

    #include "foo.h"
Run Code Online (Sandbox Code Playgroud)

clang-700.1.81 以一种有趣的方式抱怨:

    In file included from foo.c:1:
    In file included from ./foo.h:2:
    ./bar.h:1:2: error: #endif without #if
    #endif
Run Code Online (Sandbox Code Playgroud)

(这意味着确实如此 #include "bar.h"

    # 3 "./foo.h" 2
    In file included from foo.c:1:
    ./foo.h:1:2: error: unterminated conditional directive
    #ifndef FOO
Run Code Online (Sandbox Code Playgroud)

(这意味着没有 #include "bar.h")。

我感到不安的是,预处理器所关心的不仅仅是标准所要求的。如果我错了,请纠正我,否则,请证明我是对的。

c language-lawyer c-preprocessor

5
推荐指数
1
解决办法
331
查看次数

3
推荐指数
1
解决办法
94
查看次数