C/C++中的预定义宏
2017-08-27 16:09
169 查看
C/C++中有一些预定义宏经常会被用到,在此归纳整理一下。
一般最常用到的是一些标准预定义宏,见下表:
除了上述标准预定义宏,还有一些预定宏也经常用到,比如:
对于
输出结果为:
The file is ../main.cpp
This is line 10
The date is Aug 27 2017
The time is 16:06:34
This function is main
This is C++ compiler
This is line 4
This function is func1
一般最常用到的是一些标准预定义宏,见下表:
标准预定义宏 | 内容 |
---|---|
__FILE __ | 代表当前源代码文件名的字符串文字(包含了详细路径,如”G:/program/study/c++/main.cpp”) |
__LINE __ | 代表当前源代码中的行号的整数常量 |
__DATE __ | 进行预处理的日期(”Mmm dd yyyy”形式的字符串文字,如”Aug 27 2017”) |
__TIME __ | 源文件编译时间(格式为”hh:mm:ss”,如”09:11:10” ) |
__STDC __ | 设置为1时,表示该实现遵循C标准 |
__STDC_VERSION __ | 代表C标准版本号(格式为yyyymmL的一个长整型数,如C99为199901L) |
__STDC_HOSTED __ | 若为本机环境则设置为1,否则设为0 |
__cplusplus | 该宏有定义说明使用的是C++编译器 |
__OBJC __ | 设置为1时,表示使用的是Objective-C编译器 |
__ASSEMBLER __ | 设置为1时,表示正在处理汇编语言 |
__FUNCTION
__:当前所在函数名
__func
__:同
__FUNCTION
__
对于
__FILE
__,
__LINE
__,
__func
__,
__FUNCTION
__这样的宏,在调试程序时是很有用的,因为你可以很容易的知道程序运行到了哪个文件的那一行,是哪个函数。而对于
__DATE
__,
__TIME__则可以获取编译时间,可以根据此数据作为版本标识,并依此判断哪个版本新些及是否需要升级。
#include <iostream> void func1() { std::cout << "This is line " << __LINE__ << std::endl; std::cout << "This function is " << __func__ << std::endl; } int main() { std::cout << "The file is " << __FILE__ << std::endl; std::cout << "This is line " << __LINE__ << std::endl; std::cout << "The date is " << __DATE__ << std::endl; std::cout << "The time is " << __TIME__ << std::endl; std::cout << "This function is " << __func__ << std::endl; #ifdef __cplusplus std::cout << "This is C++ compiler " << std::endl; #endif func1(); return 0; }
输出结果为:
The file is ../main.cpp
This is line 10
The date is Aug 27 2017
The time is 16:06:34
This function is main
This is C++ compiler
This is line 4
This function is func1
相关文章推荐
- c++ 模板类 声明和定义都放在.h文件的原因
- C++学习笔记-----存在多态调用时,为基类定义虚析构函数
- C++类型重定义详解
- C++:类的定义及初始化问题
- C++ 虚基类的定义、功能、规定
- C++报错之必须定义入口点(VS) 模板
- C与C++中定义结构体的不同方式
- C++文本查询程序 定义类管理数据 用智能指针 C++Primer练习12.30
- C++文本查询程序 定义类管理数据 用引用共享数据 不用智能指针 C++Primer练习12.27
- c/c++预定义宏
- C++学习 【4.5】 利用函数实现指定的功能---局部变量、全局变量、变量的存储类别、声明和定义
- C++ 常量定义之我见
- C++的重载函数定义和用法
- 【C++】定义和引用二维数组
- 声明和定义 (C++)
- 顺序栈的定义、初始化、出栈、入栈等操作 C++代码实现 ——感想
- C++中的重写、重载、重定义
- C++ 类型定义顺序问题
- 在C++中for、if...内定义的变量在其之外就失效了~
- C++ 如何定义头文件?为何要用到ifndef和#define,#endif?有何用