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(一个字的大小)相匹配。这对于确定可以存储在指针中的地址空间大小以及进行适当的内存分配和数据结构设计非常重要。
相关推荐
bugtraq20212 分钟前
为什么.NET的System.IO.Compression无法解压zlib流
linux·运维·服务器
咖啡教室6 分钟前
每日一个计算机小知识:Linux
linux·后端
dllxhcjla1 小时前
07 标识符命名规则
c语言
江公望2 小时前
Qt的QT_QPA_EGLFS_INTEGRATION环境变量浅解
linux·qt·qml
杨福瑞2 小时前
C语言数据结构:算法复杂度(2)
c语言·开发语言·数据结构
DuHz2 小时前
C程序中的循环语句
c语言·嵌入式硬件·软件工程
YuCaiH2 小时前
网络编程的基础知识
linux·笔记·嵌入式·网络通信
Siren_dream2 小时前
在VMware上运行Linux(我选择的是Ubuntu)
linux·运维·ubuntu
☆璇3 小时前
【Linux】Socket编程UDP
linux·网络·udp
一念&3 小时前
每日一个C语言知识:C 指针
c语言·开发语言