[编程基础] 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, ...
随机推荐
- Python生成10个八位随机密码
#生成10个八位随机密码 import random lst1=[ chr(i) for i in range(97,123) ] #生成26为字母列表 lst2=[i for i in range( ...
- 解决在vue中设置的height: 100%没有效果
在新的页面设置height无效果的时候.需要改动App这个文件的heigth 解决办法.给app这个盒子设置高度.默认情况下为0 设置高度100%时,div的高度会等同于其父元素的高度.而上面中id为 ...
- AI之强化学习、无监督学习、半监督学习和对抗学习
1.强化学习 @ 目录 1.强化学习 1.1 强化学习原理 1.2 强化学习与监督学习 2.无监督学习 3.半监督学习 4.对抗学习 强化学习(英语:Reinforcement Learning,简称 ...
- shell实践
shell实践 父子shell 父shell:我们在登录某个虚拟机控制器终端的时候(连接某一个linux虚拟机)时,默认启动的交互式shell,然后等待命令输入. ps命令参数,是否有横杠的参数作用是 ...
- Oracle数据库允许最大连接数
1.查看当前的数据库连接数 SQL> select count(*) from v$process ; 2.数据库允许的最大连接数 SQL> select value from v$par ...
- WSL下的Ubuntu 18.04LTS配置软件源和系统更新
WSL下的Ubuntu 18.04LTS配置软件源和系统更新 设置系统语言为中文 # 安装中文支持 sudo apt-get install -y language-pack-zh-hans # 设置 ...
- Destination folder must be accessible
问题 Ecplise拖入文件夹项目时提示错误:Destination folder must be accessible 解决 导入的时候包不能直接拖入,要使用import导入,选择File-> ...
- 当resource bundle 的多语言文件里包含引号'时
背景 项目中使用Spring的ReloadableResourceBundleMessageSource这个类来实现多语言,有一次字符串里包含引号'时,解析时出了问题,一起来看一下吧 例子 resou ...
- 算法5: LeetCode_单链表_两数相加
题目: * 给你两个 非空 的链表,表示两个非负的整数.它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字. * 请你将两个数相加,并以相同形式返回一个表示和的链表. * 你可 ...
- 学习 vue3 第一天 vue3简介,创建vue3项目 Composition Api 初识
前言: 从今天开始来和大家一起学习 vue3 相信大家都不陌生,已经火了一段时间了,但是还是有不少人没有学习,那就跟着六扇老师来简单的入个门 废话不多说,来开始今天的学习 Vue3 简介: 2020年 ...