当前位置: 首页 > ops >正文

C语言常见的预定符号常量

C语言常见的预定符号常量

C 语言提供了丰富的预定义符号常量,分布在不同头文件中,用于获取编译信息、数值范围、浮点特性等关键信息。以下是常见预定义符号常量的分类总结:

一、预定义宏(编译时信息)

由编译器自动定义,用于获取编译过程中的元信息(均以双下划线开头和结尾)。

常量名描述示例值
LINE当前代码行号(十进制整数常量)42(表示第 42 行)
FILE当前源文件名(字符串常量)"main.c"
DATE编译日期(格式:Mmm dd yyyy)"Jul 22 2025"
TIME编译时间(格式:hh:mm:ss)"19:58:00"
STDC编译器是否符合 ISO C 标准(1表示符合)1(符合时)
STDC_VERSIONC 标准版本(如 C99 为199901L)199901L(C99 标准)
STDC_HOSTED是否为宿主环境(1= 宿主,0= 独立环境)1(运行在操作系统时)
STDC_IEC_559浮点数是否符合 IEC 60559(IEEE 754)标准1(符合时)
STDC_ISO_10646wchar_t是否符合 ISO 10646 标准201906L(2019 年修订版)

二、整数类型范围(limits.h)

定义各整数类型的最小、最大值,避免数值溢出。

常量名描述典型值(32 位系统)
CHAR_BITchar的位数8(字节通常为 8 位)
CHAR_MINchar最小值-128(有符号)或0
CHAR_MAXchar最大值127(有符号)或255
SCHAR_MINsigned char最小值-128
SCHAR_MAXsigned char最大值127
UCHAR_MAXunsigned char最大值255
SHRT_MINshort最小值-32768
SHRT_MAXshort最大值32767
USHRT_MAXunsigned short最大值65535
INT_MINint最小值-2147483648
INT_MAXint最大值2147483647
UINT_MAXunsigned int最大值4294967295
LONG_MINlong最小值-2147483648(32 位)
LONG_MAXlong最大值2147483647(32 位)
ULONG_MAXunsigned long最大值4294967295(32 位)
LLONG_MINlong long最小值-9223372036854775808
LLONG_MAXlong long最大值9223372036854775807
ULLONG_MAXunsigned long long最大值18446744073709551615

三、浮点类型特性(float.h)

定义浮点数的精度、范围等特性,帮助处理浮点运算误差。

常量名描述典型值(基于 IEEE 754)
FLT_RADIX浮点数基数(通常为 2,二进制)2
FLT_EPSILONfloat最小正数(1.0 + ε ≠ 1.0)1.19209290e-07
FLT_DIGfloat有效数字位数6(约 6 位十进制精度)
FLT_MINfloat最小正值(非零)1.17549435e-38
FLT_MAXfloat最大值3.40282347e+38
FLT_MIN_EXPfloat最小指数(以 2 为底)-125
FLT_MAX_EXPfloat最大指数(以 2 为底)128
FLT_MANT_DIGfloat尾数位数(二进制)24(单精度 23 位 + 隐含位)
DBL_EPSILONdouble最小正数2.2204460492503131e-16
DBL_DIGdouble有效数字位数15(约 15 位十进制精度)
DBL_MINdouble最小正值2.2250738585072014e-308
DBL_MAXdouble最大值1.7976931348623157e+308
DBL_MANT_DIGdouble尾数位数53(双精度 52 位 + 隐含位)
LDBL_*系列long double特性(依平台而定)如LDBL_DIG=18(18 位精度)

四、其他常见符号常量

在标准库中定义的通用常量,简化代码编写。

常量名头文件描述典型值
NULLstddef.h空指针常量(void *)0
EOFstdio.h文件结束标志-1
EXIT_SUCCESSstdlib.h程序成功退出代码0
EXIT_FAILUREstdlib.h程序失败退出代码1

五、应用场景示例

  1. 调试与日志

printf("Error at %s:%d\n", __FILE__, __LINE__);

输出当前出错的文件名和行号,便于定位问题。

  1. 数值范围检查

int num = 2147483648;if (num > INT_MAX) {printf("数值溢出!\n");}

避免整数溢出导致未定义行为。

  1. 浮点精度处理

double a = 0.1, b = 0.2, sum = 0.3;if (fabs((a + b)-sum) > DBL_EPSILON) {printf("浮点运算存在误差\n");}

通过DBL_EPSILON判断浮点运算是否在误差允许范围内。

  1. 跨平台兼容性

#if __STDC_VERSION__ >= 199901L// 使用C99特性long long val = 1234567890123LL;#else// 兼容旧标准long val = 1234567890L;#endif

根据STDC_VERSION适配不同 C 标准的特性。

总结

C 语言的预定义符号常量覆盖了编译信息数值范围浮点特性等关键维度,是编写健壮、可移植代码的重要工具。合理利用这些常量,可有效避免溢出、精度丢失等问题,同时提升代码的可读性和跨平台兼容性。实际开发中,应根据需求结合对应头文件(如limits.h、float.h)使用这些常量。

http://www.xdnf.cn/news/16065.html

相关文章:

  • LeetCode 热题100:160.相交链表
  • 神经网络和机器学习的一些基本概念
  • 【Node.js】使用ts-node运行ts文件时报错: TypeError: Unknown file extension “.ts“ for ts 文件
  • 电子设计大赛【摄像头循迹】讲解
  • SpringMVC快速入门之请求与响应
  • 【大模型文生图、文生音频实战Demo】基于Spring AI Alibaba和阿里百炼大模型实现文生图、文生视频
  • WebGIS 中常用公共插件
  • 1688 Agent Russia 丨俄罗斯1688跨境代采系统搭建指南
  • 前端开发 React 状态优化
  • 基于深度学习的图像分类:使用预训练模型进行迁移学习
  • 原创-基于 PHP 和 MySQL 的证书管理系统 第三版
  • Neo4j 框架 初步简单使用(基础增删改查)
  • Neo4j如何修改用户密码?
  • 【Java】Reflection反射(代理模式)
  • Redis能完全保证数据不丢失吗?
  • Spring Cloud Alibaba Sentinel 基本工作原理源码阅读
  • BQ4050RSMR DIOTEC高精度锂电池保护与电量监测芯片 集成保护+计量+通信
  • AWS Lambda IoT数据处理异常深度分析:从告警到根因的完整排查之路
  • 快手DHPS:国内首个实现基于RDMA 通信的可负载均衡高性能服务架构!
  • 设计汽车集群电源
  • 前端资源缓存优化案例:深入探讨 Nginx 配置中的 Cache-Control 头部叠加问题
  • 一次Oracle集群脑裂问题分析处理
  • 耐达讯自动化EtherCAT转RS232:示波器连接的“开挂秘籍”
  • pig cloud框架中引入websocket
  • Android Camera openCamera
  • Node.js 倒计时图片服务部署与 Nginx 反向代理实战总结
  • OneTwoVLA——基于π0实现类π0.5:一个模型中完成原来双系统下的慢思考、快执行,且具备自适应推理能力和自我纠错能力
  • Java 大视界 -- Java 大数据机器学习模型在电商产品销量预测与库存优化管理中的应用(359)
  • OpenCV 零基础到项目实战 | DAY 2:图像预处理全解析
  • 基于JSP的高校寝室综合管理系统/宿舍管理系统