摘要: 问题 工程中的每个c语言源文件被编译后生成目标文件,这些目标文件如何生成最终的可执行文件? 链接器的意义 链接器的主要作用是把各个模块之间相互引用的部分处理好,使得各个模块能够正确的衔接 模块链接 静态链接 由链接器在链接时将库的内容直接加入到可执行程序中 Linux下静态库的创建和使用 + 编译静 阅读全文
posted @ 2018-06-22 14:01 烟云123 阅读(177) 评论(0) 推荐(0) 编辑
摘要: 被隐藏了的事实 初识编译器 编译器做了什么 预编译 + 处理所有的注释,以空格代替 + 将所有的 define删除,并且展开所有的宏定义 + 处理条件编译指令 if, ifdef, elif, else, endif + 处理 include,展开被包含的文件 + 保留编译器需要使用的 pragma 阅读全文
posted @ 2018-06-22 13:59 烟云123 阅读(118) 评论(0) 推荐(0) 编辑
摘要: 三目运算符 三目运算符(a?b:c)可以作为逻辑运算的载体 规则:当a的值为真时,返回b的值;否则返回c的值 下面的程序运行结束后,a,b,c的值分别是多少? 将上面代码修改为: 三目运算符(a?b:c)的返回类型 + 通过隐式类型转换规则返回b和c中的较高类型 + 当b和c不能隐式转换到同—类型时 阅读全文
posted @ 2018-06-07 17:56 烟云123 阅读(295) 评论(0) 推荐(0) 编辑
摘要: ++和 操作符的本质 ++和 操作符对应两条汇编指令,前置时,表示变量自增(减)1,然后取变量值,后置表示变量先取变量值,然后变量自增(减)1 一个有趣的问题 int i = 0; (i++) + (i++)+(i++); (++i) + (++i) + (++i); 上面两个表达式的值分别是多少? 阅读全文
posted @ 2018-06-07 17:55 烟云123 阅读(275) 评论(0) 推荐(0) 编辑
摘要: 位运算符分析 C语言中位运算符直接对bit位进行操作,其效率最高。 注意点: + 左操作数必须为整数类型 + char和short被隐式转换为int后进行移位操作 + 右操作数的范围必须为:[0 31] + 左移运算符 把运算数的二进制位右移 + 规则:高位补符号位,低位丢弃 一个有趣的问题 0x1 阅读全文
posted @ 2018-06-07 17:53 烟云123 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 一个有趣的问题 下面的程序运行后,i,j,k的值分别是多少? int i = 0; int j = 0; int k = 0; ++i || ++j && ++k; 结果为1,0,0 程序中的短路: + || 从左向右开始计算 + 当遇到真的条件时停止计算,整个表达式为真 + 所有条件为假时表达式才 阅读全文
posted @ 2018-06-07 15:50 烟云123 阅读(162) 评论(0) 推荐(0) 编辑
摘要: 接续符的意义 C语言中的接续符(\\)是编译器行为的利器 例子1 :初探接续符 接续符的使用 编译器会将反斜杠剔除,跟在反斜杠后面的字符自动接续到前一行,在接续单词时,反斜杠之后不能有空格,反斜杠的下一行之前也不能有空格 接续符适合在定义宏代码块时使用 例子2 :接续符的应用 转义符的意义 C语言中 阅读全文
posted @ 2018-06-07 15:32 烟云123 阅读(165) 评论(0) 推荐(0) 编辑
摘要: 单引号和双引号 + C语言中的单引号用来表示字符字面量 + C语言中的双引号用来表示字符串字面量 'a'表示字符字面量,在内存中占一个字节 'a'+1表示'a'的ASCII码加1,结果为'b' "a"表示字符串字面量,在内存中占两个字节 "a"表示指针运算,结果指向"a"结束符"\0" 小贴士: + 阅读全文
posted @ 2018-06-07 15:31 烟云123 阅读(3146) 评论(0) 推荐(0) 编辑
摘要: 注释规则 + 编译器在编译过程中会使用空格替换整个注释 + 字符串字面量中的// 和/ /不代表注释符号 + / ... /型注释不能被嵌套(在分段排除异常往往被忽略) 一个有趣的问题 请问 y=x/\ p是什么意思? 作者本意:把x除以\ p的结果赋值给y 编译器:把/\ 作为一段注释的开始,把/ 阅读全文
posted @ 2018-06-07 14:33 烟云123 阅读(171) 评论(0) 推荐(0) 编辑
摘要: 枚举类型的使用方法 + enum是C语言中的一种自定义类型 + enum值可以根据需要自定义整形值 + 第一个定义的enum值默认为0 + 默认情况下的enum值是在前一个定义值得基础上加1 + enum类型的变量只能去定义时的离散值 例子1 :enum的使用 枚举类型的特殊含义 enum中定义的值 阅读全文
posted @ 2018-06-07 14:11 烟云123 阅读(138) 评论(0) 推荐(0) 编辑