说说两个冷门却又不冷门的预处理指令#pragma和#error!
本篇笔记分享两个冷门却又不冷门的预处理指令。 冷门是因为我们平时可能比较少用(或者说我们的编码能力还没到需要注重这些细节的水平),不冷门是因为这几个指令在一些优秀的C代码中用得很多。 比如在Linux内核代码中: #error指令 #error 指令让预处理器发出一条错误信息,并且会中断编译过程。下面我们从Linux代码中抽取出来一小段代码并做修改得到示例代码: 这段示例代码很简单,当RX_BUF_IDX宏的值不为0~3时,在预处理阶段就会通过#error 指令输出一条错误提示信息: "Invalid configuration for 8139_RXBUF_IDX" 下面编译看一看结果: 不清楚C语言编译的几个阶段的朋友可以阅读往期笔记: 【C语言笔记】编译过程 #pragma指令 #pragma指令应该是预处理指令中最复杂,其用法很多。下面简单看一下常见用法。 1、#pragma pack 我们可以利用#pragma pack来改变编译器的对齐方式: #pragma pack(n) /* 指定按n字节对齐 */ #pragma pack() /* 取消自定义字节对齐 */ 下面依旧以示例来说明。我们在之前的笔记: 《结构体内存对齐你真的弄懂了?看这道经典笔试题》 中也有提到结构体对齐的问题,那篇笔记我们没有自定字节对齐,按照编译器默认的对齐方式,代码为: 运行结果为: