c语言没有break执行default,程序猿之---C语言细节2(“ ; ”符号有无细节、符号优先级、break)...

主要内容:“ ; ”符号有无细节、符号优先级、break;

一、;符号有无细节

见程序举例

二、符号优先级

*p++被编译器解释成*(p++)

三、break

switch语句中

四、其它细节

a、最简单的C语言程序为

main(){}

注意在有些开发环境可能这样还不能运行,在cfree就说无法定位,在linux用gcc编译运行成功严格来说要返回一个整型,因为函数默认返回int型

#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;

}

输出:

0818b9ca8b590ca3270a3433284dd417.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值