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

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.lryc.cn/news/597759.html

相关文章:

  • spring的value注解
  • 构建高性能推荐系统:MixerService架构解析与核心实现
  • 解决uniapp 使用uview生成小程序包太大无法上传的问题
  • 构件组装中的架构失配问题:分析与解决
  • 架构师--基于常见组件的微服务场景实战
  • 压测软件JMeter安装配置以及创建桌面快捷方式(详细图解)
  • 「iOS」——KVO
  • 通用表格识别技术的应用,深刻改变人们处理表格数据的方式
  • 基于MCP架构的LLM-Agent融合—构建AI Agent的技术体系与落地实践
  • MATLAB 2024b深度学习新特性全面解析与DeepSeek大模型集成开发技术
  • 【解决vmware ubuntu不小心删boot分区,进不去系统】
  • cx_Freeze python 打包 APScheduler 定时任务异常问题解决
  • AI入门学习-Python 最主流的机器学习库Scikit-learn
  • C++11扩展 --- 并发支持库(中)
  • MST技术加持,简化桌面多屏布局
  • 力扣(LeetCode) ——轮转数组(C语言)
  • 第一层nginx访问url如何透传到第二层nginx
  • 【SQLServer】Microsoft SQL Server远程版本信息泄漏
  • Java学习---Spring及其衍生(上)
  • 分布式限流算法与组件
  • Android模块化实现方案深度分析
  • 【读代码】李沐团队开源音频大模型 Higgs Audio V2
  • 二、计算机网络技术——第4章:网络层
  • 4️⃣字典(dict)速查表
  • 三大论坛联动,2025合成生物学盛会助力生物制造高质量发展
  • 半导体 CIM(计算机集成制造)系统
  • Hexo - 免费搭建个人博客02 - 创建个人博客
  • 智能办公如何创建e9流程
  • ubuntu24的一些小问题
  • Spring事务注解详解:确保你的应用数据的一致性