目录
1. 预定义符号
C语言设置了一些预定义符号,可以直接使用,预定义福海也是在预处理期间处理的
int main()
{
printf("%s\n", __FILE__);//当前被编译文件的路径
printf("%s\n", __DATE__);//文件被编译的日期
printf("%s\n", __TIME__);//文件被编译的时间
printf("%d\n", __LINE__);//文件当前的行号
//printf("%d\n", __STDC__);//说明VS不支持ANSIC
}
2. #define定义常量
基本语法:
#define name stuff
#define M 100
#define STR "hehe"
#define forever for(;;)//死循环
#define CASE break;case
// 如果定义的 stuff过⻓,可以分成⼏⾏写,除了最后⼀⾏外,每⾏的后⾯都加⼀个反斜杠(续⾏符)。
#define DEBUG_PRINT printf("file:%s\tline:%d\t \
date:%s\ttime:%s\n" ,\
__FILE__,__LINE__ , \
__DATE__,__TIME__ )
int main()
{
int n = 0;
switch (n)
{
case 1:
//
CASE 2:
//
CASE 3:
//
CASE 4:
}
return 0;
}
3. #define定义宏
#define 机制包括了一个规定,允许把参数替换到文本中,这种实现通常称为宏或者定义宏
下面是宏的声明方式
#define name( parament-list ) stuff
其中的parament-list是一个逗号隔开的符号表,他们可能出现在stuff中
注意:
参数列表的左括号必须与name紧邻,如果两者之间有任何空白存在,参数列表就会被解释为stuff的一部分
#define SQU(x) x*x
//转换成
#define SQU(x) (x)*(x)
//本质原因是宏的参数不运算,直接替换到宏的体内
//1.宏的参数中如果有表达式,和宏的内容中的操作符
//因为运算符有优先级的问题,可能导致运算顺序不达到预期
//所以容易产生问题
//2.宏在书写的时候,给参数都带上括号,不要吝啬括号
int main()
{
int a = 5;
printf("%d\n", SQU(a));//25
printf("%d\n", SQU(a+1));//a+1*a+1=11
}
上述代码的解析:
#define SQU( x ) x * x
这个宏接收一个参数.如果在上述声明之后,你把SQU(5);置于程序中,预处理器就会用下面这个表达式替换成上面的表达式5 * 5
警告: