主要内容:“ ; ”符号有无细节、符号优先级、break;
#include/* 最简单的C语言程序为 main() {} 注意在有些开发环境可能这样还不能运行,在cfree就说不法定位,在linux用gcc编译运行成功 严格来说要返回一个整型,因为函数默认返回int型 */ struct test{ int a; int b; int c; } // 这里也是存在一个有无 " ; " 的问题,没有的话编译器不报错, // 编译在struct结构体当成函数的返回类型,仅限后面是函数的情况下, // 当然这个情况限于func()函数没有在调用前声明,如果把这几段程序放在mian函数后面, // 并在main函数前声明func(),没有加返回类型,但是应该有默认返回int类型; 因为在声明时就确定了 // 返回类型 ,所以在这个情况下编译是会报错误的 func() { printf("test\n"); } int main(int argc, char *argv[]) { /* 1、函数指针调用,如 p是一个函数指针,调用p指向的函数必须写成(*p)();,写成*p(),编译器会解释成*(p()); * 2、类型转换也是单目运算符,单目运算符是自右向左结合,*p++被编译器解释成*(p++),即取指针p所指向的对象,然后将p递增1;而不是 * (*p)++,即指针p所指向的对象,然后将该对象递增1; */ int j,i = 3; switch(i) { case 3: printf("3\n"); case 1: printf("1\n"); break; // 这是i = 3;缺少break就一直执行到有break的地方,如果都没break // 就执行到default结束; // 如果是你本人需要不加break,则好的做法是加上注释 ,如/*此处没有break*/ case 2: printf("2\n"); default: printf("default\n"); } while(i >= 0) //如果在这里加了" ; " 这循环会影响代码逻辑 ,而这些编译不会报错 { printf("i = %d\n",i); i--; } func(); // func();是可以输出printf信息,返回类型没有加;转到上面有个隐含错误 func; // 上面的func();是函数调用;而这里什么也不做,精确讲是计算函数地址 if (i < 0) return ; // 如果在这里少了" ; " 则返回5,下面”i = 5;而这些编译不会报错“ // 在缺少" ; "情况下,当你的i>= 0时 ,i = 5;则被略过了,少了这条赋值 // 语句后续有关操作就会潜在潜伏一个很深,很难发现一个bug i = 5; j = 4; return 0; }
输出:
