问题
if (1)
printf("1"),
printf("2"),
printf("3");
- 众所周知if语句没使用 大括号的话作用域只有一行,怎样算一行?问题的本质是:对于编译器而言如何界定代码行和代码块?
- 不管是编译型语言还是解释型语言,处理的对象(代码)都是字符串形式的,编译器和解释器处理代码时是如何界定的一行代码和一块代码?
- 编译器和解释器并不一定是按照人的思维方式去界定的代码行和代码块。
问题的意义
- 对于编译器,需要站在人类的角度,才能对程序员更友好,接近于人类习惯,更容易理解。
- 对于人类,需要站在编译器的角度,才能理解编译器做了什么,程序是怎么运行的。
编译器 (c/c++ 编译器)
- 上面代码会打印123,编译器将所有printf都认为是一行了。
- 结论:对于c/c++ 编译器,一行代码并不是人类眼里的一行代码,编译器并不是以换行符为一行的结束符,编译器是以 ;为一行的结束符,代码中的空格,换行都会被临时删除。
解释器 (python 解释器)
- 对于python解释器,它是以代码中换行符作为一行的界定符,因此它更符合人类的书写习惯,正是因为如此,python对代码的代码的书写格式要求较高,该换行的需要换行,该空格的一定要按标准空格。