C++预处理器
2016-01-19 10:32
106 查看
预处理操作是发生在程序编译开始之前,对C++源代码进行一些简单的处理。
预处理器的任务如下:
1.解析#开始的命令,如下常用预处理命令
#include 在
程序中包含头文件
#if 条件
#else 否则
#elif 否则如果
#endif 结束条件
#ifdef 或 #if defined 如果定义了一个符号, 就执行操作
#ifndef 或 #if !defined 如果没有定义一个符号,就指执行操作
#define
定义符号、宏
#define的缺点:不支持类型检查;不考虑作用域;符号名不能限制在一个命名
空间中。
#undef 删除一个符号
#line 重新定义当前行号和文件名,可以修改__FILE__返回的字符串,如下示例:
#line 1000 把当前行号设置为1000
#line 1000 "the program file" 修改__FILE__返回的字符串行号改为了1000,文件名改为了"the program file"
#line __LINE__ "the program file" 修改__FILE__返回的字符串行号没变,文件名改为了"the
program file"
#error 输出编译错误 消息, 停止编译。示例如下:
#ifndef __cplusplus
#error "Error - Should be C++"
#endif
#pragma 提供 机器专用的特性,同时保证与C++的完全兼容
2.删除注释
一些常用的预处理器宏如下:
__LINE__ 当前源文件中的代码行号,十进制整数
__FILE__ 源文件的名称,字符串字面量
__DATE__ 源文件的处理日期,字符串字面量,格式mmm dd yyyy其中mmm是月份如Jan、Feb等 dd是01-31 yyyy是四位的年份
__TIME__ 源文件的编译 时间,也是字符串字面量格式是hh:mm:ss
__STDC__ 这取决于实现方式,如果编译器选项设置为编译标准的C代码,通常就定义它,否则就不定义它
__cplusplus 在编译C++ 程序时,它就定义为199711L
预处理器的任务如下:
1.解析#开始的命令,如下常用预处理命令
#include 在
程序中包含头文件
#if 条件
#else 否则
#elif 否则如果
#endif 结束条件
#ifdef 或 #if defined 如果定义了一个符号, 就执行操作
#ifndef 或 #if !defined 如果没有定义一个符号,就指执行操作
#define
定义符号、宏
#define的缺点:不支持类型检查;不考虑作用域;符号名不能限制在一个命名
空间中。
#undef 删除一个符号
#line 重新定义当前行号和文件名,可以修改__FILE__返回的字符串,如下示例:
#line 1000 把当前行号设置为1000
#line 1000 "the program file" 修改__FILE__返回的字符串行号改为了1000,文件名改为了"the program file"
#line __LINE__ "the program file" 修改__FILE__返回的字符串行号没变,文件名改为了"the
program file"
#error 输出编译错误 消息, 停止编译。示例如下:
#ifndef __cplusplus
#error "Error - Should be C++"
#endif
#pragma 提供 机器专用的特性,同时保证与C++的完全兼容
2.删除注释
一些常用的预处理器宏如下:
__LINE__ 当前源文件中的代码行号,十进制整数
__FILE__ 源文件的名称,字符串字面量
__DATE__ 源文件的处理日期,字符串字面量,格式mmm dd yyyy其中mmm是月份如Jan、Feb等 dd是01-31 yyyy是四位的年份
__TIME__ 源文件的编译 时间,也是字符串字面量格式是hh:mm:ss
__STDC__ 这取决于实现方式,如果编译器选项设置为编译标准的C代码,通常就定义它,否则就不定义它
__cplusplus 在编译C++ 程序时,它就定义为199711L
相关文章推荐
- C++引用&和指针在作为形参时的区别
- C++入门(20):字符串
- Windows系统下文件的概念及c语言对其的基本操作(甲)
- leetcode power of three
- C++下caffe使用教程
- C语言实现字节流与十六进制字符串的相互转换
- c语言sizeof用法(32位机)
- c语言函数实参与形参整理
- c语言字符相关函数
- C++之路进阶——点分(聪聪可可)
- C++之路进阶——点分(tree)
- C语言中各种数据类型的大小
- 【C语言】冒泡排序及优化
- 移除未排序链表中的重复结点
- 用stack和面向对象的设计思想实现汉诺塔
- 详解C++编程中一元运算符的重载
- c语言中为什么左移不分符号数无符号数,而右移分呢??
- 【UE4官方文档翻译】Introduction to C++ Programming in UE4 (介绍UE4中的C++编程)
- 【OC语言】关于block的使用
- c++的坑--字符串内存拷贝注意事项