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. Mysql安装时出现APPLY security settings错误

    在安装mysql数据库时,如果重新安装,很容易遇见apply security setting error(access denied for user 'root@localhost'(using  ...

  2. java中驼峰与下横线格式字符串互转算法

    public static final char UNDERLINE = '_'; /** * 驼峰格式字符串转换为下划线格式字符串 * * @param param * @return */ pub ...

  3. Android设置输入框和软键盘动态悬浮

    <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android=&q ...

  4. web Form 表单method="get" method="post" 区别

    get和post方法的不同 在B/S应用程序中,前台与后台的数据交互,都是通过HTML中Form表单完成的.Form提供了两种数据传输的方式——get和post.虽然它们都是数据的提交方式,但是在实际 ...

  5. 读书笔记-Coding faster(英文版)

    读书笔记-Coding faster(英文版) Getting More Productive with Microsoft visual Studio Author: Zain Naboulsi S ...

  6. Hibernate中load与get的区别

    1.get()采用立即加载方式,而load()采用延迟加载; ①get()方法执行的时候,会立即向数据库发出查询语句;(查询顺序:内部缓存,数据库) ②load()方法返回的是一个代理(此代理中只有一 ...

  7. uilable 换行标记

    m_tipLabel.lineBreakMode = UILineBreakModeWordWrap; m_tipLabel.numberOfLines = 0; m_tipLabel.text =  ...

  8. DataTable中执行DataTable.Select("条件"),

    我们在使用Sql ******这些数据库时,可以轻松的通过Sum.Aver.Count等统计出相关结果,那么,在已经把数据检索出来的DataSet(DataTable)中呢?特别是通过Web Serv ...

  9. jquery easyUI DataGrid 初始化的时候就显示可排序的字段

    在使用easy ui的列表中,想要标记可以排序的字段,使用户一看页面就知道哪些是可以点击排序的. 给可排序的字段添加 图标在列名后面.不可排序的字段还和原来一样. 步骤: 你需要一个图标 , 你需要给 ...

  10. SQL语句执行效率及分析

    查询效率分析:子查询为确保消除重复值,必须为外部查询的每个结果都处理嵌套查询.在这种情况下可以考虑用联接查询来取代.如果要用子查询,那就用EXISTS替代IN.用NOT EXISTS替代NOT IN. ...