[编程基础] 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, ...
随机推荐
- Java学习之路:Dos命令
2022-10-08 10:25:42 (一)打开CMD的方式 开始+系统+命令提示符 Win+R 输入cmd打开控制台 在任意的文件夹下面,按住Shift+鼠标右键,点击在此打开命令行窗口 资源 ...
- mujoco d4rl 安装问题
最近mujoco免费了,属实爽歪歪,安装d4rl没有以前那么麻烦了(不知为何半年前我安装d4rl时走了那么多弯路) mujoco安装 在 https://mujoco.org/download 上面下 ...
- element-ui select可搜索下拉框无法在IOS或Ipad调起小键盘输入法
参考:https://segmentfault.com/q/1010000021748033 原因:常规select是可以调起小键盘的.但是element-ui的select其实是input.并且这个 ...
- iOS App 上架App Store及提交审核详细教程
上架App Store审核分7步进行: 1.安装iOS上架辅助软件Appuploader 2.申请iOS发布证书(p12) 3.申请iOS发布描述文件(mobileprovision) 4.打包ipa ...
- Vue router简单配置入门案例
{ 注意驼峰命名法,不然会报错 } 1.在Views文件夹下创建Vue路由文件,例如: <template> </template> <script> </ ...
- linux系统配置文件或shell脚本批量注释
1. 配置文件批量注释 1.1 批量注释 ① 进入命令行模式,按ctrl + v进入 visual block模式,键盘上下箭头选中多行,把需要注释的行标记起来 ② 按大写字母I,再输入注释符:# ③ ...
- Day11.2:标签的使用
标签的使用 当我们在嵌套语句中,例如当我们在for的嵌套循环语句中,想要终止或重新开始当前循环以外的循环的时候,单独仅靠break和continue和还不够,需要在我们想要作用的循环语句处加上一个标签 ...
- SpringBoot 06: springboot中使用redis
配置SpringBoot 创建SpringBoot项目时勾选Redis起步依赖 <dependency> <groupId>org.springframework.boot&l ...
- ANSYS安装教程
ANSYS 16.0 WIN10 64位安装步骤:1.使用"百度网盘客户端"下载ANSYS 16.0软件安装包到电脑磁盘里全英文名称文件夹内,安装前先断开网络,然后找到ANSYS. ...
- mindxdl--common--http_handler.go
// Copyright (c) 2021. Huawei Technologies Co., Ltd. All rights reserved.// Package common this file ...