Mic*_*ael 8 c macros portability indentation
我很好奇为什么我看到几乎所有的C宏格式如下:
#ifndef FOO
# define FOO
#endif
Run Code Online (Sandbox Code Playgroud)
或这个:
#ifndef FOO
#define FOO
#endif
Run Code Online (Sandbox Code Playgroud)
但从来没有这样:
#ifndef FOO
#define FOO
#endif
Run Code Online (Sandbox Code Playgroud)
(此外,vim的=运算符似乎只计算前两个是正确的.)
这是由于编译器之间的可移植性问题,还是仅仅是标准做法?
小智 7
我已经看到它完成了三种方式,它似乎是一种风格问题,而不是语法问题
虽然通常第二个例子是最常见的,但我见过第一个(或第三个)用于帮助区分多个#ifdefs级别的情况.有时逻辑可以变得非常嵌套,并且一目了然地理解它的唯一方法是使用缩进,就像在{和}之间缩进代码块一样.
IIRC,较旧的 C 预处理器要求 # 作为行上的第一个字符(尽管我从未真正遇到过有此要求的字符)。
我从来没有像你的第一个例子那样看到你的代码。我通常像你的第二个例子一样编写预处理器指令。我发现它在视觉上干扰了实际代码的缩进较少(不再是我用 C 编写的)。
在GNU C预处理程序手册说:
预处理指令是程序中以“#”开头的行。'#' 前后允许有空格。