查看C++ 预定义宏的方法

 更新时间:2026年05月21日 09:08:36   作者:java叶新东  
本文主要介绍了查看C++ 预定义宏的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

什么是预宏定义

预定义宏是C语言中标准编译器预先定义的宏,当我们编写跨平台程序时,有时候需要知道对应平台的工具链GCC预定义宏,用来判断一些平台特性

预定义宏特征

预定义宏有两个特征:

  1. 无需提供它们的定义,就可以直接使用。
  2. 预定义宏没有参数,且不可被重定义。

预定义的宏一般分为两类:标准预定义宏、编译器预定义宏。
常用的几个标准预定义宏有以下几个:

    std::cout <<"当前行号:"<<__LINE__ << std::endl; // 当前行号:15
	
    std::cout <<"当前文件:"<<__FILE__ << std::endl; // 当前文件:/Users/yexd/Documents/project_cpp/cpp_learn/lesson_26__LINE__.cpp

    std::cout <<"当前日期:"<<__DATE__ << std::endl; // 当前日期:Apr 16 2023

    std::cout <<"当前时间:"<<__TIME__ << std::endl; // 当前时间:10:18:11
	
    std::cout <<"当前函数:"<<__FUNCTION__ << std::endl; // 当前函数:main
	
    //__STDC__:判断当前的编译器是否为标准C编译器,若是则返回值1
    std::cout <<"当前编译器:"<<__STDC__ << std::endl; // 当前编译器:1

常见操作系统预定义宏

OSMacroDescription
UNIX Environment __unix__
UNIX Environment__unix
Linux kernellinux
GNU/Linuxgnu_linux
Mac OS X & iOSAPPLE苹果系统
AndroidANDROID安卓系统
Windows_WIN32Defined for both 32-bit and 64-bit environments
Windows_WIN64Defined for 64-bit environments

gcc 查看gcc默认的内置宏定义

gcc -dM -E - < /dev/null
或
cpp -dM /dev/null

指令说明

  • -E 预处理后即停止,不进行编译。预处理后的代码送往标准输出。GCC忽略任何不需要预处理的输入文件。
  • -dM 告诉预处理器输出有效的宏定义列表(预处理结束时仍然有效的宏定义)。该选项需结合`-E’选项使用。

结果如下

yexd@yexddeMacBook-Pro lesson_27_namespace % gcc -dM -E - < /dev/null
#define _LP64 1
#define __APPLE_CC__ 6000
#define __APPLE__ 1
#define __ATOMIC_ACQUIRE 2
#define __ATOMIC_ACQ_REL 4
#define __ATOMIC_CONSUME 1
......

clang 查看所有预定义宏

clang -dM -E -x c /dev/null

结果如下

yexd@yexddeMacBook-Pro lesson_27_namespace % clang -dM -E -x c /dev/null
#define _LP64 1
#define __APPLE_CC__ 6000
#define __APPLE__ 1
#define __ATOMIC_ACQUIRE 2
#define __ATOMIC_ACQ_REL 4
#define __ATOMIC_CONSUME 1
......

查看用户自行设定的宏定义

gcc -dM -E helloworld.c

预宏定义在c++代码中的应用

#include "iostream"
using namespace std;

#if defined(_MSC_VER) // 如果是windows系统,引入direct.h,将 _getcwd 宏定义为 GetCurrentDir
    #include <direct.h>
    #define GetCurrentDir _getcwd
#elif defined(__unix__) || defined(__APPLE__) // 如果是unix系统或者苹果系统,引入unistd.h ,将 getcwd 宏定义为 GetCurrentDir
    #include <unistd.h>
    #define GetCurrentDir getcwd
#else
// 啥也不干
#endif

// 操作系统兼容,在不同的操作系统中获取当前文件目录的方法
std::string get_current_directory()
{
    char buff[250];
    // 如果是windows系统,就用 _getcwd,如果是mac系统就用 getcwd
    GetCurrentDir(buff, 250);
    string current_working_directory(buff);
    return current_working_directory;
}

int main(int argc, char* argv[])
{
    std::cout << "当前工作目录为: " << get_current_directory() << endl;
    return 0;
}

到此这篇关于查看C++ 预定义宏的方法的文章就介绍到这了,更多相关C++ 预定义宏内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • C语言 超详细介绍与实现线性表中的无头单向非循环链表

    C语言 超详细介绍与实现线性表中的无头单向非循环链表

    无头单向非循环链表:结构简单,一般不会单独用来存数据。实际中更多是作为其他数据结构的子结构,如哈希桶、图的邻接表等等。另外这种结构在笔试面试中出现很多
    2022-03-03
  • C++ 折叠参数包详解(悄然增强编程效率)

    C++ 折叠参数包详解(悄然增强编程效率)

    折叠参数就是一个参数包, 代表是多个未知,tuple元组就是一个折叠参数的使用,这篇文章主要介绍了C++ 折叠参数包悄然增强编程效率,需要的朋友可以参考下
    2023-05-05
  • C++常用语句简介

    C++常用语句简介

    这篇文章主要介绍了C++常用语句简介,文章将要介绍的常用语句有声明变量、赋值语句、cin、cout语句、库函数、自定义函数,需要的朋友可以参考一下,希望对你有所帮助
    2021-11-11
  • 深入理解C语言指针及占据内存空间

    深入理解C语言指针及占据内存空间

    这篇文章主要介绍了C语言指针及占据内存空间的相关知识,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • C++ 实现求小于n的最大素数的实例

    C++ 实现求小于n的最大素数的实例

    这篇文章主要介绍了C++ 实现求小于n的最大素数的实例的相关资料,需要的朋友可以参考下
    2017-05-05
  • C++ 异常处理 catch(...)介绍

    C++ 异常处理 catch(...)介绍

    catch(…)能够捕获多种数据类型的异常对象,所以它提供给程序员一种对异常 对象更好的控制手段,使开发的软件系统有很好的可靠性
    2013-09-09
  • 用c++写控制台贪吃蛇游戏完整步骤

    用c++写控制台贪吃蛇游戏完整步骤

    用C++制作贪吃蛇游戏是一个经典的编程练习,它涉及多个方面的编程知识,包括数据结构、图形界面、事件处理等,这篇文章主要介绍了用c++写控制台贪吃蛇游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-12-12
  • C++前缀和与差分的使用示例讲解

    C++前缀和与差分的使用示例讲解

    前缀和是指某序列的前n项和,可以把它理解为数学上的数列的前n项和,而差分可以看成前缀和的逆运算。合理的使用前缀和与差分,可以将某些复杂的问题简单化。类似于数学中的求导和积分,差分可以看成前缀和的逆运算
    2023-03-03
  • C语言 typedef:给类型起一个别名

    C语言 typedef:给类型起一个别名

    本文主要介绍C语言 typedef,这里整理了相关资料及简单示例代码帮助大家学习理解,有兴趣的小伙伴可以参考下
    2016-08-08
  • stringstream操纵string的方法总结

    stringstream操纵string的方法总结

    下面小编就为大家带来一篇stringstream操纵string的方法总结。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12

最新评论