词法分析:

编译器将程序分解成符号的方法是 从左到右一个一个字符的读入,如果该字符可能组成一个符号,再读入下一个字符

而c语言里的符号 / * =只有一个字符长, 是单字符的, /* == 一些事双字符符号。

故因此有以下陷阱

a---b     等价     a-- -b

y= x/*p      /*被编译器理解成一段注释的开始

因此应该写成y = x / *p 或者 y = x/(*p)

整型常量 :

如果一个整形常量的第一个字符是数字0 那么该常量将被视作八进制,有时候在上下文中为了格式的对齐的需要,可能无意将十进制写成了

八进制。

字符和字符串:

单引号的一个字符实际上代表一个整数,对应该编译器采用的字符集中的序列值,ASCII字符集最常见。

双引号引起的字符串,代表的是一个指向无名数组起始字符的指针,该数组被双引号之间的字符以及额外的二进制位0

的字符'\0'初始化

嵌套注释:被双引号括起的字符串中,注释符/*属于字符串的一部分,而在注释中出现的双引号又属于注释的一部分

语法陷阱:

函数声明:

运算符的优先级:

!=高于 &

操作符高于单目运算符 *p++  等价 *(p++)

接下来是双目运算符 其中算数运算符优先级最高 移位次之,关系运算符再次之

接着是逻辑运算符 赋值运算符 最后是条件运算符

三目运算符的优先级是最低的

注意循环语句中的;分号

函数调用:

C语言要求在函数调用即使函数不带参数也应该包括参数列表

数组:

C语言中只有一维数组 C99VLA

NULL指针 不能被解除引用就是访问使用该指针指向的内存中存储的内容

连接器:

通常把目标模块堪称一组外部对象external object组成

每个外部对象代表机器内存的某个部分,并通过一个外部名称来识别

因此程序中的每个函数和每个外部变量如果没有被声明为static 就都是一个外部对象 某些C

编译器会对静态函数和静态变量的名称做一定改变 将他们也作为外部对象 由于经过了名称修饰 所以他们不会和其他源程序中的同名函数或

变量发生命名冲突

定义和声明:

extern int a;说明a是一个外部整形变量 但是因为它包括了extern关键字 这就显示说明了a的存储空间是在程序的其他地方分配的

从连接器的角度看 这是个对外部变量a的引用 不是对a 的定义

extern int a 和定义int a也可以在同一个源文件中

C的陷阱和缺陷研读笔记01的更多相关文章

  1. C的陷阱和缺陷研读笔记02

    宏: 宏不是函数 展开会产生庞大的表达式 #define MIN(A,B) ((A) <= (B) ? (A) : (B))MIN(*p++, b)会产生宏的副作用 剖析: 这个面试题主要考查面 ...

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

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

  3. C陷阱与缺陷学习笔记

    导读 程序是由符号(token)序列所组成的,将程序分解成符号的过程,成为"词法分析". 符号构成更大的单元--语句和声明,语法细节最终决定了语义. 词法陷阱 符号(token)指 ...

  4. 《c陷阱与缺陷》笔记--注意边界值

    如果要自己实现一个获取绝对值的函数,应该都没有问题,我这边也自己写了一个: void myabs(int i){ if(i>=0){ printf("%d\n",i); }e ...

  5. 《c陷阱与缺陷》笔记--移位运算

    #include <stdio.h> int main(void){ int a = 2; a >> 32; a >> -1; a << 32; a & ...

  6. C陷阱与缺陷读书笔记

    2.1理解函数声明 这一章仔细分析了(*(void(*)())0)();这条语句的含义,并且提到了typedef的一种函数指针类型定义的用法. 我们经常用到的typedef用法是用于指定结构体的类型, ...

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

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

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

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

  9. GoogLeNetv1 论文研读笔记

    Going deeper with convolutions 原文链接 摘要 研究提出了一个名为"Inception"的深度卷积神经网结构,其目标是将分类.识别ILSVRC14数据 ...

随机推荐

  1. JavaMail发送简单邮件

    非常简单的发送邮件实现,网上有很多啦,但还是自己写写记录下吧. package cn.jmail.test; import java.util.Properties; import javax.mai ...

  2. SharedPreferences基础

    见归档项目:SharedPreferencesDemo.zip 1.对于数据量较小,且有明显的K-V形式的数据而言,适合用SharedPreferences保存.SharedPreferences的数 ...

  3. table中td,th不能设置margin

    首先,我们需要知道的是:我们可以对表格table设置margin,而不能设置padding;对单元格td设置padding,而不能设置margin.所以说,我们不能对单元格td设置margin属性来调 ...

  4. Ubuntu14.04右键菜单添加Sublime 2打开选项

    序 Ubuntu上安装Sublime的时候直接下载的压缩包(软件中心里没有找到Sublime),于是每次想用Sublime打开一个文件的时候就得先打开Sublime然后从File -> Open ...

  5. Unix环境下PS1变量的设置

    我的ps1命令提示符: export PS1="\[\e[31;1m\]\u @ \[\e[34;1m\]\h \[\e[36;1m\]\w \[\e[33;1m\]\t $ \[\e[37 ...

  6. IBM Minus One(water)

    IBM Minus One Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  7. 正式学习React (六) 项目篇

    https://github.com/huenchao/yingshili 或者点这里 注意事项看ReadME.md 会持续更新,反正就是把之前分析的redux react-redux都用一下,然后会 ...

  8. Sql Server专题一:索引(下)

    首先这次的内容是全文索引,跟前面讲的其实没有多大关系 两种索引的功能和结构都是不同的,普通索引的结构主要以B+树和哈希索引为主,用于实现对字段中数据的精确查找,比如查找某个字段值等于给定值的记录,A= ...

  9. :gAudit

    http://www.doc88.com/p-0794369847693.html http://baike.baidu.com/link?url=pcOUfBpILuEAPFrBSsSU-6Vzg3 ...

  10. X光机的原理及构造

    一.X射线的发现 1895年德国物理学家伦琴(W.C.RÖntgen)在研究阴极射线管中气体放电现象时,用年伦琴荣获物理学第一个诺贝尔奖金.科学总是在不断发展的,经伦琴及各国科学家的反复实践和研究,逐 ...