在CI中可以执行以下操作:
int main()
{
printf("HELLO WORLD");;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
}
Run Code Online (Sandbox Code Playgroud)
它的工作原理!这是为什么?
我的个人想法:分号是一个NO OPERATION(来自维基百科)指标,有一个巨大的字符串就像有一个并告诉C声明已经结束一样.
C允许空语句.它们可用于空循环之类的东西:
while (*d++ = *s++)
; // null statement.
Run Code Online (Sandbox Code Playgroud)
你刚刚创建了一系列它们.
它还允许不完全空的语句,如:
0;
1+1;
Run Code Online (Sandbox Code Playgroud)
这两个都包含表达式,但没有副作用,因此它们并没有真正做任何事情.他们被允许,尽管编译器可能会对它们发出警告.
一个不错的编译器通常不会为上述任何一个生成任何代码(大多数甚至不会关闭优化,我无法想象一个优化开启的代码).
分号终止一个语句......连续的分号代表无操作语句(如你所说).考虑:
while (x[i++] = y[j++])
;
Run Code Online (Sandbox Code Playgroud)
这里,所有工作都是在循环测试条件下完成的,因此需要一个空语句.但是,即使没有控制循环,也允许空语句.
那么,预处理器的许多用途可能会扩展到某些实际的C代码,或者根据一些早期的定义被删除,但是给出了...
MY_MACRO1();
MY_MACRO2();
Run Code Online (Sandbox Code Playgroud)
...预处理器只能替换MY_MACROX()文本,并在可能在空语句之后留下尾随分号.如果编译器拒绝这一点,那么使用预处理器就会困难得多,或者预处理器调用不像非预处理器函数调用(它们必须在替换中输出分号,并且调用者必须避免使用尾随分号当使用它们时 - 这将使实现更难以无法用巧妙的宏替代性能,调试和定制目的的函数.
| 归档时间: |
|
| 查看次数: |
6885 次 |
| 最近记录: |