第一阶段20 C语言预处理

本文详细介绍了C语言的预处理阶段,包括宏定义、无参宏、带参宏及其副作用,强调了条件编译的使用场景和优势,帮助开发者更好地理解和运用C语言的预处理特性。
摘要由CSDN通过智能技术生成

加入CSDN是出于记录,希望有不足之处多加指正。

1、预处理

C语言程序在编译的时候分为4个步骤:
第一步叫预处理:主要工作把#开头的语句先展开。所以说所有的#号开头的语句并不属于C语言的语法范畴。
1、头文件 #include
2、定义宏 #define
3、取消宏 #undef
4、条件编译 # if ,# ifndef, #ifdef ,#else ,#elif ,# endif
5、显示错误 #error
6、修改文件名及行号 #line , #file
7、向编译器传输指令 #progrma

语法:

  • 每一个逻辑行都只能出现一个预处理的指令,如果需要用到多个物理行可以使用反斜杠来链接 \
  • 预处理是整个编译过程中的第一步:预处理 -->汇编–>链接
  • 可以通过编译选项 -E 来查看预处理的结果
$gcc file.c -o file.i -E  // 通过 -E 选项得到预处理后的文件 enum.i
 

2、宏定义

宏(macro)实际上就是要给字符串,在源码经过预处理后就被替换到文件中。

#define PI 3.14

int main()
{
   
   printf("%f\n ", PI);
   
}

当前的PI 就是一个宏,一般来说我们习惯使用全大写的字来表示宏,语法上并没有约束必须使用大写。PI 只会出现在你的源代码中,预处理过程中以及被完整地替换掉了。

作用:

  • 提高程序地可读性,使用一个有意义的单词来表示一个无意义的数字/ 一个很长的路径/ 名字。
  • 使得程序迭代/ 修改某些值更加方便,只需修改一个地方,程序中所有用到该宏的地方都会被修改,不需要一个一格的找出来并修改。
  • 提高程序的运行效率,如果使用宏函数来替换比较简单而且重复性的函数可以使得程序的效率提高。

3、无参宏

// 自定义宏
#define PI 3.14
#define LCD_SIZE 800*480*4

int main()
{
   
   printf("pi:%f\n" , PI);
   mmap(NULL, LCD_SIZE,...... );   // #include <sysmman.h>
   mmap(NULL, 800*480*4,......);
}

处理我们自己定义的宏以外系统也有一些预定义的宏

#define NULL ((void *)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值