Preprocessor directives 预处理器指令

预处理器指令是指那些包含在我们代码中的预处理器语句行,这些预处理器语句不是真正的代码语句,但是他们指导程序如何进行编译.这些语句总是以 ‘#’ 开头.预处理器指令在代码真正编译开始之前执行,因此在任何语句生成代码之前预处理器移除所有的预处理指令。
一条预处理指令仅占一行.只要发现新行的存在就认为预处理语句结束了.预处理语句后面不能加“;” . 将一条预处理指令扩展为多行的唯一方法是在每行语句后面加上 反斜杠 “\”.
macro definitions (#define, #undef)

我们可以使用 #define定义预处理宏. 格式如下:
#define identifier replacement

#undef 取消宏定义指令  格式如下:

#undef macro

##  作用是 黏贴俩符号:

1
2

#define glue(a,b) a ## b

glue(c,out) << "test";

上述的代码会被处理成:

cout << "test";

条件包含指令(#ifdef, #ifndef, #if, #endif, #else and #elif)

行控制指令 (#line)

当我们编译一个程序,编译过程中由错误发生的时候,编译器会显示错误信息支出哪个文件哪一行发生错误,以便我们更方便找到并处理错误

#line 指令允许我们对这种方式进行控制,当错误发生的时候,错误所在行号和文件名都会被显示. 使用格式如下: 
#line number "filename"

1
2

#line 20 "assigning variable"

int a?;

错误指令 (#error)

当发现该指令的时候终止编译进程, 产生一个编译错误,并且将错误作为参数:

1
2
3

#ifndef __cplusplus

#error A C++ compiler is required!

#endif

Source file inclusion (#include)

Pragma  指令(#pragma)

该指令通常用于指定编译器的不同选项.这些选项与你所用的平台和编译器相关. 请查阅你的编译器手册或指南来获取更多关于#pragma指令参数的信息。

如果你的编译器不支持 #pragma指令 , 预处理器就会忽略该指令,而不会产生任何错误。

预定义的宏名

一下的几个宏在任何时候都被定义:

macro

value

__LINE__

代表当前被编译文件所处的行的行号

__FILE__

当前被编译文件的文件名

__DATE__

当前编译开始时的日期 形式为 “月/日/年”

__TIME__

编译进程开始时的时间 , 形式为 “时:分:秒”

__cplusplus

一个整型值. 所有的C++编译器都将这个宏定义为某个整型值.如果编译器完全符合C++标准的话,根据其遵循的C++标准版本,这个值应该大于等于1997 或11L

例:

1
2
3
4
5
6
7
8
9
10
11
12
13

// standard macro names

#include <iostream>

using namespace std;

int main()

{

cout << "This is the line number " << __LINE__;

cout << " of file " << __FILE__ << ".\n";

cout << "Its compilation began " << __DATE__;

cout << " at " << __TIME__ << ".\n";

cout << "The compiler gives a __cplusplus value of " <<

__cplusplus;

return 0;

}

This is the line number 7 of file /home/jay/stdmacronames.cpp.

Its compilation began Nov  1 2005 at 10:12:29.

The compiler gives a __cplusplus value of 1

C++:预处理指令的更多相关文章

  1. 预处理指令#pragma

    #pragma介绍 #pragma是一个预处理指令,pragma的中文意思是『编译指示』.它不是Objective-C中独有的东西(貌似在C/C++中使用比较多),最开始的设计初衷是为了保证代码在不同 ...

  2. C/C++预处理指令#define,#ifdef,#ifndef,#endif…

    2016年12月29日更新: 今天查看以前文件的时候, 突然发现了#error 这个预处理指令.然后回想一下工作, 发现这个指令使用场景还是很多的.比如: 一个项目的模块儿之多,源文件之大,代码之多, ...

  3. Effective Objective-C 2.0 — 第四条:多用类型常量,少用#define预处理指令

    第四条:多用类型常量,少用#define预处理指令 使用#define 预处理的坏处:定义出来的常量没有类型信息,编译器只是会在编译前据此执行查找与替换操作.即使有人重新定义了常量值,编译器也不会产生 ...

  4. VC中预处理指令与宏定义详解

    刚接触到MFC编程的人往往会被MFC 向导生成的各种宏定义和预处理指令所吓倒,但是预处理和宏定义又是C语言的一个强大工具.使用它们可以进行简单的源代码控制,版本控制,预警或者完成一些特殊的功能. 一个 ...

  5. C#中的预处理指令

    C#中的预处理指令 作为预处理中的一对:#region name ,#endregion可能是大家使用得最多的,我也常用它来进行代码分块,在一个比较长的cs文件中,这么做确实是一件可以让你使代码更清晰 ...

  6. C#学习笔记(十五):预处理指令

    C#和C/C++一样,也支持预处理指令,下面我们来看看C#中的预处理指令. #region 代码折叠功能,配合#endregion使用,如下: 点击后如下: 条件预处理 条件预处理可以根据给出的条件决 ...

  7. iOS预处理指令

    预处理过程扫描源代码,对其进行初步的转换,产生新的源代码提供给编译器.可见预处理过程先于编译器对源代码进行处理. 预处理指令是以#开头的代码行,#后是指令关键字,在关键字和#号之间允许存在任意个数的空 ...

  8. #pragma预处理指令讲解

    在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作.#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的 ...

  9. C# 预处理指令

    导读 1.什么是预处理 2.预处理的好处 3.C#中的常见预处理指令 4.总结 什么是预处理         在计算机科学中,预处理通常是指利用某一程序(通常是预处理器)对某一格式的源码(如.cs C ...

  10. C学习笔记之预处理指令

          一.什么是预处理指令            预处理指令是告诉编译器在编译之前预先处理的一些指令,有宏定义,文件包括,条件编译. 预处理指令一般以 # 号开头,能够出如今文件的不论什么地方, ...

随机推荐

  1. java集合概念

    Collection(单列集合) List(有序,可重复) ArrayList 底层数据结构是数组,查询快,增删慢 线程不安全,效率高 Vector 底层数据结构是数组,查询快,增删慢 线程安全,效率 ...

  2. 使用block函数的基本形式

    以前从未接触过block函数. 如果在.h头文件中定义的形式如下的话: @property (nonatomic, copy) void(^fontValueChangedBlock)(void); ...

  3. 照着例子学习protobuf-python

    以下是照着python操作protobuf进行的protobuf-python的学习笔记: 首先是protobuf的下载与安装: 1 由于google被墙,所以去github上面搜索了一下protob ...

  4. jquery-图片轮播(新手请大神指教一下)

    这是我刚学jquery写的,感觉效果不是很好. #scrollPics{ height: 330px; width: 980px; margin-bottom: 10px; overflow: hid ...

  5. ios导航栏又按钮添加图片后使其保持原色

    UIBarButtonItem *rightBarItem = [[UIBarButtonItem alloc] initWithTitle:nil style:UIBarButtonItemStyl ...

  6. Python实战:爬虫的基础

    网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁.自动索引.模拟程序或者蠕 ...

  7. 安卓四大组件的作用、安卓Service的作用

    Activity好像是应用程式的眼睛,提供与user互动之窗. BroadcastReceiver好像是耳朵,接收来自各方的Intent. Service是在后台运行的. 一个Service 是一段长 ...

  8. Eclipse+EPIC+PadWalker

    来源: http://www.cnblogs.com/itech/archive/2010/02/23/1671676.html http://blog.csdn.net/haoyujie/artic ...

  9. androidstudio 问题

    Error:(1, 1) A problem occurred evaluating project ':app'. > Failed to apply plugin [id 'com.andr ...

  10. C++设计模式-Visitor访问者模式

    #include <iostream> #include <string> #include <string.h> #include <memory> ...