jww*_*jww 1 c solaris c-preprocessor
这与多行预处理器宏有关.我对#ifor 感兴趣#elif,而不是定义宏.例如,以下是否有效:
#if defined(X) || defined(Y) || \
defined(Z)
...
#endif
Run Code Online (Sandbox Code Playgroud)
我问的原因是Clang,GCC和MSVC接受它,但Solaris上的一些Sun工具正在抱怨它.GCC记录1.2初始处理时的行为("反斜杠换行"和"续行"),但像DBX这样的Sun工具遇到内部错误.
它们是有效的,因为在第4阶段完成预处理之前,第2阶段会删除换行符之前的反斜杠.
阶段2
- 每当反斜杠出现在一行(紧接着是换行符)后,反斜杠和换行都会被删除,将两条物理源行合并为一条逻辑源行.这是一次单行操作:以两个反斜杠结尾的行后跟一个空行不会将三行合并为一行.
...
第4阶段
- 执行预处理程序.
http://en.cppreference.com/w/c/language/translation_phases