条件语句(if、switch、for、while、do while)会根据条件选择执行哪些代码

条件编译就是预处理器根据条件选择哪些代码参与下一步的编译。

负责条件编译的预处理指令有:

#if #ifdef #ifndef #elif #else #endif
头文件卫士:

这种固定写法,在头文件中使用,它能防止头文件被重复包含,所有的头文件都要遵循这个规则。

注意:只能解决重复包含的问题,不能解决循环包含,互相包含的问题。

注释代码:
// 只能注释单行代码,早期的编译器不支持该用

/* 多行注释,但不能嵌套 */

#if 0|1
可注释大块代码,可以嵌套    
#endif 
DEBUG宏:

专门用于调试程序的宏函数,这种宏函数在程序测试、调试、试运行阶段执行,在程序正式上线阶段不执行,这类函数会根据DEBUG宏是否定义确定执行的流程。

不常用的预处理指令:
#line <常整数> 设置当前代码的行号,目前没有发现它有什么用

#error "在预处理阶段提示错误信息",一旦预处理遇到它,将不再继续编译,它不能单独使用必须与条件判断系列语句配合使用 

#warning "在预处理阶段提示警告信息" 不能建议单独使用,最好与条件判断系列语句配合使用。

#pragma GCC poison <标识符> 把标识符设置病毒,禁止在代码中使用

#pragma pack(n)  设置最大对齐和补齐字节数
  每个系统在进行对齐和补齐都有一个最大对齐和补齐字节数n,也就是超出n字节按n字节计算,例如:linux32系统n=4,windows32 n=8
设置要求:
	1、n < 系统默认的最大对齐、补齐字节数,往大了调整没有意义,速度不会提升还会导致内存浪费。
	2、n必须是2的x次方,也就是必须是1、2、4、8、16这一类的整数
宏函数的变长参数:
#define func(...) __VA_ARGS__

注意:这种用法必须配合,printf/fprintf/sprintf系列支持变长参数的函数使用。

在编译时定义宏:
gcc xxx.c -D ARR_LEN=3 
-D ARR_LEN=3 <=> #define ARR_LEN 3 跟在代码中定义宏的效果一样

gcc xxx.c -D DEBUG
-D DEBUG <=> #define DEBUG

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wxj555281

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值