问这里有一些可爱的预处理器宏
#define begin { #define end }有了它们,我就可以编写更像 Pascal 的 C 代码。你们觉得怎么样?
答尽管使用这类宏可能表面上很有吸引力,但通常不推荐;在严重的情况下,这种做法被称为“预处理器滥用”。
试图为满足您自己的偏好或匹配其他语言来重新定义语言的语法,这一点几乎没有什么好处。您的偏好不太可能被代码的后续读者或维护者共享,并且任何其他语言的模拟都极不可能完美(因此任何所谓的便利性或实用性都可能被记住不完美之处带来的麻烦所抵消)。
总的来说,如果预处理器宏的使用遵循 C 语言的语法,那将是一个好主意。没有参数的宏应该看起来像变量或其他标识符;有参数的宏应该看起来像函数调用。问问自己:“如果我在不通过预处理器运行的情况下,以某种方式将此代码呈现给编译器,我会收到多少语法错误?”(当然,您会收到大量未定义符号和非常量数组维度,但那些不是**语法**错误。)此规则意味着 C 代码加上宏调用,仍然看起来像 C 代码。所谓的非语法宏,如begin和end或CTRL(D)(参见问题 10.21)可能会让 C 语言看起来像胡言乱语(另见问题 20.36)。
这当然很大程度上是一个风格问题;另请参见第 17 节。