C++学习笔记——(一)预处理器指示符

1、概述
  • 头文件通过 include 预处理器指示符(preprocessor include directive)而成为我们程序的一部分
  • 预处理器指示符用 # 号标识,这个符号将放在程序中该行的最起始一列上处理,这些指示符的程序被称做预处理器 preprocessor,通常捆绑在编译器中 
 
2、分类
  •  #include:
    • 头文件通过 include 预处理器指示符(preprocessor include directive)而成为我们程序的一部分
  • #ifndef
    • 条件指示符
    • 被包含的文件还可以含有#include 指示符,由于嵌套包含文件的原因,一个头文件可能会被多次包含在一个源文件中,条件指示符可防止这种头文件的重复处理
    • 为了保证头文件只被处理一次,把#define 指示符  #define BOOKSTORE_H,放在#ifndef后面,这样在头文件的内容第一次被处理时,BOOKSTORE_H将被定义,从而防止了在程序文本文件中以后#ifndef指符的值为真  。
  • #ifdef
    • 常被用来判断一个预处理器常量是否已被定义,以便有条件地包含程序代码
 
3、细节点
  • 头文件类型
    • 如果文件名用尖括号 < 和 > 括起来,表明这个文件是一个工程或标准头文件,查找过程会检查预定义的目录
    •   ○   如果文件名用一对引号括起来,则表明该文件是用户提供的头文件,查找该文件时将从当前文件目录开始
      • #include <some_file.h>
      • #include "my_file.h"
  • 预处理器常量
    • 我们在编译程序时可以使用-D选项,并且在后面写上预处理器常量的名字,这样就能在 命令行中定义预处理器常量
  • C/C++预处理器
    • 编译 C++程序时 编译器自动定义了一个预处理器名字__cplusplus,注意前面有两个下划线,,因此,我们可以根据它来判断该程序是否是 C++程序,以便有条件地包含一些代码
    • 在编译标准 C 时,编译器将自动定义名字__STDC__
    • 当然,__cplusplus 与__STDC__ 不会同时被定义
  • C/C++库在C++环境下的头文件命名
    • assert.h是 C 库头文件的 C 名字
    • C++程序可以通过 C 库的 C 名字或 C++名字来使用它
    • 这个头文件的 C++名字是 cassert
    • C 库头文件的 C++名字总是以字母 C 开头,后面是去掉后缀.h 的 C 名字
    • 由于在各种 C++实现中,头文件的后缀各不相同,因此标准 C++头文件没有指定后缀
  • C/C++库在C++环境下的使用效果
    • 使用头文件的 C 名字,或者 C++名字,两种情况下头文件的#include 预处理器指示符的 效
    •   ○   #include <cassert>,将 cassert 的内容被读入到我们的文本文件中
      • 由于所有的 C++库名字是在名字空间 std 中被定义的,因而在我们的程序文本文件中,它们是不可见的
      • 除非用 using namespace std 指示符显式地使其可见
    • #include <assert.h>,使用 C 头文件的C名字,可以直接在程序文本文件中使用名字assert(),而无需使用 using 指示符
  • 命名空间
    • 库文件厂商用命名空间来控制全局名字空间污染,即名字冲突问题,以避免它们的库污染 了用户程序的名字空间
posted on 2020-08-18 11:15  潇洒的大宝  阅读(262)  评论(0编辑  收藏  举报