问题标签 [c-standard-library]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - C 标准库中的头文件可以包含另一个头文件吗?
我依稀记得一条规则,“C 标准库的头文件不得包含 C 标准库的任何其他头文件,除非特别允许”。但奇怪的是,我在 C11 中找不到这样的规则。我本来希望它出现在 7.1.2“标准标题”中。
- C中有这样的规则吗?
- POSIX中有这样的规则吗?
- 在任何其他标准中是否有这样的规则?
c - 为什么 Newlib C 标准库实现的 strtod() 和 strtof() 使用动态内存分配?
Newlib 是一个用于嵌入式系统的 C 标准库实现(很大程度上受 BSD libc 的启发)。
显然,字符串到浮点的转换函数 ( strtod
, strtof
) 通过调用一个名为 的函数来使用动态内存分配,该函数Balloc
调用_calloc_r
which 调用_malloc_r
。
为什么?
我试图查看在线可用的源代码,但我无法理解它。
我在反汇编中找到了对的调用,_Balloc
并尝试了许多不同的输入(字符串)来尝试触发它被调用,但我没有设法调用它。(我无法在 C 源代码中跟踪程序,因为该库是经过大量优化的预编译(共享库)。)
我需要使用一个充满调用strtod
和其他功能的库,所以我不能轻易消除这些函数。我在微控制器上没有堆,我不想在微控制器上有堆,我什至没有为我实现的_sbrk
功能(最终负责从堆中分配内存) ...
我现在只有一个存根,_sbrk
如果它被调用,它只会触发一个硬故障,这样链接器就不会失败。但这显然不是很好。
所以我想知道,为什么以及何时(什么样的输入)会调用 Balloc。也许我可以证明这种类型的输入在我的情况下是不可能的,所以存根将是一个可制裁的黑客。
这是strtod.c:https ://www.codepile.net/pile/JZVLj6yQ
编辑:
_strtod_l() (这是由 strtod 包装的):
c++ - 将整个标准库链接到每个 C/C++ 文件空间是否有效?
让整个标准库或任何其他库已经编译并准备好链接以形成可执行文件是一个不错的功能,它使编译速度更快,但据我所知,即使只有几个函数,整个库也是链接的它被使用。
因此,例如在我的机器上,以下代码在编译为目标代码时为 1.6 kB,但当我将其链接到标准库时,它几乎变为 17 kB。
是否有任何其他方法可以仅重新编译标准库(或任何其他库)中为使程序更节省空间所必需的部分?
抱歉,如果已经问过这个问题,我用谷歌搜索了它,但找不到任何答案。
c - 比较两个具有不同 int 值的 bool
此代码打印They are equal
- 这怎么可能发生?无论我为它们分配什么,变量
a
和赋值中b
的值是否都被填充?0x1
或者也许是==
被黑客入侵来处理bool
s 的? - 这种行为是否可以跨 C 标准库实现和编译器移植?
- 在引入 之前,在逻辑上比较两个
bool
/的正确方法是什么?int
stdbool.h
c - QNAN 传入 C 标准库函数(例如 llrintf):不清楚是否引发 FP 异常
NAN
来自的宏math.h
是安静的 NAN:
ISO/IEC 9899:2011 (E)(强调):
宏
南
当且仅当实现支持浮点类型的安静 NaN 时才定义。它扩展为表示安静 NaN的 float 类型的常量表达式。
安静的 NaN 通常不会导致引发 FP 异常。例子:
- ISO/IEC 9899:2011 (E)(强调):
5.2.4.2.2 浮动类型的特点<float.h>
3 一个安静的 NaN在几乎所有算术运算中传播,而不会引发浮点异常;当作为算术操作数出现时,信号 NaN 通常会引发浮点异常。
- IEEE 754-2008(已添加重点):
5.11 比较谓词的细节 明确考虑安静 NaN操作数可能性的程序可以使用表 5.3 中的无序安静谓词,它们不会发出这种无效操作异常的信号。
然而:
llrintf()
既不是算术运算,也不是表 5.3 中的无序安静谓词。因此,5.2.4.2.2.3
和5.11
不适用。7.12.9.5 The lrint and llrint functions
(例如)没有说明如果输入是安静的 NaN 是否引发 FP 异常。
初步结论:由于一般做法“安静的 NaN 不会导致引发 FP 异常”,因此可以得出结论,如果输入是安静的 NaN,则lrint
andllrint
函数不应导致引发 FP 异常。
实践:
代码(t125.c):
调用:
llrintf
问题:如果输入是安静的 NaN ,有人可以澄清围绕 C 标准库函数(例如)引发 FP 异常的情况/行为吗?
c - Linux - 功能测试宏和动态链接
C 标准库包含一个方法 strerror_r ( https://linux.die.net/man/3/strerror_r )。
根据编译时定义的“功能测试宏”,以及编译与 GNU 标准头文件,包含两个定义之一:
int strerror_r(int errnum, char buf, size_t buflen); / XSI 兼容 */
char *strerror_r(int errnum, char buf, size_t buflen); / GNU 特定 */
如果满足以下条件,则提供符合 XSI 的 strerror_r() 版本: (_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600) && !_GNU_SOURCE 否则,提供特定于 GNU 的版本。
假设我正在动态链接我的应用程序与标准库,链接器如何正确链接与函数的正确定义?
java - 查找标准库函数背后的算法
我一直想知道如何访问著名的 C(或任何其他语言)函数背后的算法,例如 printf()、scanf()、isdigit() 等。有这些的官方存储库吗?或者,一旦您在您的电脑中安装了语言库,有什么方法可以访问它们?
PS - 命名的功能仅仅是代表性的。我想以最流行的语言访问标准库函数背后的算法。
c - 将值打印到控制台,避免使用标准库
我面临着在不使用任何库的情况下打印(在控制台中)一个值的问题。我试图通过 main 函数的返回值来做到这一点,但似乎没有办法在不使用 printf() 的情况下在控制台中显示函数的返回值。我正在寻找一条建议,所以请随意“集思广益”。欢迎任何想法,希望你能帮助我,并在手前谢谢你。
c - 在 C 程序中,如果我从 /usr/include 的头文件中调用函数,究竟会发生什么?
C 库函数的头文件可以在 /usr/include 下找到。然而,实际的源文件似乎并不简单地位于文件系统中的任何位置。
那么,如果我在 C 程序中从 /usr/include 的头文件中调用函数,究竟会发生什么?