一:预处理:
一:预定义符号:
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