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(一个字的大小)相匹配。这对于确定可以存储在指针中的地址空间大小以及进行适当的内存分配和数据结构设计非常重要。
相关推荐
GeW2 小时前
高端化转型进入“补底层”阶段:Linux与数据库的再定位
linux
silent2 小时前
龙芯3B6000M运行Yolov8+FastApi
linux·loongarch·loongnix·龙芯
西西弗Sisyphus3 小时前
理解 Linux 动态库加载:LD_LIBRARY_PATH
linux
AR-26710-3 小时前
Linux Day31——实操启停服务改端口重启
linux·运维
叼烟扛炮3 小时前
Linux 学习笔记(五十八):IO 多路复用封神——epoll 底层原理揭秘
linux·运维·服务器·网络·笔记·学习·php
叼烟扛炮4 小时前
Linux 学习笔记(五十一):数据链路层与 ARP 协议——局域网寻址与黑客骗局
linux·网络·网络协议·php·tcpdump
Zwawa4 小时前
两根线怎么挂住一堆设备:I2C 协议原理
c语言·单片机·嵌入式
星恒随风4 小时前
Linux网络编程:彻底理解IO多路复用select!从fd_set位图、读写就绪到手写TCP多客户端字典服务器
linux·服务器·网络
陈布衣5 小时前
MySQL(1)_MySQL 5.7.21 Linux 安装笔记
linux·笔记·mysql
武子康6 小时前
h3.c 的两个权重槽,怎样把内存压力换成 SSD 等待
c语言·人工智能·agent