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.pswp.cn/web/90169.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/90169.shtml
英文地址,请注明出处:http://en.pswp.cn/web/90169.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【2025】使用vue构建一个漂亮的天气卡片

1. 核心框架:Vue Vue 以其轻量、易用、响应式数据绑定的特点,非常适合快速构建这类小型界面组件。即使是直接通过 CDN 引入,也能高效开发,降低项目复杂度,无需搭建完整工程化环境 。 2. 网络请求:Axios 用于…

Ruby 命令行选项详解

Ruby 命令行选项详解 引言 Ruby 是一种广泛使用的编程语言,它以其简洁、优雅和强大的功能而闻名。在 Ruby 的使用过程中,命令行界面(CLI)提供了丰富的选项,可以帮助开发者更高效地与 Ruby 环境交互。本文将详细解析 Ruby 命令行选项,旨在帮助开发者更好地利用这些工具。…

NLP复习

1.文本预处理 分词,词性标注,命名实体识别 1.1分词:jieba jieba.lcut(content,cut_alltrue) 全模式 jieba.lcut(content,cut_allfalse) 精确模式 jieba.lcut_for_search(content) 搜索引擎模式 lcut和cut的区别:cut返回的是一个生成器Generator,lcut返回的是列表 生成器调…

WEB :实战演练——从零实现一个交互轮播图(附源码)

文章目录 一、轮播图整体功能规划二、HTML结构深度解析三、CSS样式实现细节1. 定位系统详解2. 显示/隐藏机制3. 按钮交互效果实现4. 纯CSS箭头实现5. 指示器:当前位置可视化 四、JavaScript逻辑深入解析1. 核心变量与DOM获取2. 图片切换函数(核心逻辑&am…

MCP 协议详细分析一 initialize ping tools/list tools/call

MCP 协议详细分析一 (initialize ping tools/list tools/call) 本节基于 实现一个 java 的mcp client 调用的 一个python 的mcp server 的日志,完整展示一次典型的 MCP Java SDK 通信流程、工具调用、通知机制与日志记录,仅包含 echo-simple…

SLAM学习资料记录

ORB_SLAM2 创建自己的数据集(还未使用) 【SLAM实战篇】Ubuntu 20.04版本(OpenCV版本4.5.3)对于ORB-SLAM2安装运行,代码编译,自己的数据集构造_ubuntu20.04 安装运行orb_slam2算法-CSDN博客 卡尔曼滤波数据…

用Phi-3 Mini微调实现英文到尤达语翻译

用Phi-3 Mini微调实现英文到尤达语翻译 引言 本文将带你快速上手大模型微调实践——以微软的Phi-3 Mini 4K Instruct模型为例,教你如何将其微调为一个能把英文翻译成"尤达语"(《星球大战》中尤达大师的独特说话风格)的模型。这是一…

AI助力,轻松实现人声分离伴奏提取

亲爱的小伙伴们!前段时间,有一位同事家的可爱小孩参加了一场英语演讲比赛。同事找到我,希望我能帮个忙,把讲视频中的人声去掉,只提取出其中相应的伴奏。今天,我就来和大家分享一下究竟如何实现从 MP4 视频中…

第1章第2章笔记

OSI参考模型---开放式系统互联模型---OSI/RM ISO--->国际标准化组织;特点:先有模型,在又协议。 OSI七层参考模型:应用层 --- 提供网络服务;自然语言-->编码表示层 --- 对数据的处理;格式化&#xff0…

图的BFS和DFS

一,图的遍历逻辑1.之前我们学了图的存储,可以邻接表存和邻接矩阵存。现在我们要学习图的遍历操作和树类似可以分为深度遍历和广度遍历,而深度遍历也是用递归实现,广度遍历是用队列实现2.深度遍历(DFS)a.确定起点b.找到一条边按顺时…

WWDC 25 给自定义 SwiftUI 视图穿上“玻璃外衣”:最新 Liquid Glass 皮肤详解

引子 各位 iOS 足球体育健儿们,且听我一言!想当年在《少林足球》里,阿星一句“做人如果没梦想,那跟咸鱼有什么分别啊?”点燃了多少人的江湖梦。 如今在 SwiftUI 江湖里,Apple 于 WWDC 25 推出的 Liquid Gl…

Day01_C++

01.思维导图02.方法一&#xff1a;#include <iostream> #include <cstring> #include <iostream> using namespace std; class mystring { private:char* buf;int len;public:mystring(const char* str);void copy(const char* ptr);void copy(mystring ptr)…

C语言学习(days09)

二维数组的定义与特性二维数组的声明格式为&#xff1a;类型说明符 数组名[表达式1][表达式2];[下标1]表示行索引&#xff0c;[下标2]表示列索引。二维数组可视为由多个一维数组组成&#xff0c;a[0]表示第0行的首地址&#xff08;即一维数组地址&#xff09;a[0][0]表示第0的第…

WIFI路由器长期不重启,手机连接时提示无IP分配

今天在公司&#xff0c;突然发现手机连不上公司WIFI。每次链接&#xff0c;提示无IP分析。我以为是我手机出问题了&#xff0c;想复位一下。后来一想万一复位还是不灵&#xff0c;怎么办&#xff1f;同事认为是路由器没有重启的原因。于是找到路由器&#xff0c;重启&#xff0…

【前沿技术动态】【AI总结】RustFS:从 0 到 1 打造下一代分布式对象存储

目录1 引言&#xff1a;为什么我们又需要一个新的对象存储2 RustFS 全景速览3 技术架构深度拆解3.1 整体拓扑3.2 关键数据结构&#xff08;rust 伪代码&#xff09;3.3 读写路径&#xff08;写放大 < 1.1&#xff09;4 核心源码导读4.1 关键函数跟踪4.2 一段最小可复现示例5…

ImageNet1K数据集的下载解压与处理

前言 博主因为这个数据集踩了好多坑&#xff0c;浪费了好几天时间&#xff0c;最近终于找到了高效的办法&#xff0c;写此篇文章来记录具体操作方法&#xff0c;也希望可以帮助到有需要的人。&#xff08;主要是在云服务器是使用&#xff09; 下载数据集 一共下载三个文件&…

OkHttp 与 Room 结合使用:构建高效的 Android 本地缓存策略

前言在现代 Android 应用开发中&#xff0c;网络请求与本地数据持久化是两大核心功能。OkHttp 作为强大的网络请求库&#xff0c;与 Jetpack Room 持久化库的结合使用&#xff0c;可以创建高效的数据缓存策略&#xff0c;提升应用性能和用户体验。本文将详细介绍如何将这两者完…

Nacos中feign.FeignException$BadGateway: [502 Bad Gateway]

Nacos中feign.FeignException$BadGateway: [502 Bad Gateway] 文章目录Nacos中feign.FeignException$BadGateway: [502 Bad Gateway]背景原因背景 Mac本地运行Nacos微服务项目&#xff0c;调用服务失败 原因 关闭本地代理clash或者其他&#xff0c;windows没发现问题&#x…

基于deepseek的LORA微调

LORA微调&#xff1a; 核心是&#xff1a;低秩转换&#xff0c;减少参数。冻结大部分&#xff0c;调节部分模块(注意力模块的Wq&#xff0c;Wk&#xff0c;Wv)。 调整过后得到一个lora.safetensors, 内部记录了(detail W: 即部分修改的W)。推理使用原权重和lora权重。 具体操…

Linux运维新手的修炼手扎之第22天

Tomcat服务1 java项目部署方式&#xff1a;war包部署、jar包部署、源代码部署2 Ubuntu环境部署Java - openjdk[熟练]:#安装软件rootubuntu24-13:~# apt update; apt list openjdk*rootubuntu24-13:~# apt install openjdk-11-jdk -y#检测效果rootubuntu24-13:~# whereis javaja…