c的标准库里没有全局变量?

散修snowfield 2019-06-06 05:47:55
多个源文件包含相同的c标准库也没见重复定义啥的 看库的文档也是全都是宏 所以说是没有定义全局变量吗,那局部变量有定义吗,问的有点模糊请见谅 只是好奇标准库不用声明额外的内存空间就能实现那么多功能
...全文
88 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
散修snowfield 2019-06-06
  • 打赏
  • 举报
回复
原来如此,想简单了,我还以为标准库都是开源的...谢解疑
gouyanfen 2019-06-06
  • 打赏
  • 举报
回复
引用 楼主 qq_17607761 的回复:
多个源文件包含相同的c标准库也没见重复定义啥的 看库的文档也是全都是宏 所以说是没有定义全局变量吗,那局部变量有定义吗,问的有点模糊请见谅 只是好奇标准库不用声明额外的内存空间就能实现那么多功能
你只是想知道有没有。怎么实现的得你自己去探索,标准库也没规定要开源,只是遵循标准就可以了。 基本上都不是开源的。都是各个厂商根据自己对标准的理解实现的。 一般是提供编译好的二进制文件 就比如未公开API: extern "C" { int WINAPI MessageBoxTimeoutA(IN HWND hWnd, IN LPCSTR lpText, IN LPCSTR lpCaption, IN UINT uType, IN WORD wLanguageId, IN DWORD dwMilliseconds); int WINAPI MessageBoxTimeoutW(IN HWND hWnd, IN LPCWSTR lpText, IN LPCWSTR lpCaption, IN UINT uType, IN WORD wLanguageId, IN DWORD dwMilliseconds); }; 你只需要知道原型就可以按定义去调用,只是声明一下 我给你举的例子rand()我记得好像源码中也不是直接就用全局变量的 int *getptd()大概这样子的吧
散修snowfield 2019-06-06
  • 打赏
  • 举报
回复
既然标准库里不定义,那么他是extern来声明外部变量来用变量的?,那么extern哪里的变量呢?
散修snowfield 2019-06-06
  • 打赏
  • 举报
回复
防重复编译我知道... 不同源文件在预处理include的时候互不影响呀 ifndef 和progma once 都是对本源文件内起作用的吧
lin5161678 2019-06-06
  • 打赏
  • 举报
回复
引用 6 楼 qq_17607761 的回复:
[quote=引用 3 楼 gouyanfen的回复:]全局变量还是有的,参考rand和srand
可是我多个源文件包含stdlib这个头也没报重复定义的错呀[/quote] 有2点你没搞清楚 1. 头文件里面本来就没定义全局变量 只是一个声明 声明你随便写多少个都无所谓 2. 标准头文件有防止重复包含的代码 在一个源文件里面 多次 include 同一个头文件 只有第一次include有效
gouyanfen 2019-06-06
  • 打赏
  • 举报
回复
都包括一个头文件也不是一定会报错 #progma once了解一下 还有你去查一下我给你举例的源码实现
散修snowfield 2019-06-06
  • 打赏
  • 举报
回复
引用 3 楼 gouyanfen的回复:
全局变量还是有的,参考rand和srand
可是我多个源文件包含stdlib这个头也没报重复定义的错呀
散修snowfield 2019-06-06
  • 打赏
  • 举报
回复
可是我多个源文件包含stdlib这个头也没报重复定义的错呀
smwhotjay 2019-06-06
  • 打赏
  • 举报
回复
有的。

在 C 语言中,对于存放错误码的全局变量 errno,相信大家都不陌生。为防止和正常的返回值混淆,系统调用一般并不直接返回错误码,而是将错误码(是一个整数值,不同的值代表不同的含义)存入一个名为 errno 的全局变量中,errno 不同数值所代表的错误消息定义在 <errno.h> 文件中。如果一个系统调用或库函数调用失败,可以通过读出 errno 的值来确定问题所在,推测程序出错的原因,这也是调试程序的一个重要方法。

配合 perror 和 strerror 函数,还可以很方便地查看出错的详细信息。其中:
perror 在 <stdio.h> 中定义,用于打印错误码及其消息描述;
strerror 在 <string.h> 中定义,用于获取错误码对应的消息描述;
gouyanfen 2019-06-06
  • 打赏
  • 举报
回复
全局变量还是有的,参考rand和srand
散修snowfield 2019-06-06
  • 打赏
  • 举报
回复
引用 1 楼 636f6c696e的回复:
C语言大部分接口都是无状态的,无状态接口是不需要全局变量的
并不知道无状态是啥,好吧我去看看,谢谢回复
636f6c696e 2019-06-06
  • 打赏
  • 举报
回复
C语言大部分接口都是无状态的,无状态接口是不需要全局变量的

64,651

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧