乐观学习,乐观生活,才能不断前进啊!!!
我的主页:optimistic_chen
我的专栏:c语言
点击主页:optimistic_chen和专栏:c语言,
创作不易,大佬们点赞鼓励下吧~
前言
这篇博客是C语言的收官之作,希望各方大佬多多支持。
作为运行程序必不可少的一部分,预处理在上篇博客中也有简单说明,本次我们来深入了解一下程序运行中预处理的作用吧,其中有的小细节对我的帮助很大,希望也可以帮助到你们!
文章目录
预定义符号
C语言设置了一些预定义符号,可以直接使用。预定义符号也是在预处理期间处理的。
__FILE__ //进⾏编译的源⽂件
__LINE__ //⽂件当前的⾏号
__DATE__ //⽂件被编译的⽇期
__TIME__ //⽂件被编译的时间
//__STDC__ //如果编译器遵循ANSI C,其值为1,否则未定义
#define定义常量
一般形式:
#define name stuff
举例:
#define MAX 1000
#define reg register //为 register这个关键字,创建⼀个简短的名字)(后面链表名称会很方便)
#define CASE break;case //在写case语句的时候⾃动把 break写上。(switch语句)
// 如果定义的 stuff过⻓,可以分成⼏⾏写,除了最后⼀⾏外,每⾏的后⾯都加⼀个反斜杠(续⾏符)。
#define DEBUG_PRINT printf(“file:%s\tline:%d\t
date:%s\ttime:%s\n” , __ FILE__ , __ LINE__ ,\
__ DATE__, __ TIME__ )
注意:在define定义标识符的时候,不要在最后加上 ;(分号)
#define定义宏
#define 机制包括了⼀个规定,允许把参数替换到⽂本中,这种实现通常称为宏(macro)或定义宏
#define name( parament-list ) stuff
参数列表的左括号必须与name紧邻,如果两者之间有任何空⽩存在,参数列表就会被解释为stuff的⼀部分
代码示例:
#define SQUARE( x ) x * x
int main() {
int a = 5;
printf("%d\n", SQUARE(a + 1));
}
我们的想法是6*6=36,但是运行程序会发现结果为11
原因很简单,原语句被替换为
printf (“%d\n”,a + 1 * a + 1 );
我们把定义宏修改一下: