c陷阱与缺陷第一章

简介:

@[TOC]

前言:

博主实力有限,有什么错误,请你斧正,非常感谢!

博文属于<<c陷阱与缺陷>>专栏,后面会持续更新.

第一章 :词法陷阱

当我们对一段英语短句进行理解时,我们关注的是 单词,而不是 字母

同样对于c语言等编程语言所写的程序:当我们阅读一句程序时,并不考虑单个字符,而是对字符组成的符号进行理解。

1. 赋值运算符=与比较运算符==

对于赋值运算符 =:

如果用于逻辑判断时,其逻辑值是0或者非0值。

对于比较运算符==

其;逻辑值只有`0或者1

image-20210828093558597

2.按位与&,按位或|,逻辑且&&,逻辑或||

按位与&:

1.&是双目运算符
2.esp: a&b
其是对a与b的二进制补码中的每位进行比较运算。a或者b中只要一边二进制补码对应位中是0,那么新的二进制位对应位就为0
image-20210828100130555

按位或|

1.双目运算符
2.esp:a\ b
其是对a与b的二进制补码中的每位进行比较运算。a或者b中只要一边二进制补码对应位中是1,那么新的二进制位对应位就为1
image-20210828121652980

逻辑且&&

1.双目运算符
2.两边只要一边为假(0),表达式就为假。且具有改变运算性质的属性,
即(a&&b)一旦a为假,b表达式就不需要计算,逻辑判断最终结果直接为假
image-20210828122507486

逻辑或||

1.双目运算符
2.两边只要一边为真(1),表达式就为真。且具有改变运算性质的属性,
即(a&&b)一旦a为真,b表达式就不需要计算,逻辑判断最终结果直接为真
image-20210828122632907

3.词法分析中的“贪心法”

  • 对于比较运算符‘==’,在程序中,编译器是怎么判断出的。

规则如下:

编译器将程序分解成符号,从左到右一个一个字符读入,如果读入的字符组成的字符串是·有意义的符号,就继续读,直到读入的字符组成的字符串不能组成一个有意义的符号,那么该读入所组成的字符串即为一个符号。
exp1:a - - -b
1.读入a,继续读。读入-,"a-"不能在组成有意义符号,"a"做为符号
2.从第一个-读入,继续读,读完后组成字符串"--",继续读,"---",不能再组成一个符号。
3.从第三个'-',读入,再读入b,-b无意义,`'-'`做为一个符号
4. 读入b,无法再读,b做为符号
5.实际为 (a--)-(b)
exp2:y=x/*p
在读入'/'后,读入'*',再读入'p'/*p无意义符号。因此"/ *"做为注释符。
exp3:y=/ *p
在读入/ 后,==空格==读入,但是 ==/== 无意义。因此/做为除法符号.所以最后 原式即是 y= / (* p)

4.整形变量:

如果整形常量的第一个字符是数字 0,那么该常量被视作 八进制

image-20210828125819359

5.字符与字符串

  • 用单引用引起的一个字符,实际是一个整形数。根据ASCII原则,每个字符对应一个十进制数。
  • 对与双引号引起的字符串,其实质:是一个无名数组起始字符的==指针==,该数组被双引号之间的字符以及一个额外的二进制为0的==字符串结束标志‘\0’初始化==
  • 因此单引号实质是整形,双引号实质是指针。混用时,编译器会检查出来。
  • 对于‘yes’这种是合法的,但是对于不同编译器,其对应整数不同

    Borland C++ v5.5和 LCC v3.6 中的做法是:忽略多余字符,最终整数值是 第一个字符的整数值.

    Visual C++ 6.0和 GCC v2.95中做法是:忽略多余字符,最终整数值是最后一个个字符的整数值.

    image-20210828131043300

6.练习

1.n-->0的含义是(n--) >0,还是 (n- ) ->。
2.a+++++b的含义是什么,以及其形式是否正确。

7. 解析

1.是 (n--)> 0;
贪心法中,"n-" 虽然有意义,但是需要继续读入,因此"--"做为自减符号,"-->"无意义符号
2((a++)++ )+b
但是对于++其必需修饰可改的值,而a++引用后是一个常量值,不符合规则。

对《c陷阱与缺陷》感兴趣的,请到网盘自行下载

链接:https://pan.baidu.com/s/1VV5xitjQPKAEHhLhyA3CBQ
提取码:2021

相关文章
|
1天前
|
数据采集 人工智能 安全
|
10天前
|
云安全 监控 安全
|
2天前
|
自然语言处理 API
万相 Wan2.6 全新升级发布!人人都能当导演的时代来了
通义万相2.6全新升级,支持文生图、图生视频、文生视频,打造电影级创作体验。智能分镜、角色扮演、音画同步,让创意一键成片,大众也能轻松制作高质量短视频。
923 150
|
16天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1658 8
|
7天前
|
人工智能 自然语言处理 API
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸
一句话生成拓扑图!next-ai-draw-io 结合 AI 与 Draw.io,通过自然语言秒出架构图,支持私有部署、免费大模型接口,彻底解放生产力,绘图效率直接爆炸。
614 152
|
9天前
|
人工智能 安全 前端开发
AgentScope Java v1.0 发布,让 Java 开发者轻松构建企业级 Agentic 应用
AgentScope 重磅发布 Java 版本,拥抱企业开发主流技术栈。
582 15
|
2天前
|
编解码 人工智能 机器人
通义万相2.6,模型使用指南
智能分镜 | 多镜头叙事 | 支持15秒视频生成 | 高品质声音生成 | 多人稳定对话