C++基础系列二:预处理器

(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,这样一来,string就被包含了两次,为了保证多次包含同一头文件不会引起该头文件定义的类和对象被多次定义,就需要采用头文件保护符。

define表示接受一个名字并定义该名字为预处理器变量;#ifndef指示检测指定的预处理器变量是否未定义,如果未定义,那么跟在其后的所有指示都被处理,直到出现#endif。

(3)#include 和#include "fileName.h"

对于#include ,编译器先从标准库路径开始搜索fileName.h,然后从本地目录搜索,用于系统文件调用较快;

而#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

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月10日 上午2:03
下一篇 2023年2月10日 上午2:03

相关推荐