程序环境和预处理

翻译环境

1.当我们写代码生成test.c源文件时,电脑会经过翻译环境生成可执行的test.exe的可执行文件,继而通过运行环境开始运行
2.翻译环境分为编译环境和链接

编译环境和链接

1.每个源文件单独经过编译器处理,生成xxxx.obj的目标文件
2.所有目标文件经过链接器链接生成可执行文件,同时链接链接库

预编译 编译 汇编

1 编译又分为预编译,编译,汇编
2 预编译的功能——文本操作,预处理指令
2.1 stdio 头文件的包含
2.2注释的删除
2.3#define定义符号的替换
3编译:把c语言翻译成汇编代码
3.1语法分析
3.2词法分析
3.3语义分析
3.4符号分析
4汇编:把汇编代码转化为二进制指令
4.1形成符号表

链接

1 合并段表
2 符号表的合并和重定位

运行环境

1 程序载入内存中,一般由操作系统完成
2 程序执行开始,调用main函数
3 执行程序代码,使用一个运行时堆栈(stack),存储函数的局部变量和返回地址,使用一个静态(static)内存,存储静态内存中的变量,并在程序执行过程中一直保存它们的值
4 终止程序

预定义符号

FILE 进行编译的源文件
LINE 文件当前的行号
DATE 文件被编译的日期
TIME 文件被编译的时间
STDC 如果编译器遵循ANSI C ,其值为1,否则未定义

预处理指令 以#开头

#define

1 定义表示符
2 定义宏
2.1定义宏带有参数,运行的时候把参数替换到文本中
2.2宏在替换的时候是把参数不经任何处理替换到文本中,不是计算完结构再替换
2.3宏定义不支持递归
2.4宏定义在遇到字符串的时候不会替换

#include<stdio.h>

#define square(x)   x*x 
int main()
{
	printf("%d", square(3));
}

特例:结果为11

#include<stdio.h>

#define square(x)   x*x 
int main()
{
	printf("%d", square(3+2));
}

为保证结果为整体

#include<stdio.h>
#define square(x)   (x)*(x) 
int main()
{
	printf("%d", square(3+2));
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不可触碰的殇

前途似海,来日方长

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值