【C基础】编译预处理

一、 预定义符号

ANSI C定义了一些预定义符号,它们表示不同含义
FILE :进行编译的源文件名
LINE :文件当前行号
DATE :文件被编译日期
TIME :文件被编译时间
STDC :如果编译器遵循ANSI C 其值为1,否则未定义

二、#define 宏定义

#define是 C语言 和 C++ 中的一个预处理指令,其中的“#”表示这是一条预处理命令。凡是以“#”开头的均为预处理命令,“define”为宏定义命令

2.1 定义不带参数的宏

用法:
#define 标识符(宏名) 对应值
作用:在预编译时,将标识符替换为对应值,对应值可以是任何文本内容
例如:

#define int_t int   //对关键字int起了一个别名,注意int_t不是类型,只是会替换为int  
#define do_forever for(;;) //用do_forever描述了一个无限for循环

注意:不应该在宏定义的尾部加上分号

例一
#define MAX 10;
int x = MAX;	;	//预编译后替换为: int x = 10;
					//可以发现第二个;表示一条空语句,这种场景不会出错
例二 
#define MAX 10;
int y = 10;
int x = 0;
if(y >= 10)
	x = MAX;     //预编译后替换为:  x = 10;;   if没有加{ },后面不能跟两条语句,出错
else
	x = 20;

2.2 定义带参数宏

用法:
#define name(parameter-list) stuff
作用:在预编译时,将传入参数列表中参数替换到宏体中对应参数执行某些操作
name :宏名
parameter-list:参数列表
stuff:宏体
注意:参数列表的左括号必须与name紧邻,如果两者之间有任何空白存在,参数列表和宏体会被当作不带参数的宏中的替换值

2.3 宏的替换规则

在程序中使用宏时,需要涉及几个步骤。
在调用宏时,首先对参数进行检查,看看是否包含任何由#define定义。如果是,它们首先被替换。
替换文本随后被插入到程序中原来文本的位置。对于宏,参数名被他们的值所替换。
最后,再次对结果文件进行扫描,看看它是否包含任何由#define定义的符号。如果是,就重复上述处理过程。

#define MAX 100
#define DOUBLE(X) ((X) + (X))
int main()
{
   
    /*
    调用宏首先对参数检查,由于参数MAX是#define定义,所以被替换即:  int n = DOUBLE
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值