C宏/ #define缩进?

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级别的情况.有时逻辑可以变得非常嵌套,并且一目了然地理解它的唯一方法是使用缩进,就像在{和}之间缩进代码块一样.


Set*_*eth 5

IIRC,较旧的 C 预处理器要求 # 作为行上的第一个字符(尽管我从未真正遇到过有此要求的字符)。

我从来没有像你的第一个例子那样看到你的代码。我通常像你的第二个例子一样编写预处理器指令。我发现它在视觉上干扰了实际代码的缩进较少(不再是我用 C 编写的)。

GNU C预处理程序手册说:

预处理指令是程序中以“#”开头的行。'#' 前后允许有空格。

  • 如果预处理器指令的第一列中没有“#”,旧的 VAX C 编译器(大约 1986 年)会抛出错误。 (2认同)