语句结束标志的分号
- 多写一个分号
if(x[i]>big)
big=x[i];
与
if(x[i]>big);
big=x[i];
//相当于
//if(x[i]>big){}
// big=x[i];
-
遗漏分号
-
情况一
```c if(n<3) return temp=x[0]; x[0]=x[1]; x[1]=temp; //等同于 /* if(n<3) return temp=x[0]; x[0]=x[1]; x[1]=temp; */ ```
上述代码所在函数 若返回值为void,编译器会报错,若默认返回int型,当n>=3时,第一个赋值语句会被跳过,导致程序运行出错。
-
情况二
当一个声明的结尾紧跟一个函数定义时,如果声明结尾的分号被省略,编译器可能把声明的类型视作函数的返回值类型。
struct logrec{ int data; int time; int code; } main(){ /* 程序段 */ }
-
switch语句
c语言中把case标号当作真正意义上的标号,因此程序的控制流程会径直通过case标号,而不受任何影响。对于下面的程序代码段
switch(color){
case 1:printf("red");
case 2:printf("yellow");
case 3:printf("blue");
}
当color值为2时,运行结果为:
yellowblue
也就是说,对于c语言的switch语句,如果case部分不加break语句,程序会从满足条件的case部分依次执行剩余的所有case部分的语句。
函数调用
如果存在以下函数
f(){
}
则
f();
是对该函数的调用
f;
则只是计算函数f的地址,并未调用该函数