欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > 《C陷阱与缺陷》

《C陷阱与缺陷》

2025/5/7 1:08:51 来源:https://blog.csdn.net/LIZHUOLONG1/article/details/143754007  浏览:    关键词:《C陷阱与缺陷》

文章目录

    • 1、【词法陷阱】
    • 1.1 符号与组成符号间的关系
    • 1.1 = 与 ==
    • 1.3 y = x/*p 与 y = x/(*p),a=-1 与 a =- 1 与 a = -1, 老版本编译器的处理是不同的,严格的ANSI C则会报错
    • 1.4 十进制的 076,会被处理为八进制,ANSI C禁止这种用法!
    • 1.5 字符与字符串:'a'(表示十进制的97) 与 "n"
    • 2、【语法陷阱】
    • 2.1 函数声明
    • 2.2 ☆☆☆ 运算符的优先级
      • ☆☆☆ if (flags & FLAG) 、if (flags & FLAG != 0) 、 if (flags & (FLAG != 0))
      • ☆☆☆ r = hi<<4 + low、r = hi << (4 + low)
      • ☆☆☆ 运算符优先级表:
      • (1)赋值 = 的优先级是最低的!
      • (2)任何一个逻辑运算符 优先级低于 任一个关系运算符
      • ☆☆☆ while(c=getc(in) != EOF) 、while((c=getc(in)) != EOF)
      • ☆☆☆ `if ((t=BTYPE(pt1->aty)==STRTY) || t==UNIONTY) { `
    • 2.3 注意语句结束标志的符号:缺少;多了;
    • 2.4 swtich 语句:容易遗失break
    • 2.5 函数调用:f() 调用函数,f 函数地址
    • 2.6 悬挂 else 引发的问题
    • 3 ☆☆☆ 【语义陷阱】

1、【词法陷阱】

1.1 符号与组成符号间的关系

1、符号间的空白(空格符、制表符、换行符)将被忽略

1.1 = 与 ==

1.3 y = x/*p 与 y = x/(*p),a=-1 与 a =- 1 与 a = -1, 老版本编译器的处理是不同的,严格的ANSI C则会报错

在这里插入图片描述

1.4 十进制的 076,会被处理为八进制,ANSI C禁止这种用法!

1.5 字符与字符串:‘a’(表示十进制的97) 与 “n”

用单引号括起的一个字符代表一个整数,而用双引号括起的一个字符代表一个指针,混用会出问题。

2、【语法陷阱】

2.1 函数声明

在这里插入图片描述

2.2 ☆☆☆ 运算符的优先级

☆☆☆ if (flags & FLAG) 、if (flags & FLAG != 0) 、 if (flags & (FLAG != 0))

在这里插入图片描述

☆☆☆ r = hi<<4 + low、r = hi << (4 + low)

在这里插入图片描述

☆☆☆ 运算符优先级表:

(1)赋值 = 的优先级是最低的!

(2)任何一个逻辑运算符 优先级低于 任一个关系运算符

☆☆☆ while(c=getc(in) != EOF) 、while((c=getc(in)) != EOF)

☆☆☆ if ((t=BTYPE(pt1->aty)==STRTY) || t==UNIONTY) {

这里就是先判断==,再进行=
在这里插入图片描述

2.3 注意语句结束标志的符号:缺少;多了;

2.4 swtich 语句:容易遗失break

2.5 函数调用:f() 调用函数,f 函数地址

2.6 悬挂 else 引发的问题

3 ☆☆☆ 【语义陷阱】

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com