gpt4 book ai didi

c - stdio 文件描述符(stdin、stdout、stderr)是否仅通过#include'ing 打开?

转载 作者:IT王子 更新时间:2023-10-29 00:52:48 26 4
gpt4 key购买 nike

在 C 语言中将整数转换为字符串时,我对包含 stdio.h 感到有点恼火——这不会使二进制文件因不必要的文件描述符和其他代码而膨胀吗?或者仅当您在代码中使用标准 io 文件描述符 stdout、stdin 或 stderr 时才打开流,例如 printfscanffprintf?如果我的代码只使用 snprintf(3) 可能还可以?

我拥有的最接近的现成解决方案是将整数转换为 strfromd(3) 的 double float ,格式字符串不超过小数点。

bhuwansahniHow to convert integer to string in C? 中提供了一个很好的自己动手解决方案

我不知道如何使用(链接无效)itoa_itoa_fitoa_word,尽管 _fitoa_word 确实显示为带有 nm/lib64/libc6.so.6 的函数。

最佳答案

即使您不包含 stdio.h,它们也会打开。它们是程序的标准流,在程序运行时已经打开。

程序在实际执行之前需要进行一些初始化。这包括加载符号表、分配内存、初始化静态数据和链接动态库等。此时打开标准流。然后控制转到程序中的 main() 函数并开始执行。

对于第二个问题,标准 IO 不会使您的程序膨胀,因为您的程序几乎总是与标准 C 库 libc 链接,并且通常是动态链接(因此它不会添加到你的可执行文件的大小)。

是的,如果你不使用它们也没关系。您可以仅使用诸如 snprintf() 之类的东西来完成这一切,但标准流仍将打开。使用与否并不重要。

谢谢 Paul Ogilvie

关于c - stdio 文件描述符(stdin、stdout、stderr)是否仅通过#include'ing <stdio.h> 打开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47509284/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com