学习内容:
一.程序执行总览
二.翻译环境
将源代码.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宏和函数比较
这里就说些主要的:
宏:无类型,在翻译环境下的预处理阶段从而不能调试,优先级容易出问题;宏可用类型作参数。文章来源:https://www.toymoban.com/news/detail-802172.html
2.#include
本地文件用:#include “local.h" //先查找本地项目文件下,没找到local.h再去库函数里找
库文件用:#include <stdio.h> //就在库函数里找
防止头文件多次被包含:#pragma one//头文件只能包含一次。文章来源地址https://www.toymoban.com/news/detail-802172.html
到了这里,关于C学习_程序执行步骤-1.16的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!