C 在空格方面似乎相当宽容。
我们可以在运算符周围、函数名称与其括号内的参数列表之间、数组名称与其索引之间等使用或省略空格,以使代码更具可读性。我知道这是一个偏好问题。
我唯一能想到的不允许空格的地方是:
#include < stdio.h > // fatal error: stdio.h : No such file or directory
C 语言中还有哪些上下文不能使用空格来提高可读性?
最佳答案
在大多数情况下,在单个标记中添加空格会使程序无效或更改标记的含义。一个明显的例子:"foo"
和 "foo "
都是具有不同值的有效字符串文字,因为字符串文字是单个标记。将 123456
更改为 123 456
会将其从单个整数常量更改为两个整数常量,从而导致语法错误。
异常(exception)情况涉及预处理器。
您已经提到了#include
指令。注意给定:
#include "header.h"
"header.h"
在句法上不是字符串文字;它在字符串文字有意义之前被处理。语法相似,但例如 header 名称中的 \t
序列不一定由制表符替换。
换行符(一种空白形式)在预处理器指令中很重要;你不能合法地写:
#ifdef
FOO
/* ... */
#endif
但是除了换行符之外的空格是允许的:
# if SPACES_ARE_ALLOWED_HERE
#endif
在一种情况下,我可以想到在预处理器标记之间允许空格,但它改变了含义。在类函数宏的定义中,引入参数列表的 (
必须紧跟在宏名之后。这:
#define TWICE(x) ((x) + (x))
将 TWICE
定义为一个接受一个参数的类似函数的宏。但是这个:
#define NOT_TWICE (x) ((x) + (x))
将 NOT_TWICE
定义为不带参数的普通宏,扩展为 (x) ((x) + (x))
。
此规则仅适用于宏定义;宏调用遵循正常规则,因此您可以编写 TWICE(42)
或 TWICE ( 42 )
。
关于c - 什么时候不允许使用空格来提高可读性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27334006/