一、得到一个可执行程序 1. 预处理、编译、链接 gcc编译源代码生成最终可执行的二进制程序,GCC后台隐含执行了四个阶段步骤。 预处理 => 编译 => 汇编 => 链接 预处理:编译器将C源代码中包含的头文件编译进来和执行宏替换等工作。 gcc -E hello.c -o hello.i 编译: ...
分类:
系统相关 时间:
2016-04-09 10:44:32
阅读次数:
338
预处理、编译、链接和目标文件的格式 可执行程序是怎么得来的 以C语言为例,c代码经过编译器的预处理,编译成汇编代码,由汇编器编译成目标代码,再链接成可执行文件,由操作系统加载到cpu里来执行。 (截图) 预处理负责把include的文件包含进来及宏替换等工作 可执行文件是使用共享库的。 把库里的东西 ...
分类:
系统相关 时间:
2016-04-07 01:02:17
阅读次数:
211
第七周 可执行程序的装载 一、预处理、编译、链接和目标文件的格式 1.可执行程序是怎么来的 C代码—>预处理—>汇编代码—>目标代码—>可执行文件 .asm汇编代码 .o目标码 a.out可执行文件 预处理负责把include的文件包含进来及宏替换工作。 2.目标文件的格式ELF (1)常见的ELF ...
分类:
系统相关 时间:
2016-04-06 23:18:07
阅读次数:
344
可执行程序的装载 一、预处理、编译、链接和目标文件的格式 1.可执行程序怎么来的? 预处理: gcc -E -o hello.cpp hello.c -m32 *负责把include的文件包含进来及宏替换 编译: gcc -x cpp-output -S -o hello.s hello.cpp - ...
分类:
系统相关 时间:
2016-04-06 15:06:01
阅读次数:
156
define宏定义: 1. 是一个预处理指令, 在编译前执行 2.作用: 可以为一段C代码定义1个标识, 如果需要在后面使用这段C代码, 那么直接使用这个标识就行了 3. 原理: 在预编译的时候, 就会执行源文件中的预处理指令, 会将C代码中使用宏名的地方替换为宏值 ——上述过程就称之为宏替换 4. ...
分类:
其他好文 时间:
2016-04-03 17:19:28
阅读次数:
159
1、宏替换命令 编译器遇到宏替换命令所定义的标识符时,用其后的字符串替换该标识符。用这种方式定义符号常量。形式如下: #define 标识符 字符串 #define TRUE 1 //用 TRUE 表示1 #define FALSE 0 //用 FALSE 表示0 另一用法是作为代换。宏名可取参量数 ...
分类:
编程语言 时间:
2016-04-02 00:42:04
阅读次数:
207
#define指令称为宏定义指令,通常用#define指令来定义一个宏用来代表其他东西的一个名字(如常量表达式等)。通常来说预处理器会通过将宏的名字和它的定义存储在一起来响应#define指令。当这个宏在后面的程序中使用到时,预处理器会"扩展"宏,将宏替换为其定义值。 简单的宏 如: 注意:不要在宏 ...
分类:
其他好文 时间:
2016-03-26 23:57:59
阅读次数:
451
一、编译预处理: 1.宏定义: 以 #define 开始,分为带参数和不带参数两种。 不带参数的宏定义: #define PI 3.14 宏替换只是宏名誉字符串之间的简单替换,不做其他任何数据类型和合法性检查,也不分配内存空间。 带参数的宏定义: #define MUL(x , y) (x)*(y)
分类:
编程语言 时间:
2016-02-28 11:03:47
阅读次数:
262
转载自http://www.cnblogs.com/charley_yang/archive/2010/12/15/1907384.html第一、四个用途用途一:定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如:char* pa, pb; // 这多数不符合我们的意图...
分类:
编程语言 时间:
2016-01-25 22:37:16
阅读次数:
3294
ISO/IEC 9899:2011 条款6.10.3——宏替换
分类:
其他好文 时间:
2016-01-24 00:26:18
阅读次数:
153