18 c c++ c-preprocessor
前段时间我发现了一个(相当古老的)C编译器,它以这种方式扫描宏(伪代码):
if line.startswith("#include") or line.startswith("#define"):
...
Run Code Online (Sandbox Code Playgroud)
..哪一种问题对我来说应该放置宏的位置,在一行的开头,如下所示:
void stuff()
{
#if defined(WIN32) || defined(_WIN32)
...
#else
#if defined(__GNUC__)
...
#else
...
#endif
#endif
}
Run Code Online (Sandbox Code Playgroud)
或者更像是这样(因为我这样做,为了提高可读性):
void stuff()
{
#if defined(WIN32) || defined(_WIN32)
...
#else
# if defined(__GNUC__)
...
# else
...
# endif
#endif
}
Run Code Online (Sandbox Code Playgroud)
是一种缩进预处理器代码标准化的方式,也就是说,无论我如何缩进它,它总是以相同的方式工作?
Gre*_*ill 17
一些旧的C编译器要求#define(例如)与左边距齐平:
#define FOO bar
Run Code Online (Sandbox Code Playgroud)
其他C编译器只#需要在左边距,所以你可以:
# define FOO bar
Run Code Online (Sandbox Code Playgroud)
较新的C编译器倾向于接受#任何前导空格之后:
#define FOO bar
Run Code Online (Sandbox Code Playgroud)
如果你想要与这些较旧的编译器兼容,你至少应该把你#放在第一列.如果兼容性无关紧要,那么由您决定.
我通常会尝试不将#ifdef块嵌入到函数中,因此它们是否应该缩进的整个问题大部分都会消失.
| 归档时间: |
|
| 查看次数: |
2989 次 |
| 最近记录: |