不久前,我发现了一个(相当古老的)C 编译器,它以这种方式扫描宏(伪代码):
if line.startswith("#include") or line.startswith("#define"):
...
.. 哪一种对我提出了一个问题,宏应该真正放在哪里,在一行的开头,就像这样:
void stuff()
{
#if defined(WIN32) || defined(_WIN32)
...
#else
#if defined(__GNUC__)
...
#else
...
#endif
#endif
}
或者更确切地说是这样(我就是这样做的,以提高可读性):
void stuff()
{
#if defined(WIN32) || defined(_WIN32)
...
#else
# if defined(__GNUC__)
...
# else
...
# endif
#endif
}
预处理器代码的缩进方式是否标准化,即无论我如何缩进它,它总是以相同的方式工作?
最佳答案
一些旧的 C 编译器要求 #define
(例如)与左边距齐平:
#define FOO bar
其他 C 编译器只要求 #
位于左边距,因此您可以:
# define FOO bar
较新的 C 编译器倾向于在任何前导空格之后接受 #
:
#define FOO bar
如果你想与这些旧的编译器兼容,你至少应该把你的 #
放在第一列。如果兼容性无关紧要,那就看你自己了。
我通常会尽量不在函数中嵌入 #ifdef
block ,因此它们是否应该缩进的整个问题大部分都消失了。
关于c++ - 预处理器指令应该在行首吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4721978/