【发布时间】:2016-01-16 20:08:14
【问题描述】:
我对 C 了解不多,但我了解基础知识,并且据我所知:
int main() {
if (1 == 1) printf("Hello World!\n");
return 0;
}
和
int main() {
if (1 == 1)
printf("Hello World!\n");
return 0;
}
和
int main() {
if (1 == 1) {
printf("Hello World!\n");
}
return 0;
}
在语法上都是完全等价的。陈述属实;字符串被打印;大括号(显然)是可选的。
有时,尤其是在 SO 上,我会看到类似以下内容:
int main() {
if (1 == 1)
printf("one is one\n");
printf("is this inside the if statement??/who kn0WS\n");
return 0;
}
由于CodeGolf 的权力,我被引导相信C 与空格无关;词法分析器将标记分解为其组成部分并去除字符串外部的空白。
(我的意思是,每个语句都使用分号的全部原因是解析器可以去除 \n、\t、 文字空格,并且仍然知道每个语句的结束位置,对吗? ?)
那么,如果要忽略空格,如何能够明确地解析前面的代码(或者也许有人可以提出一个更好的例子来说明我的意思)?
如果 C 程序员想要使用依赖于空格的 Python 语法编写,他们为什么要编写 C,以及为什么在任何地方教 C 的地方都教它可以编写词法歧义(对我、程序员和计算机而言)像这样的陈述?
【问题讨论】:
-
你为什么不阅读 C11 草案标准,
6.8.4 Selection statements(可能还有6.8.2 Compound statement),看看你能不能弄明白?
标签: c syntax lexical-analysis