C语言设计得很麻拐。
初学者经常面临这样的麻烦:
- if(a>0);
- ++x;
这个代码的“++x”无论如何都会被执行,旁观者很快就能看出来是因为if语句后面多了一个分号。
- struct A
- {
- int a;
- }
这个代码会导致其后的代码(甚至是另外一个文件,取决于头文件包含顺序)编译出错,错误信息无法理解,焦头烂额中,有经验的程序员马上会去想“是不是哪个类后面少了一个分号?”
从这两个典型BUG入手,我们来深入研究一下C语言的“语句、分号、大括号”究竟是什么。
C语言的源代码(.h和.c文件)包含这么几部分内容:注释、预处理指令、编译器指令、语句、函数定义。
注释我们当然很清楚,不算在代码里面的,没什么结束符要求。
预处理指令和编译器指令也不是参与编译的代码,以“#”开头,没有结束符要求。
预处理之后.c文件包含的头文件被展开,形成一个完整的源文件,里面只有要编译的语句和函数定义。为什么特别把“函数定义”单列出来,因为函数定义的结尾是不需要加分号的。
语句分两种:
语句的其它关键点:
例外:
编程建议:
(这里是结束)