预处理详解

一:预处理:


一:预定义符号:

C语⾔设置了⼀些预定义符号,可以直接使⽤,预定义符号也是在预处理期间处理的

1__FILE__
//进⾏编译的源⽂件
2__LINE__
//⽂件当前的⾏号
3__DATE__
//⽂件被编译的⽇期
4__TIME__
//⽂件被编译的时间
5__STDC__
//如果编译器遵循ANSI C,其值为1,否则未定义 

举例:


 

二:#define定义常量 

举例:#define MAX 1000 

思考:语句后面要不要加分号?

#define MAX 1000;
#define MAX 1000

建议不要加上 ; ,这样容易导致问题。
⽐如下⾯的场景: 

if(condition)
max = MAX;
else
max = 0;

如果是加了分号的情况,等替换后,if和else之间就是2条语句,⽽没有⼤括号的时候,if后边只能有⼀条语句。这⾥会出现语法错误。

 三:#define定义宏

#define机制包括了⼀个规定,允许把参数替换到⽂本中,这种实现通常称为宏(macro)或定义宏
申明方式:#define name( parament-list ) stuff

其中的 parament-list 是⼀个由逗号隔开的符号表,它们可能出现在stuff中。

ps:参数列表的左括号必须与name紧邻,如果两者之间有任何空⽩存在,参数列表就会被解释为stuff的⼀部分

举例

#define SQUARE( x ) x * x 

这个宏接收⼀个参数 x .如果在上述声明之后,你把 SQUARE( 5 ); 写于程序中,预处理器就会⽤下⾯这个表达式替换上⾯的表达式:5*5

但是!!!宏存在一个问题!观察下面代码

int a = 5;
printf("%d\n" ,SQUARE( a + 1) );

你觉得它可能打印36&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值