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(一个字的大小)相匹配。这对于确定可以存储在指针中的地址空间大小以及进行适当的内存分配和数据结构设计非常重要。
相关推荐
伊卡洛斯az15 小时前
vim的跳转看头文件与分屏
linux·编辑器·vim
散峰而望15 小时前
基本魔法语言函数(一)(C语言)
c语言·开发语言·编辑器·github
paopao_wu15 小时前
DeepSeek-OCR实战(01):基础运行环境搭建-Ubuntu
linux·人工智能·ubuntu·ai·ocr
betazhou15 小时前
基于Linux环境使用ogg19版本从oracle 19c ADG备库远程同步数据
linux·运维·oracle·goldengate·adg·远程抽取
路由侠内网穿透.15 小时前
本地部署消息代理软件 RabbitMQ 并实现外部访问( Windows 版本 )
linux·运维·服务器·远程工作
蒙奇D索大16 小时前
【算法】递归算法实战:汉诺塔问题详解与代码实现
c语言·考研·算法·面试·改行学it
孙同学_16 小时前
【Linux篇】System V IPC详解:共享内存、消息队列与信号量
linux·服务器
铭哥的编程日记16 小时前
【Linux网络】传输层协议TCP
linux·网络·tcp/ip
它说我会飞耶16 小时前
开机视频动画
linux
大聪明-PLUS17 小时前
Linux 上的 GitOps:使用 Git 进行无缝基础设施管理
linux·嵌入式·arm·smarc