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 陷阱与缺陷(一)的更多相关文章

  1. 读书笔记--C陷阱与缺陷(一)

    要参与C语言项目,于是作者只好重拾C语言(之前都是C++,还是C++方便). 看到大家都推荐看看  C陷阱与缺陷(C traps and pitfalls),于是好奇的开始了这本书的读书之旅. 决定将 ...

  2. C陷阱和缺陷学习笔记

    这段时间把<C陷阱和缺陷>看了,没时间自己写总结.就转一下别人的学习笔记吧http://bbs.chinaunix.net/thread-749888-1-1.html Chapter 1 ...

  3. 读书笔记--C陷阱与缺陷(七)

    第七章 1.null指针并不指向任何对象,所以只用于赋值和比较运算,其他使用目的都是非法的. 误用null指针的后果是未定义的,根据编译器各异. 有的编译器对内存位置0只读,有的可读写. 书中给出了一 ...

  4. 阅读《C陷阱与缺陷》的知识增量

    版权声明:本文为Focustc原创文章.转载请注明作者及出处. https://blog.csdn.net/caozhankui/article/details/35925939 看完<C陷阱与 ...

  5. [C陷阱和缺陷] 第1章 词法“陷阱”

    有感自己的C语言在有些地方存在误区,所以重新仔细把"C陷阱和缺陷"翻出来看看,并写下这篇博客,用于读书总结以及日后方便自身复习. 第1章 词法"陷阱" 1.1 ...

  6. C语言学习书籍推荐《C陷阱与缺陷》下载

    下载地址:点我 凯尼格 (作者), 高巍 (译者) <C和C++经典著作:C陷阱与缺陷>适合有一定经验的C程序员阅读学习,即便你是C编程高手,<C和C++经典著作:C陷阱与缺陷> ...

  7. 《C陷阱与缺陷》读书笔记

    1. 词法“陷阱” = 不同于 == , 可以通过if( 1 == a )来避免 & | 不同于 && || 词法分析中的“贪心法” 编译器将程序分解成符号的方法是,从左到右一 ...

  8. 程序员必知的Python陷阱与缺陷列表

    本文关注的主要是python陷阱,具体而言,是指CPython,而且除非特别说明,所有代码示例都是在python2.7运行的. 我个人对陷阱的定义是这样的:代码看起来可以工作,但不是以你“想当然“”的 ...

  9. 《C陷阱与缺陷》阅读笔记(个人版)

    笔记: 第一章:词法陷阱 提倡显示比较if((x = y) != 0) foo(); 第二章:语法陷阱 已知一个类型的声明 该类型的类型转换:吧声明中的变量名和声明末尾的分号去掉,再将剩余的部分用括号 ...

  10. 我的《C陷阱与缺陷》读书笔记

    第一章 词法“陷阱” 1. =不同于== if(x = y) break; 实际上是将y赋给x,再检查x是否为0. 如果真的是这样预期,那么应该改为: if((x = y) != 0) break; ...

随机推荐

  1. 【线段树】【3-21个人赛】【同样的problemB】

    同一道题  http://blog.csdn.net/zy691357966/article/details/44680121 区间查询最大值 用线段树 比单调队列慢 #include <cst ...

  2. L10 数据入站、转发、出站流程

    二 写出防火墙规则链之间的顺序也就是入站数据流向.转发数据流向.出站数据流向的过程 入站:PREROUTING→INPUT 数据包到达防火墙,由prerouting处理,判断是否修改地址 路由选择:判 ...

  3. Object-C 重载

    方法重载要保证三个条件 1在同一个类中 2.方法参数类型相同 名称相同 3.方法的参数不同 请看下面的例子 @interface whgMyObject : NSObject -(void)print ...

  4. 实现Jquery触发一事件后,停留5秒,再接着触发下面的事件

    这里是一个广告位的Jquery的代码,有两个不同的广告位,一个是中间浮动显示的,显示5秒后自动消失,并限定每天仅出现一次(Cookie实现): //=====================广告位的j ...

  5. Ecside基于数据库的过滤、分页、排序

    首先ecside展现列表.排序.过滤(该三种操作以下简称为 RSF )的实现原理完全和原版EC一样, 如果您对原版EC的retrieveRowsCallback.sortRowsCallback.fi ...

  6. CSS垂直居中解决方案

    问题场景 应用的地方比较普遍,这里有两个赤裸裸的栗子:   也有很多流行的方案,这里只针对各种方案的适用场景来做一些分析 问题抽象 其实,垂直居中问题可以简化成这样:一个容器HTML元素(#conta ...

  7. grep 基于关键字搜索

    grep 'linux' /etc/passwd 搜索passwd文件下的包含linux的行 find / -user linux|grep Video 在用户为linux的根目录下搜房Video内容 ...

  8. web本地存储-IndexedDB

    IndexedDB, HTML5中的一种数据存储方式,索引数据库. 一个网站可能有一个或多个 IndexedDB 数据库,每个数据库必须具有惟一的名称.一个数据库可包含多个对象存储,一个对象存储相当于 ...

  9. java的几个版本以及jre,jdk等概念——【转载】JDK、Java SE、Java EE、Java ME我该选

    我们平时使用的一些软件,有一部分需要Java环境的支持,但是SUN那么多的产品,让人眼花缭乱的版本号,前看后看都差不多的缩写,让我们选择起来的时候常常望而却步,只好跟着感觉走.所以下面我要介绍的就是那 ...

  10. AOJ 2200 Mr. Rito Post Office(Floyd+单调DP)

    [题目链接] http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2200 [题目大意] 一张图中有陆路和水路,水路必须要有船才能走,当船 ...