重庆网站域名备案地址,我想建网站,打开搜索引擎,网页设计背景制作程序环境#xff1a;
1、C语言的任何一种实现#xff0c;存在两个不同的环境#xff1b;
2、翻译环境#xff1a;将源代码转换成可执行的二进制指令#xff08;机器指令#xff09;#xff1b;.c文件#xff08;源文件——文本信息的代码#xff09;-#xff0…程序环境
1、C语言的任何一种实现存在两个不同的环境
2、翻译环境将源代码转换成可执行的二进制指令机器指令.c文件源文件——文本信息的代码-翻译环境-.exe文件可执行文件
2、运行环境实现可执行文件执行到我们想要的结果 翻译环境 1、编译 定义
依赖于编译器vs中的编译器叫做cl.exe编译器只有一个源文件通过编译器编译生成目标文件目标文件已经是二进制的了
1、预编译预处理
进行文本操作的处理增、删、改还是我们所写的C语言代码生成.i文件
将代码中的注释替换成了空格头文件的包含#开头的都是预处理指令所有的预处理指令都是在预处理阶段处理的
2、编译
把C语言代码翻译成了汇编代码生成.s文件
词法分析语法分析语义分析符号汇总专业术语
3、汇编
将汇编代码翻译成二进制指令生成目标文件
生成符号表 2、链接 定义
依赖于连接器vs中的链接器叫做link.exe链接库和目标文件通过连接器形成可执行文件/程序多个目标文件可以一起链接
目标文件windows环境下的目标文件后缀是.objLinux环境下生成的目标文件后缀是.o
链接
链接目标文件和链接库生成可执行程序二进制的程序
合并段表符号表的合并和重定位 运行环境
1、程序必须载入到内存中一般在有操作系统的环境下完成
2、找到main函数开始运行
3、开始执行程序代码使用一个运行时堆栈函数栈帧空间存储函数的局部变量和返回地址。程序还可以使用静态内存、存储在静态内存中的变量在程序执行过程中一直保留这些静态变量的值
4、终止程序结束main函数的运行 图示编译链接 书本推荐
程序员的自我修养 预处理
预定义符号
__FILE__ // 当前编译的文件
__LINE__// 当前编译的行号
__DATE__// 当前编译的日期
__TIME__// 当前编译的时间
__FUNCTION__// 当前编译的函数 #define定义标识符
1、定义的标识符只会替换不会进行计算
2、#define定义的标识符在预处理阶段这些标识符将会被替换
3、#dedine定义的内容可以是多种多样的
4、#define定义符号的最后不加分号因为在替换的时候如果加了分号后会把分号也替换进去 #define定义宏
1、允许把参数替换到文本中
2、看代码会更容易理解
// #define定义宏
#define a(n) (4 2)*(n)
// 参数括号必须紧挨a如果加了空格隔开将会当做替换部分
// 需要将括号加上
int main()
{int z 0;z 2 * (2 a(4 1)); // a(4 1) - a(5)// 2 * (2 6 * 5 64return 0;
} #define替换规则
1、在调用宏时先对参数进行检查包含任何由#define定义的符号则首先被替换。
2、将宏定义的替换文本插入到原来文本的位置
3、宏参数和#define定义中可以出现其他#define定义的变量
4、宏不能出现递归 # 和 ## 的作用
# 和 ## 都是在宏内实现的
1、#把一个宏参数转化为对应的字符串
2、##可以将位于##两端的符号合成一个符号
#代码
#include stdio.h
#define PRINT_1(value, format) printf(相加的值为format\n, value)
#define PRINT_2(value, format) printf(#value相加的值为format\n, value)
// #可以将宏的参数转化为对应的字符串
int main()
{int a 10;int b 20;PRINT_1(a b, %d);PRINT_2(a b, %d);return 0;
}