Linux C所有预定义的宏

命令: gcc -E -dM - < /dev/null

命令参数解释:

  • gcc:GNU编译器集合中的C编译器。
  • -E:只执行编译器的预处理阶段,不进行编译和链接。
  • -dM:预处理宏定义。这个选项告诉编译器仅预处理并输出所有预定义的宏。
  • -:表示标准输入(stdin),这里指没有实际的源代码文件,而是从标准输入读取数据(在这种情况下是空数据,因为重定向自 /dev/null)。
  • < /dev/null:输入重定向,意味着 gcc 命令将从 /dev/null 读取输入,/dev/null 是一个特殊的文件,它会丢弃所有写入其中的数据,并且读取操作会立即返回EOF(文件结束符)。

执行 gcc -E -dM - < /dev/null 命令的结果:输出的每一行都是一个宏定义,这些宏定义是编译器在编译过程中识别和使用的。这些宏定义可以提供关于编译器特性、系统特性、类型大小等信息。

如:

  • #define __SSP_STRONG__ 3:表示编译器支持强栈保护功能。
  • #define __UINT_LEAST16_MAX__ 0xffff:表示 unsigned least 16-bit integer 类型的最大值。
  • #define __ATOMIC_ACQUIRE 2:表示原子操作的获取屏障。
  • #define __FLT128_MAX_10_EXP__ 4932:表示128位浮点数最大10指数。
  • #define __unix__ 1:表示编译目标是UNIX系统。
  • #define __x86_64 1:表示编译目标是x86_64架构。
  • #define __UINT_FAST64_MAX__ 0xffffffffffffffffUL:表示 unsigned fast 64-bit integer 类型的最大值。
  • #define __GNUC__ 9:表示使用的GCC版本主版本号。
  • #define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__:表示系统的字节序是小端序。
  • #define __STDC_VERSION__ 201710L:表示支持的C标准版本是C17。
  • #define STDC 1 :如果 __STDC__ 被定义,这意味着编译器至少支持C89标准。__STDC__ 宏定义为 1 并不意味着编译器不支持更新的C语言标准。实际上,许多现代编译器支持多个C语言标准,并且可以根据编译选项来选择不同的标准。例如,GCC和Clang编译器都支持从C89到C11等多个标准,并且可以通过编译器选项(如 -std=c11)来指定使用哪个标准。在这种情况下,即使 __STDC__ 被定义,编译器也可能定义其他宏来指示支持更新的标准,如 __STDC_VERSION__ 用于指示具体的标准版本。
  • #define SIZEOF_INT 4 表明在当前平台上,int 类型的大小为 4 字节(即 32 位)。
  • #define SIZEOF_POINTER 8 这个宏定义表明在当前平台上,指针(void* 或任何其他指针类型)的大小为 8 字节(即 64 位)。这通常意味着该平台是 64 位系统,因为指针大小通常与系统的 word size(一个字的大小)相匹配。这对于确定可以存储在指针中的地址空间大小以及进行适当的内存分配和数据结构设计非常重要。
相关推荐
2的n次方_1 分钟前
Runtime 执行提交机制:NPU 硬件队列的管理与任务原子化下发
c语言·开发语言
A星空12322 分钟前
一、Linux嵌入式的I2C驱动开发
linux·c++·驱动开发·i2c
释怀不想释怀27 分钟前
Linux环境变量
linux·运维·服务器
zzzsde33 分钟前
【Linux】进程(4):进程优先级&&调度队列
linux·运维·服务器
凡人叶枫44 分钟前
C++中智能指针详解(Linux实战版)| 彻底解决内存泄漏,新手也能吃透
java·linux·c语言·开发语言·c++·嵌入式开发
yuanmenghao1 小时前
Linux 性能实战 | 第 7 篇 CPU 核心负载与调度器概念
linux·网络·性能优化·unix
qq_297574671 小时前
Linux 服务器 Java 开发环境搭建保姆级教程
java·linux·服务器
70asunflower2 小时前
Emulation,Simulation,Virtualization,Imitation 的区别?
linux·docker
神梦流2 小时前
GE 引擎的内存优化终局:静态生命周期分析指导下的内存分配与复用策略
linux·运维·服务器
凡人叶枫2 小时前
C++中输入、输出和文件操作详解(Linux实战版)| 从基础到项目落地,避坑指南
linux·服务器·c语言·开发语言·c++