[编程基础] C和C++内置宏说明
C和C++内置宏在代码调试、跨系统平台代码中会经常使用,本文记录说明一下。内置宏不需要调用头文件,可直接使用。在使用预定义的宏之间需要了解常用的条件编译指令,具体条件编译指令可见:
if、#else、#endif、#elif、#ifdef、#ifndef的区别和使用
1 内置的宏定义
这些宏在代码中可直接调用。
| 宏 | 宏说明 |
|---|---|
| __DATE__ | 程序最后编译日期宏 |
| __TIME__ | 程序最后编译时间宏 |
| __LINE__ | 当前行数宏 |
| __FILE__ | 当前运行文件名宏 |
| __FUNCTION__ | 当前运行函数宏 |
| __func__ | 当前运行函数宏 |
示例代码
cout << "程序最后编译日期宏 " << __DATE__ << endl;
cout << "程序最后编译时间宏 " << __TIME__ << endl;
cout << "当前行数宏 " << __LINE__ << endl;
cout << "当前运行文件名宏 " << __FILE__ << endl;
cout << "当前运行函数宏 " << __FUNCTION__ << endl;
cout << "当前运行函数宏 " << __func__ << endl;
windows输出结果
程序最后编译日期宏 May 8 2020
程序最后编译时间宏 11:19:24
当前行数宏 12
当前运行文件名宏 c:\users\admin\desktop\test\define.cpp
当前运行函数宏 main
当前运行函数宏 main
linux输出结果
程序最后编译日期宏 May 8 2020
程序最后编译时间宏 11:19:00
当前行数宏 9
当前运行文件名宏 define.cpp
当前运行函数宏 main
当前运行函数宏 main
2 运行平台宏
这些宏主要是判断当前系统运行平台。
| 宏 | 宏说明 |
|---|---|
| WIN32、_WIN32、_WIN32_、WIN64、_WIN64、_WIN64_ | windows |
| ANDROID、_ANDROID_ | android |
| __linux__ | linux |
| __APPLE__、TARGET_OS_IPHONE、TARGET_IPHONE_SIMULATOR、TARGET_OS_MAC | ios、mac |
示例代码
// windows
#if defined(WIN32) || defined(_WIN32) || defined(_WIN32_) || defined(WIN64) || defined(_WIN64) || defined(_WIN64_)
cout << "hello windows" << endl;
// android
#elif defined(ANDROID) || defined(_ANDROID_)
cout << "hello android" << endl;
// linux
#elif defined(__linux__)
cout << "hello linux" << endl;
// ios or mac
#elif defined(__APPLE__) || defined(TARGET_OS_IPHONE) || defined(TARGET_IPHONE_SIMULATOR) || defined(TARGET_OS_MAC)
cout << "hello ios/mac" << endl;
// other
#else
cout << "hello unknown" << endl;
#endif
windows输出结果
hello windows
linux输出结果
hello linux
3 编译器宏
这些宏主要是判断当前程序的编译器类型。
| 宏 | 宏说明 |
|---|---|
| _MSC_VER | visual studio |
| __GNUC__ | gcc、g++ |
| __SUNPRO_C、__SUNPRO_CC | sun cc |
示例代码
// visual studio
#if defined(_MSC_VER)
cout << "hello VC" << endl;
// gcc/g++
#elif defined(__GNUC__)
cout << "hello GCC / G++ " << endl;
// SunCC
#elif defined(__SUNPRO_C)||defined(__SUNPRO_CC)
cout << "hello SunCC" << endl;
#endif
windows输出结果
hello VC
linux输出结果
hello GCC / G++
4 调试类型宏
这些宏主要是判断当前程序的调试类型。
| 宏 | 宏说明 |
|---|---|
| _DEBUG | debug模式 |
示例代码
#if defined(_DEBUG)
cout << "debug" << endl;
#else
cout << "release" << endl;
#endif
windows输出结果
debug
linux输出结果
release
5 代码
所有示例运行代码如下:
#include <iostream>
using namespace std;
int main()
{
cout << "程序最后编译日期宏 " << __DATE__ << endl;
cout << "程序最后编译时间宏 " << __TIME__ << endl;
cout << "当前行数宏 " << __LINE__ << endl;
cout << "当前运行文件名宏 " << __FILE__ << endl;
cout << "当前运行函数宏 " << __FUNCTION__ << endl;
cout << "当前运行函数宏 " << __func__ << endl;
// 运行平台宏
// windows
#if defined(WIN32) || defined(_WIN32) || defined(_WIN32_) || defined(WIN64) || defined(_WIN64) || defined(_WIN64_)
cout << "hello windows" << endl;
// android
#elif defined(ANDROID) || defined(_ANDROID_)
cout << "hello android" << endl;
// linux
#elif defined(__linux__)
cout << "hello linux" << endl;
// ios or mac
#elif defined(__APPLE__) || defined(TARGET_OS_IPHONE) || defined(TARGET_IPHONE_SIMULATOR) || defined(TARGET_OS_MAC)
cout << "hello ios/mac" << endl;
// other
#else
cout << "hello unknown" << endl;
#endif
// 编译器宏
// visual studio
#if defined(_MSC_VER)
cout << "hello VC" << endl;
// gcc/g++
#elif defined(__GNUC__)
cout << "hello GCC / G++ " << endl;
// SunCC
#elif defined(__SUNPRO_C)||defined(__SUNPRO_CC)
cout << "hello SunCC" << endl;
#endif
// 调试类型
#if defined(_DEBUG)
cout << "debug" << endl;
#else
cout << "release" << endl;
#endif
return 0;
}
[编程基础] C和C++内置宏说明的更多相关文章
- 获取gcc和clang的内置宏定义
下面是对Gcc的内置宏定义的解释: https://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html https://github.co ...
- 二十六. Python基础(26)--类的内置特殊属性和方法
二十六. Python基础(26)--类的内置特殊属性和方法 ● 知识框架 ● 类的内置方法/魔法方法案例1: 单例设计模式 # 类的魔法方法 # 案例1: 单例设计模式 class Teacher: ...
- python面向对象的基础语法(dir内置函数、self参数、初始化方法、内置方法和属性)
面相对象基础语法 目标 dir 内置函数 定义简单的类(只包含方法) 方法中的 self 参数 初始化方法 内置方法和属性 01. dir 内置函数(知道) 在 Python 中 对象几乎是无所不在的 ...
- C++ 内置宏定义 与 预编译指令
内置宏和预编译指令, 在代码调试.单元测试.跨平台代码中经常会用到.这里记录一下. 1. 内置宏 (文件名,当前行号,当前日期,当前时间,当前执行方法名) __FILE____LINE____DATE ...
- 编译器内置宏__LINE__&__FUNCTION__
编译器内置宏: 先介绍几个编译器内置的宏定义,这些宏定义不仅可以帮助我们完成跨平台的源码编写,灵活使用也可以巧妙地帮我们输出非常有用的调试信息. ANSI C标准中有几个标准预定义宏(也是常用的): ...
- c语言编译器内置宏
注:转自http://www.cnblogs.com/lixiaohui-ambition/archive/2012/08/21/2649052.html 感谢分享 前言: 我们在写程序的时候,总是 ...
- 一起talk C栗子吧(第一百二十四回:C语言实例--内置宏)
各位看官们,大家好,上一回中咱们说的是显示变量和函数地址的样例,这一回咱们说的样例是:内置宏.闲话休提,言归正转.让我们一起talk C栗子吧! 看官们,我们在编译程序的时候,假设有语法错误,编译器就 ...
- python基础之函数式编程、匿名函数、内置函数
一 函数式编程 不修改外部状态. 模仿数学里得函数进行编程. 用函数编程写出得代码相当精简. 可读性比较差. 例子: y=2*x+1 x=1 def test(x): return 2*x+1 tes ...
- python基础12_匿名_内置函数
一个二分查找的示例: # 二分查找 示例 data = [1, 3, 6, 7, 9, 12, 14, 16, 17, 18, 20, 21, 22, 23, 30, 32, 33, 35, 36, ...
随机推荐
- 前端框架Vue------>第三天学习(1)
` 文章目录 10 .组件基础 10.1 .什么是组件 11.什么是计算属性 10 .组件基础 10.1 .什么是组件 件是可复用的Vue实例,说白了就是一组可以重复使用的模板 <!DOCTYP ...
- 7_vue的数据代理,双向绑定
回顾 object.defineProperty() 方法 区别 defineProperty == 给对象定义属性用的 需要传递三个基本参数 需要定义属性的对象名 你要定义的属性叫什么名字(比如给p ...
- DevOps | 如何快速提升团队软件开发成熟度,快速提升研发效能?
今天一个小伙伴问我,如何「快速提升」一个团队的软件开发成熟度?我犯难了.我个人理解一个团队的软件开发成熟度涉及的东西很多,但最简单最直接的方法就是发钱涨工资,可是估计很多公司不愿意,那就只有扣了. 快 ...
- Centos镜像下载
1.进入官网,并点击下图所示的红框(alternative downloads) 官网网址:https://www.centos.org/download/ 2.在往下翻,可以看到如下图的历史版本, ...
- Nginx反向代理实现Tomcat+Jpress和halo
一.利用Nginx反向代理Jpress+Tomcat 1.环境准备 服务器 IP地址 作用 系统版本 Proxy代理服务器 10.0.0.101 负载均衡Nginx Web服务器 Ubuntu2004 ...
- Ubuntu实现电商网站+Mysql主从复制+NFS
Ubuntu实现电商网站+Mysql主从复制+NFS 1.环境准备 提前准备:Mysql8.0.30安装包.Mysql安装脚本.shopxo2.3.0安装包.DNS脚本 服务器 IP地址 作用 系统版 ...
- js把秒数转换为HH:MM:SS及时分秒格式
/** * 转为HH:MM:SS * @param second * @returns {string} * @private */ var _showTime = function (second) ...
- 【Zulip】邮件系统配置
通过docker-compose(docker-zulip)部署Zulip实例时需要配置邮件系统 SETTING_ZULIP_ADMINISTRATOR: '...@qq.com' SETTING_E ...
- NC 使用Nginx实现https的反向代理
summary: [通过Nginx实现NCC的https访问,并解决UClient应用的问题] 1 概述 通过Nginx 安装配置反向代理,实现NC.NCC的https访问. 本文以NCC2005为例 ...
- Go map 竟然也会发生内存泄露?
Go 程序运行时,有些场景下会导致进程进入某个"高点",然后就再也下不来了. 比如,多年前曹大写过的一篇文章讲过,在做活动时线上涌入的大流量把 goroutine 数抬升了不少,流 ...