复习C语言随笔 十

24 篇文章 0 订阅
20 篇文章 0 订阅

数据在内存中的存储

从源码到执行

  1. 编译环境: 编译–>链接

编译分为:预处理(预编译)–> 编译 –> 汇编 –>链接

每个源文件单独编译 ,生成对应 .obj 目标文件。

预处理(-E): 对头文件的包含、对注释的删除、对宏定义符号的替换,对应.i文件

编译(-S): 把源代码转换成汇编代码,在此过程中进行语法分析、 词法分析、语义分析、符号汇总,对应.s文件

汇编(-c): 把汇编代码转换成二进制指令,形成符号表,对应.o文件

gcc指令:

-o:指定生成的输出文件;
-E:仅执行预编译;
-S:将C代码转换为汇编代码;
-wall:显示警告信息;
-c:仅执行编译操作,不进行连接操作。

链接是将各个目标文件整合在一起,链接成一个 .exe 可执行文件。
对符号表的合并和对符号的重定位, 合并段表(elf)

  1. 运行环境

预定义

几个特殊的预定义符号

1.__FILE__ 进行编译的源文件

2.__LINE__ 文件当前的⾏号

3.__DATE__ 文件被编译的⽇期

4.__TIME__ 文件被编译的时间

5.__STDC__ 如果编译器遵循ANSI C,其值为1,否则未定义

预处理操作符

1.# 将宏转换为字符串

#include<stdio.h>

#define PRINTF(x,format) printf("The value of "       #x    " is " format "\n", x);

int main()
{
    int a = 10;
    PRINTF(a,"%d");
    return 0;
}

//输出结果: 
the value of a is 10

2.## 把宏定义中参数的符号合并为一个符号

#define CAT(x, y) x##y
int value=20;
printf("%d", CAT(va, lue));

//输出结果:
20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值