(1)常见预处理器指令集
C++继承了C的非常精细的预处理器,以高度受限的方式使用预处理器。预处理器主要的指令及功能如下表:
指令 | 功能 |
# | 空指令,无任何效果 |
#include | 包含一个源代码文件,把源文件中的#include扩展为文件正文,即把包含.h的文件找到并扩展到#include所在处 |
#define | 定义宏 |
#undef | 取消已定义的宏 |
#if | 条件编译指令,如果为真,则编译下面的代码 |
#ifdef | 条件编译指令,如果宏已经定义,则编译下面的代码 |
#ifndef | 条件编译指令,如果宏没有定义,则编译下面的代码 |
#elif | 条件编译指令。如果之前的if不为真,当前条件为真,则编译下面代码 |
#endif | 结束一个#if...#else条件编译块 |
#error | 停止编译并显示错误信息 |
下面简要介绍预处理器使用的比较多的几个地方:
(2)头文件保护符:#ifndef ,#define ,#endif
头文件保护符:#ifndef ,#define ,#endif,是为了避免某个头文件被多重包含。如类Person中包含了头文件string,而使用Person类的程序中也许并不确定Person中是否已经包含string,于是它便再次#include
define表示接受一个名字并定义该名字为预处理器变量;#ifndef指示检测指定的预处理器变量是否未定义,如果未定义,那么跟在其后的所有指示都被处理,直到出现#endif。
(3)#include
对于#include
而#include "fileName.h",编译器先从用户的当前工作路径中开始搜索fileName.h,然后寻找系统路径,用于自定义文件较快。
(4)使用预处理器进行调试
如果程序员希望程序所包含的调试代码仅在开发过程中执行,当应用程序已经完成并且准备提交时,就将调试代码关闭,那么可以通过使用NDEBUG预处理变量实现有条件的调试代码:
1 void main()
2 {
3 #ifndef NDEBUG
4 cerr<<"starting main..."<<endl;
5 #endif
6 }
上面的代码中,如果NDEBUG未定义,那么第4行就会执行。开发完成后,可通过定义预处理变量NDEBUG来删除这些调试语句。大多数编译器都提供NDEBUG的命令行选型:
$ cc -DNDEBUG main.c
上述命令等效于在main.c的开头提供#define NDEBUG的预处理命令。
原文链接: https://www.cnblogs.com/sophia-yun/p/3153100.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/93223
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!