摘要: 在编写c文件时,我们都喜欢用宏来定义一些常量或者函数,这样增加了程序的可读性!但是我们有没有想过使用宏定义时可能出现问题呢?下面就简单举几例来说明宏定义的弊端! 例1: #define jia(m,n) (a)+(b) printf("%d\n",jia(1,2)*jia(1,2)); 通常我们以为结果是9,但是编译出来的结果却是5,因为宏定义只是简单的替换,并没有执行这个函数,所以替换的结果表达式是1+1*2+2。其实我们只要这样写((a)+(b)),就就可以避免这样的错误出现。 例2: #define jia(m,n)(a<b)?a:b i=1;j=5; prin 阅读全文
posted @ 2013-07-26 16:23 智者顺势而为 阅读(718) 评论(0) 推荐(0) 编辑
摘要: 当我们完成一个c文件后,我们就可以进行编译-链接-执行。那么它们究竟是怎么工作的呢,接下来就给大家介绍整个编译过程(如图所示)!下面就来介绍下在每个过程中,各个模块的作用! (1)预处理器:处理注释,用空格表示;删掉#define,展开有用的宏定义;处理条件编译指令如#ifdef,#endif,#else等;处理include文件,展开里面内容;保留#pragma指令。 在linux下,通过gcc-E文件名.c-O文件名.i命令可以得到预处理后的文件。 (2)编译:这个过程就是将.i文件编译生成汇编文件,即.s文件,这个过程编译器主要是在判断语法是否正确,然后再来生成汇编文件。 在linux. 阅读全文
posted @ 2013-07-26 14:16 智者顺势而为 阅读(256) 评论(0) 推荐(0) 编辑