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++内置宏说明的更多相关文章

  1. 获取gcc和clang的内置宏定义

    下面是对Gcc的内置宏定义的解释: https://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html https://github.co ...

  2. 二十六. Python基础(26)--类的内置特殊属性和方法

    二十六. Python基础(26)--类的内置特殊属性和方法 ● 知识框架 ● 类的内置方法/魔法方法案例1: 单例设计模式 # 类的魔法方法 # 案例1: 单例设计模式 class Teacher: ...

  3. python面向对象的基础语法(dir内置函数、self参数、初始化方法、内置方法和属性)

    面相对象基础语法 目标 dir 内置函数 定义简单的类(只包含方法) 方法中的 self 参数 初始化方法 内置方法和属性 01. dir 内置函数(知道) 在 Python 中 对象几乎是无所不在的 ...

  4. C++ 内置宏定义 与 预编译指令

    内置宏和预编译指令, 在代码调试.单元测试.跨平台代码中经常会用到.这里记录一下. 1. 内置宏 (文件名,当前行号,当前日期,当前时间,当前执行方法名) __FILE____LINE____DATE ...

  5. 编译器内置宏__LINE__&__FUNCTION__

    编译器内置宏: 先介绍几个编译器内置的宏定义,这些宏定义不仅可以帮助我们完成跨平台的源码编写,灵活使用也可以巧妙地帮我们输出非常有用的调试信息. ANSI C标准中有几个标准预定义宏(也是常用的): ...

  6. c语言编译器内置宏

    注:转自http://www.cnblogs.com/lixiaohui-ambition/archive/2012/08/21/2649052.html  感谢分享 前言: 我们在写程序的时候,总是 ...

  7. 一起talk C栗子吧(第一百二十四回:C语言实例--内置宏)

    各位看官们,大家好,上一回中咱们说的是显示变量和函数地址的样例,这一回咱们说的样例是:内置宏.闲话休提,言归正转.让我们一起talk C栗子吧! 看官们,我们在编译程序的时候,假设有语法错误,编译器就 ...

  8. python基础之函数式编程、匿名函数、内置函数

    一 函数式编程 不修改外部状态. 模仿数学里得函数进行编程. 用函数编程写出得代码相当精简. 可读性比较差. 例子: y=2*x+1 x=1 def test(x): return 2*x+1 tes ...

  9. python基础12_匿名_内置函数

    一个二分查找的示例: # 二分查找 示例 data = [1, 3, 6, 7, 9, 12, 14, 16, 17, 18, 20, 21, 22, 23, 30, 32, 33, 35, 36, ...

随机推荐

  1. 十大 CI/CD 安全风险(三)

    在上一篇文章,我们了解了依赖链滥用和基于流水线的访问控制不足这两大安全风险,并给出缓解风险的安全建议.本篇文章将着重介绍 PPE 风险,并提供缓解相关风险的安全建议与实践. Poisoned Pipe ...

  2. 洛谷 P5607 [Ynoi2013] 无力回天 NOI2017

    人生第一道Ynoi,开心 Description https://www.luogu.com.cn/problem/P5607 Solution 拿到这个题,看了一下,发现询问要求最大异或和,怎么办? ...

  3. 1.关于SPring Boot项目的创建

    一.引入依赖 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spri ...

  4. 成功解决:snippet设置的开机自启没有效果

    1.问题描述 勾选开机启动后.没有效果.每次开机都要我重新找到对应的安装目录.双击运行开启 2.解决方法 将snipaste的快捷方式放到开机启动目录下 C:\Users\Administrator\ ...

  5. 齐博X1-新建一个空模板并在后台选择

    本节实际操作建立一个空模板,并且让后台识别,选择该风格 先在index_style中建立一个目录,命名mystyle并上传我们在mystyle目录中建立一个info.php文件,代码如下:上传后,后台 ...

  6. day52-正则表达式03

    正则表达式03 5.6正则表达式三个常用类 java.util.regex 包主要包括以下三个类:Pattern类.Matcher类和PatternSyntaxException类 Pattern类 ...

  7. 7.pyagem-游戏背景

    背景交替滚动 游戏启动后,背景图像不断的向下移动 在视觉上产生角色不断向上移动的错觉 游戏背景不断变化,游戏主角的位置报错不变   实现方案 创建两张背景图 第一张完全和屏幕重合,第二章在屏幕的正上方 ...

  8. Windows7下驱动开发与调试体系构建——4.在x64下使用汇编代码(x86下的_asm)

    目录/参考资料:https://www.cnblogs.com/railgunRG/p/14412321.html asm文件设置 在vs x64中无法使用_asm关键字,需要使用.asm文件. 按第 ...

  9. 动态爱心-详细教程(小白也会)(HTML)

    动态爱心 超级超级超级简单!!!赶紧做给你们的"Ta"看吧! (最后有详细步骤) 视频效果: 话不多说直接上代码 点击查看代码 <!DOCTYPE HTML PUBLIC & ...

  10. 「浙江理工大学ACM入队200题系列」问题 A: 零基础学C/C++34—— 3个数比较大小(冒泡排序与选择排序算法)

    本题是浙江理工大学ACM入队200题第四套中的A题,同时给出了冒泡排序和选择排序算法 我们先来看一下这题的题面. 由于是比较靠前的题目,这里插一句.各位新ACMer朋友们,请一定要养成仔细耐心看题的习 ...