上一页 1 ··· 41 42 43 44 45 46 47 48 49 ··· 57 下一页
摘要: 条件编译的基本概念: 条件编译就是利用预处理器的功能来对代码进行一些删除操作。 程序示例: 运行结果如下: 单步编译的结果如下: 条件编译的本质: 通过命令行定义宏: 程序与运行结果如下: 如果我们判断一个宏标识符是否存在,需要使用#ifdef指令。示例如下: 执行单步编译: 中间结果如下: #in 阅读全文
posted @ 2018-08-26 12:09 周伯通789 阅读(165) 评论(0) 推荐(0)
摘要: C语言中的宏定义: 定义宏常量: 就宏定义来说,这是正确的,预处理器可以编译过。 但是就真正的编译来说,这是错误的,真正的编译会有语法错误。 示例程序: 执行预处理,gcc -E test.c -o test.i,预处理器处理之后结果如下: 预处理器进行直接的文本替换,是不会进行语法检查的。第4行最 阅读全文
posted @ 2018-08-26 11:09 周伯通789 阅读(329) 评论(0) 推荐(0)
摘要: 工程中的每个C语言源文件被编译后产生目标文件,这些目标文件如何生成最终的可执行程序呢? 链接器: 静态链接: 静态链接就是将库文件或者目标文件直接加入到可执行文件当中。 Linux下静态库的创建和使用: 静态库示例程序:20-1.c slib.c 将slib.c制作成静态库: 先将slib.c编译成 阅读全文
posted @ 2018-08-26 10:30 周伯通789 阅读(198) 评论(0) 推荐(0)
摘要: 初识编译器: 预编译: 示例程序: 源文件: 头文件: 执行预编译命令: 得到的中间文件如下: 预处理过后,注释被删掉了,7和9行的全局变量也直接被复制过来了,1-6行为需要传递给后续编译器的信息。我们在c文件中定义的宏也被展开了。 预编译其处理之后就该执行真正的编译了。 编译: 编译过程主要对源程 阅读全文
posted @ 2018-08-26 09:59 周伯通789 阅读(185) 评论(0) 推荐(0)
摘要: 三目运算符: 在C语言中,三目运算符不能当左值使用。因为三目运算符最终返回的是一个值并不是一个变量。三目运算符作为左值时,相当于2 = 3,这种赋值,编译器当然会报错。 既然三目元算符返回的是一个值,那么有没有办法将它当做左值又不报错呢? 解决方案就是返回变量的地址。 第13行返回变量的地址。 运算 阅读全文
posted @ 2018-08-26 08:44 周伯通789 阅读(589) 评论(0) 推荐(0)
摘要: ++和--操作符对应两条汇编指令: 上图中的表达式,我们的初步分析如下: 完整的示例程序如下: vc编译器的额结果如下: i自增了6次,最终为6。但是两个r的值和我们的分析不一样,这是不是错了呢? gcc下的运行结果如下: 两种编译器得到了两种不同的结果,这就是C语言里面的灰色地带。 vc中第8行的 阅读全文
posted @ 2018-08-25 23:31 周伯通789 阅读(173) 评论(0) 推荐(0)
摘要: C语言中的位运算符: C语言中的位运算效率是最高的。比四则运算效率高很多。 左移和右移: 右操作数超出范围后,行为是不确定的。 有趣的问题: 示例程序如下: 运行结果如下: 从结果可以看出,第8行的混合运算先算的是加法。 vc编译器的输出结果如下: bcc编译器的输出结果如下: 小贴士: 交换两个变 阅读全文
posted @ 2018-08-25 23:03 周伯通789 阅读(149) 评论(0) 推荐(0)
摘要: 有趣的问题: 示例如下: 运行结果如下: 逻辑与的优先级较高并不等于先计算逻辑与,如上图中的等价代换。在逻辑与和逻辑或混合运算时,整个表达式被看成逻辑或表达式。 上图中编译器从左向右依次计算每个括号中逻辑与的表达式的值,这才是真正的在逻辑运算符表达式中逻辑与比逻辑或具有更高优先级的体现。 短路规则示 阅读全文
posted @ 2018-08-25 22:45 周伯通789 阅读(261) 评论(0) 推荐(0)
摘要: 单引号和双引号: 下面的程序片段合法吗? 示例程序: 编译运行结果如下: 小贴士: 上面程序产生错误的原因: 低于0x08048000的地址是不能随便访问的。 printf('\n')会产生段错误,因为printf把'\n'的aisc码当成了地址。aisc码为0x00000010。 如下: 混淆概念 阅读全文
posted @ 2018-08-25 21:14 周伯通789 阅读(825) 评论(0) 推荐(0)
摘要: C语言中的接续符(\)是指示编译器行为的利器 示例程序如下: 这是一段合法的程序,编译并不会报错。 接续符的使用: 接续符适合于使用在宏代码块中。 宏定义只能在同一行,因此,要想定义多行的宏代码块,那就要借助于接续符。 接续符示例如下: 转义符的意义: 上图中\141表示了一个aisc码的八进制表示 阅读全文
posted @ 2018-08-25 20:07 周伯通789 阅读(172) 评论(0) 推荐(0)
上一页 1 ··· 41 42 43 44 45 46 47 48 49 ··· 57 下一页