c 陷阱与缺陷(一)
1.程序在设计时,往往得出正确的结果,但是它并不是程序员自己想要的。
例如:
printf("hello world!")
编译器进行编译时不会出现任何问题,但是结果:
提示竟然出现在!的后面。因此 \ n 的使用变的尤为重要。
2. = 和 ==
while( c = ' ' || c == ' \t ' || c == ' \ n' )
这段程序程序员想表达的意思 当 c 为 空格、制表符、换行时,执行子程序。但是如果将== 写成 = 时,由于赋值运算符的优先级低于逻辑运算符。
‘ ’ 的ascii值为32,所以 c 永远不为0,则进入死循环。
1 #include<stdio.h>
2 int main()
3 {
4 char ch;
5 scanf("%c",&ch);
6 while(ch = ' ' || ch=='\t'|| ch== '\n')
7 {
8 printf("******\n");
9 printf("%d\n",ch);
10 }
11 return 0;
12 }
结果:
3.编译器语法分析中的贪心法
编译器将程序分解成符号的方法是:从左到右一个一个字符的读入,如果该字符可能成为一个符号,则读入下一个字符,判断这两个字符是否为符号,如果是接着判断,直到不可能组成符号为止。
y= x/*p /* *p is pointed */; 编译器会解析成y=x;
1 #include<stdio.h>
2 int main()
3 {
4 int a=10;
5 int *p=&a;
6 int y;
7 y=a/*p /* ********** */;
8 printf("%d\n",y);
9 }
正确写法应该(*p)加括号,或/ 与 * 之间加空格。
4. 整形的数如果 int a=076; // 会被编辑器解析成八进制数
1 #include<stdio.h>
2 int main()
3 {
4 int a=076;
5 printf("%d\n",a);
6 return 0;
7 }
5. 字符与字符串: 用单引号引起的一个字符实际上代表一个整数,用双引号引起的字符串,代表一个指向无名数组的起始字符的指针,该数组被 双引号之间的字符 和 一个
额外的二进制字符‘\0’初始化
6.嵌套注释:
/ */**/"*/"/*"/**/
允许嵌套 “/*”
不允许嵌套 “*/”
/*/*/0*/**/1
允许嵌套 1
不允许嵌套 0*1
1 #include<stdio.h>
2 int main()
3 {
4 printf("%s\n",/*/**/"*/"/*"/**/);
5 printf("%d",/*/*/0*/**/1);
6 printf("\n");
7 return 0;
8 }
c 陷阱与缺陷(一)的更多相关文章
- 读书笔记--C陷阱与缺陷(一)
要参与C语言项目,于是作者只好重拾C语言(之前都是C++,还是C++方便). 看到大家都推荐看看 C陷阱与缺陷(C traps and pitfalls),于是好奇的开始了这本书的读书之旅. 决定将 ...
- C陷阱和缺陷学习笔记
这段时间把<C陷阱和缺陷>看了,没时间自己写总结.就转一下别人的学习笔记吧http://bbs.chinaunix.net/thread-749888-1-1.html Chapter 1 ...
- 读书笔记--C陷阱与缺陷(七)
第七章 1.null指针并不指向任何对象,所以只用于赋值和比较运算,其他使用目的都是非法的. 误用null指针的后果是未定义的,根据编译器各异. 有的编译器对内存位置0只读,有的可读写. 书中给出了一 ...
- 阅读《C陷阱与缺陷》的知识增量
版权声明:本文为Focustc原创文章.转载请注明作者及出处. https://blog.csdn.net/caozhankui/article/details/35925939 看完<C陷阱与 ...
- [C陷阱和缺陷] 第1章 词法“陷阱”
有感自己的C语言在有些地方存在误区,所以重新仔细把"C陷阱和缺陷"翻出来看看,并写下这篇博客,用于读书总结以及日后方便自身复习. 第1章 词法"陷阱" 1.1 ...
- C语言学习书籍推荐《C陷阱与缺陷》下载
下载地址:点我 凯尼格 (作者), 高巍 (译者) <C和C++经典著作:C陷阱与缺陷>适合有一定经验的C程序员阅读学习,即便你是C编程高手,<C和C++经典著作:C陷阱与缺陷> ...
- 《C陷阱与缺陷》读书笔记
1. 词法“陷阱” = 不同于 == , 可以通过if( 1 == a )来避免 & | 不同于 && || 词法分析中的“贪心法” 编译器将程序分解成符号的方法是,从左到右一 ...
- 程序员必知的Python陷阱与缺陷列表
本文关注的主要是python陷阱,具体而言,是指CPython,而且除非特别说明,所有代码示例都是在python2.7运行的. 我个人对陷阱的定义是这样的:代码看起来可以工作,但不是以你“想当然“”的 ...
- 《C陷阱与缺陷》阅读笔记(个人版)
笔记: 第一章:词法陷阱 提倡显示比较if((x = y) != 0) foo(); 第二章:语法陷阱 已知一个类型的声明 该类型的类型转换:吧声明中的变量名和声明末尾的分号去掉,再将剩余的部分用括号 ...
- 我的《C陷阱与缺陷》读书笔记
第一章 词法“陷阱” 1. =不同于== if(x = y) break; 实际上是将y赋给x,再检查x是否为0. 如果真的是这样预期,那么应该改为: if((x = y) != 0) break; ...
随机推荐
- 用HTML5、地理定位API和Web服务来开发移动应用
HTML 5 是一项让人振奋的技术,这有着充分的理由.这将会是一次技术突破,因为它可以将桌面应用程序功能带入浏览器中.除了传统浏览器外,对于移动浏览器,其潜力甚至更大.不仅如此,最流行的移动浏览器甚至 ...
- Android appcompat备案
使用Eclipse创建Android项目,project多出appcompat_v7,此情况在ADT升级到22.6.x版本后出现,22.3.x前版本不存在.此项为了实现向下兼容sdk的功能. 点击项目 ...
- 在ASP.NET项目中使用CKEditor
CKEditor是什么 CKEidtor是一个在线富文本编辑器,可以将让用户所见即所得的获得编辑在线文本,编辑器或自动将用户编辑的文字格式转换成html代码. 在ASP.NET工程中添加CKEdito ...
- SVG彩虹字
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- Java多线程并发编程之原子变量与非阻塞同步机制
1.非阻塞算法 非阻塞算法属于并发算法,它们可以安全地派生它们的线程,不通过锁定派生,而是通过低级的原子性的硬件原生形式 -- 例如比较和交换.非阻塞算法的设计与实现极为困难,但是它们能够提供更好的吞 ...
- apt-get命令学习
在windows下安装软件,我们只需要有EXE文件,然后双击,下一步直接OK就可以了.但在LINUX下,不是这样的.每个LINUX的发行版,比如UBUNTU,都会维护一个自己的软件仓库,我们常用的几乎 ...
- Eclipse使用git 上传代码至github
右击项目,选择Team->Share Project,弹出如下窗口. 选择git,next,在弹出的界面上,①先勾选Use or create……,②createrepository,③勾选工程 ...
- Android_CodeWiki_03
1.发送不重复的通知(Notification) public static void sendNotification(Context context, String title, String m ...
- 大型网站性能优化(页面(HTML)优化的方法)
页面(HTML)优化的方法 除了语言层面上进行优化外,对Web开发,HTML的优化将很大程度上减轻服务器的负载,提高网站的性能 1). 减少HTTP请求数.打开网页,浏览器会发出很多请求,图片,脚本, ...
- 文本导出到pdf文件
程序中数据导出是经常有的需求,今天学习把文本导出到pdf文件.主要是用QPrinter,QPainter TextEditToPdf::TextEditToPdf(QWidget *parent, Q ...