当前位置: 首页 > article >正文

《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 ☆☆☆ 【语义陷阱】


http://www.kler.cn/a/392721.html

相关文章:

  • 【JVM】关于JVM的内部原理你到底了解多少(八股文面经知识点)
  • 【前端】Vue中如何避免出现内存泄漏
  • 《深度解析 C++中的弱引用(weak reference):打破循环依赖的利器》
  • 综合案例铁锅炖(CSS项目大杂烩)
  • 35.3K+ Star!PhotoPrism:一款基于AI的开源照片管理工具
  • Linux——基础指令2 + 权限
  • 缓存淘汰策略及其使用场景详解
  • 效率工具-tig的使用
  • 最新的ssl证书有效期只有3个月,ssl到期后如何处理?
  • Java Http 接口对接太繁琐?试试 UniHttp 框架吧
  • Unity Assembly Definition Assembly Definition Reference
  • Python网络爬虫与数据采集实战——网络爬虫的基本流程
  • xcode-select: error: tool ‘xcodebuild‘ requires Xcode, but active developer
  • 随机链表 (Randomized Linked List)、随机树 (Randomized Tree)详细解读
  • [Java]微服务治理
  • 小面馆叫号取餐流程 佳易王面馆米线店点餐叫号管理系统操作教程
  • Unity网络通信(part8.客户端主动断连与心跳消息)
  • Docker:助力应用程序开发的利器
  • 面试编程题目(一)细菌总数计算
  • Mybatis-plus 使用分页插件
  • 重生之从零设计 MySQL 架构
  • cuda的3DArray和TextureObject
  • PHP搭建开发环境(Windows系统)
  • 代码随想录算法训练营第二十九天| 134. 加油站 、135. 分发糖果 、860.柠檬水找零、406.根据身高重建队列。c++转java
  • 本地权限提升漏洞分析
  • Bootstrap 5 轮播