这合法吗?
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")。
我感到不安的是,预处理器所关心的不仅仅是标准所要求的。如果我错了,请纠正我,否则,请证明我是对的。
的典型实施的operator+=经过RHS作为const参考:
X& operator+=(const X& rhs)
Run Code Online (Sandbox Code Playgroud)
然而,在
x += x;
Run Code Online (Sandbox Code Playgroud)
RHS被修改。这会调用UB吗?