C++:预处理指令
Preprocessor directives 预处理器指令
预处理器指令是指那些包含在我们代码中的预处理器语句行,这些预处理器语句不是真正的代码语句,但是他们指导程序如何进行编译.这些语句总是以 ‘#’ 开头.预处理器指令在代码真正编译开始之前执行,因此在任何语句生成代码之前预处理器移除所有的预处理指令。
一条预处理指令仅占一行.只要发现新行的存在就认为预处理语句结束了.预处理语句后面不能加“;” . 将一条预处理指令扩展为多行的唯一方法是在每行语句后面加上 反斜杠 “\”.
macro definitions (#define, #undef)
我们可以使用 #define定义预处理宏. 格式如下:
#define identifier replacement
#undef 取消宏定义指令 格式如下:
#undef macro
## 作用是 黏贴俩符号:
|
1 |
#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 |
#line 20 "assigning variable" int a?; |
错误指令 (#error)
当发现该指令的时候终止编译进程, 产生一个编译错误,并且将错误作为参数:
|
1 |
#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 |
// 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++:预处理指令的更多相关文章
- 预处理指令#pragma
#pragma介绍 #pragma是一个预处理指令,pragma的中文意思是『编译指示』.它不是Objective-C中独有的东西(貌似在C/C++中使用比较多),最开始的设计初衷是为了保证代码在不同 ...
- C/C++预处理指令#define,#ifdef,#ifndef,#endif…
2016年12月29日更新: 今天查看以前文件的时候, 突然发现了#error 这个预处理指令.然后回想一下工作, 发现这个指令使用场景还是很多的.比如: 一个项目的模块儿之多,源文件之大,代码之多, ...
- Effective Objective-C 2.0 — 第四条:多用类型常量,少用#define预处理指令
第四条:多用类型常量,少用#define预处理指令 使用#define 预处理的坏处:定义出来的常量没有类型信息,编译器只是会在编译前据此执行查找与替换操作.即使有人重新定义了常量值,编译器也不会产生 ...
- VC中预处理指令与宏定义详解
刚接触到MFC编程的人往往会被MFC 向导生成的各种宏定义和预处理指令所吓倒,但是预处理和宏定义又是C语言的一个强大工具.使用它们可以进行简单的源代码控制,版本控制,预警或者完成一些特殊的功能. 一个 ...
- C#中的预处理指令
C#中的预处理指令 作为预处理中的一对:#region name ,#endregion可能是大家使用得最多的,我也常用它来进行代码分块,在一个比较长的cs文件中,这么做确实是一件可以让你使代码更清晰 ...
- C#学习笔记(十五):预处理指令
C#和C/C++一样,也支持预处理指令,下面我们来看看C#中的预处理指令. #region 代码折叠功能,配合#endregion使用,如下: 点击后如下: 条件预处理 条件预处理可以根据给出的条件决 ...
- iOS预处理指令
预处理过程扫描源代码,对其进行初步的转换,产生新的源代码提供给编译器.可见预处理过程先于编译器对源代码进行处理. 预处理指令是以#开头的代码行,#后是指令关键字,在关键字和#号之间允许存在任意个数的空 ...
- #pragma预处理指令讲解
在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作.#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的 ...
- C# 预处理指令
导读 1.什么是预处理 2.预处理的好处 3.C#中的常见预处理指令 4.总结 什么是预处理 在计算机科学中,预处理通常是指利用某一程序(通常是预处理器)对某一格式的源码(如.cs C ...
- C学习笔记之预处理指令
一.什么是预处理指令 预处理指令是告诉编译器在编译之前预先处理的一些指令,有宏定义,文件包括,条件编译. 预处理指令一般以 # 号开头,能够出如今文件的不论什么地方, ...
随机推荐
- blur事件
blur事件是在元素失去焦点的时候触发,那么失去焦点的前提便是获得焦点. 哪些元素可以获取焦点呢? 1.超链接 2.input button textarea (without disabled) 3 ...
- Python 跳出多重循环
Python 本身没有“break n” 和“goto” 的语法,这也造成了Python 难以跳出多层(特定层数)循环.下面是几个跳出多层(特定层数)循环的tip. 1.自定义异常 class g ...
- 小箭头的写法,z-index在ie7显示混乱问题
一.jQuery 发布 1.9 正式版,最后支持 IE 6/7/8,2.0以上的版本都不支持这三个浏览器了. 二.小箭头的写法与旋转切换(一直以为这样的只以切图片,原来未必哦.) <style& ...
- 软件测试之α测试和Beta测试
实施验收测试的常用策略有三种,它们分别是: · 正式验收 · 非正式验收或Alpha 测试 · Beta 测试 因此,Alpha测试和Beta测试都属于验收测试.所谓验收测试是软件产品完成了功能测试和 ...
- winsock编程select模型
winsock编程select模型 网络服务端连接数量过多时,为每一个连接申请一个线程会让机器性能急剧下降(大多说是因为线程在用户态和内核态之间切换会占用大量的CPU时间片).为了解决多线程带来的性能 ...
- 不安装oracle客户端,如何运行sqlplus
1.软件下载 http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html 下载如下三个包: oracle-instantc ...
- Linux下tar bz gz等压缩包的压缩和解压
Linux下用户经常需要备份计算机系统中的数据,为了节省存储空间,常常将备份文件进行压缩,本文是对压缩和解压命令的大致总结 .tar.gz 解压:tar zxvf FileName.tar.gz ...
- http response
关键词:http response header 下载文件 案例1: 访问某个链接,然后下载文件,需要特定的http头: header("Content-Type:application/z ...
- Java Web项目发布及使用自定义域名
详细讲解的网址: http://wenku.baidu.com/link?url=-ACZxKUcfrbhrMRUP3Ov-Q_c-Q9JPrA9D1fzHjHuJsWwZfRsVDVQ2qBtoY7 ...
- OSPF 原理
关于OSPF的数据结构Link-State Protocol Data Structures链路状态路由器与距离矢量路由器,可以知道关于整个网络的更多信息Neighbor table:also kno ...