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学习笔记之预处理指令
一.什么是预处理指令 预处理指令是告诉编译器在编译之前预先处理的一些指令,有宏定义,文件包括,条件编译. 预处理指令一般以 # 号开头,能够出如今文件的不论什么地方, ...
随机推荐
- ZIP文件解压
public class DZip { /// <summary> /// 压缩为ZIP文件 /// </summary> public void Zip(string dir ...
- 【入门一】一些简单的C程序及VS的安装
实例1 用 printf 函数打印字符串 # include <stdio.h> // 预处理指令,结尾不加 ';' int main(void) // int表示该函数将返回一个整数值, ...
- Jquery实现表格的分页
功能描述 该分页功能不是一次将所有记录都加载出来,然后在点击按钮翻页的时候,通过设置每一条记录的display属性展示或隐藏实现分页的效果.由于后台的获取数据的接口已实现分页的功能,所以在点击翻页按钮 ...
- android Bind机制(二)
1.binder通信概述 binder通信是一种client-server的通信结构, 1.从表面上来看,是client通过获得一个server的代理接口,对server进行直接调用: 2 ...
- nginx源码学习资源
http://www.cnblogs.com/yjf512/archive/2012/06/13/2548515.html nginx源码学习是一个痛苦又快乐的过程,下面列出了一些nginx的学习资源 ...
- 模拟post请求-->测试api是否可用-->再交给ios开发
提交给iso开发前.先模拟post提交,测试返回是否正确 =============post.php文件 ios每次最少要提交5个数据, 加密串 seqno , 请求验证码 source, 设备唯一标 ...
- Entity Framework技巧系列之一 - Tip 1 - 5
提示1. 在Entity Framework中怎样排序关系(Relationships) 问题: 在Entity Framework论坛中常会看到关于排序相关联项目的问题. 例如,想象你要查询客户,并 ...
- beego: 获取request参数
beego提供了一套web开发的框架.但我们在开发过程中遇到了一些问题,现汇总如下. 测试1:测试只有keys数组的情况 func (this *TestController) Index() { k ...
- 数据库sql语句为什么要用绑定形式?
基于两点: 1,安全性,防sql注入: 2,共享资源,相似的sql能被缓存而不是重新解析. 淘测试给出了一个很好的理由:http://www.taobaotesting.com/blogs/859
- Docker学习笔记 — Docker私有仓库搭建【转载】
标签: Docker 2015-03-10 21:08 24190人阅读 评论(0) 收藏 举报 分类: Docker(26) 目录(?)[+] 和Mavan的管理一样,Dockers不仅 ...