C学习_程序执行步骤-1.16

学习内容:

一.程序执行总览

C学习_程序执行步骤-1.16_第1张图片

二.翻译环境

将源代码.c翻译为可执行的机器指令.exe,分为一下两部分:
1)编译:每个.c文件经过编译器处理变为目标文件.obj
2)链接:链接器将项目下的所有目标文件和链接库链接生成可执行程序.exe

1.编译细分步骤

1)预处理:完成文本操作,包括头文件的包含,#define定义的替换,删除注释等。
2)编译:将c代码转换为汇编代码,在语法语义词法的分析上。(完成符号汇总
3)汇编:把汇编代码转换为目标文件,即二进制指令。(根据编译的符号汇总生成符号表

2.符号汇总和符号表

符号汇总:将全局变量符号汇总,引入的外部符号不知地址位置。
符号表:收集符号汇总,将符号与其相应地址一一对应。

3.链接作用

将所有文件的符号表合并,重复的重新定位添加正确地址。

三.预处理

1.#define(纯粹的替换)

1)定义标识符:#define + name + 你想替换的东西
2)定义宏:带有参数的定义,类似函数,#define name(参数) stuff(要使用括号让计算逻辑严谨)
3)#undef:取消你之前的定义。

#define和#实现文本参数化
#define  Add(X)   printf("an" #X "is good");

因为#X将X变为对应的字符串形式,即有双引号,”X",这样printf可以识别做到文本的连续。
Add(a):生成 an a is good。

#define宏参数尽可能不用副作用宏参数

类似a++这种,因为#define是存粹的 替换,每次X替换为a++后就需要改变一次a的值,会让a的值变得不可控。

#define宏和函数比较

这里就说些主要的:
宏:无类型,在翻译环境下的预处理阶段从而不能调试,优先级容易出问题;宏可用类型作参数。

2.#include

本地文件用:#include “local.h" //先查找本地项目文件下,没找到local.h再去库函数里找
库文件用:#include //就在库函数里找
防止头文件多次被包含:#pragma one//头文件只能包含一次。

你可能感兴趣的:(c语言,学习,开发语言)