这与Multi line preprocessor macros有关。我对#if
或#elif
感兴趣,而不是定义的宏。例如,以下是否有效:
#if defined(X) || defined(Y) || \
defined(Z)
...
#endif
我问的原因是Clang,GCC和MSVC接受了它,但Solaris上的一些Sun工具正在抱怨它。 GCC记录1.2 Initial processing(“反斜杠 - 换行”和“续行”)的行为,但像DBX这样的Sun工具遇到内部错误。
答案 0 :(得分:6)
它们有效,因为在第4阶段完成预处理之前,第2阶段会删除换行前的反斜杠。
第2阶段
- 每当反斜杠出现在一行的末尾(后面紧跟换行符)时,将删除反斜杠和换行符,将两条物理源行合并为一个逻辑源行。这是一次单行操作:以两个反斜杠结尾的行后跟一个空行不会将三行合并为一行。
醇>...
第4阶段
- 执行预处理程序。
醇>