没有C标准库的C程序。如何?

没有C标准库的C程序。如何?,c,C,到目前为止,我所看到的所有C语言软件都广泛使用了所谓的“C标准库”,这是一个属于C标准本身的软件(或者实际上就是)。所以,不管主持人怎么想,这不是一本书,也不是一个商业软件。 它是一个基本的软件库,包含了诸如malloc()、printf()和strcpy()之类的实现,通常与所有系统捆绑在一起 现在,我需要在不使用该库的情况下用C语言编写一些软件,因为它在该环境中既不可用也不可行。 但我仍然需要读写文件和套接字 任何关于类似问题或环境的想法或指针?严格来说,一个不使用标准库的便携式(托管)C9

到目前为止,我所看到的所有C语言软件都广泛使用了所谓的“C标准库”,这是一个属于C标准本身的软件(或者实际上就是)。所以,不管主持人怎么想,这不是一本书,也不是一个商业软件。 它是一个基本的软件库,包含了诸如
malloc()
printf()
strcpy()
之类的实现,通常与所有系统捆绑在一起

现在,我需要在不使用该库的情况下用C语言编写一些软件,因为它在该环境中既不可用也不可行。 但我仍然需要读写文件和套接字

任何关于类似问题或环境的想法或指针?

严格来说,一个不使用标准库的便携式(托管)C99程序甚至无法进行任何输入/输出,或者可能产生任何明显的副作用。您甚至无法在堆中分配任何数据(比如
malloc
does)。顺便说一句,任何C99托管的实现都需要libc;您需要一个独立的C库(根据定义,它是“特定于实现的”;实际上,它可以以特定于实现的方式使用特定于操作系统的服务。另请参阅)

在旧的Linux(以及IIRC、SVR4,例如Sunos5)上,曾经有一些只与。好吧,它已经被弃用了,我找不到了

一些库(如GTK,…)提供了相当于大多数标准C库函数的功能(但它们需要一些libc,即托管POSIX系统)

<>注意,您可能会考虑使用和删除您不希望从中得到的函数。您也可以考虑使用一些LIBC提供标准的子集,例如。另请参见上的wikipage

顺便说一句,对于任何不使用libc的用户和Linux应用程序,在用C编写代码时可能会遇到问题(例如,因为)

奇怪的是,我今天甚至不能说出一种不使用C的自由软件语言。原则上这是可能的(例如,在Linux上编译为只调用系统调用),但我不知道类似的事情

但是,请注意(至少在Linux上),如果您编写一个静态链接的二进制代码,而该二进制代码不调用任何标准C函数,那么该二进制代码将只占用libc的一小部分(可以从crt0访问)

一些标准库设施(如或…)通常需要一些编译器魔法(甚至
malloc
printf
free
do with recent),或者至少从中获益。一些标准库函数不能在可移植C中实现

如果使用
gcc
请不要忘记在这种情况下
gcc
-f重建
选项。看

参考,C11标准(草案)几乎与ISO标准相似,或接近C20标准。另请参见和此。独立开源应用程序的示例包括Linux,但在或上还有许多其他应用程序,在或上也有提及。我建议下载他们的源代码并研究它以获得灵感


NB:您可以认为C99语言有两种方言:托管C,包含标准的LBC函数,如<代码> fPrPtf,<代码> MalOC 等。并以

main
开头。。。独立的C不包含它们(但包含
setjmp
等),并且没有起始约定。

如果您不喜欢
FILE*
,则使用内核的I/O调用。C库的要点是引入可移植性和通用API层。您试图通过使用替代库来实现什么?标准C库是所有C实现中唯一一个标准的库。你为什么要问这个问题?虽然这个问题现在的措辞是这样的,但这个问题显然是离题的(现在就这样结束了),每个有头脑的有抱负的C程序员都应该想到这个想法。因此,反对票的数量和问你为什么要问的问题有点。。。令人失望的但是你仍然得到了一个很好的答案:-)C库是C程序和操作系统之间的一层,因此也以一定的成本推动了某种范式。标准C库就是其中之一。我对可移植性不感兴趣,但对效率和替代范例等其他方面感兴趣。因为每个托管实现都需要提供一个标准C库,所以替代者可以依赖它。您可以将C仅仅用作“高级程序集”。如果你有另一种与操作系统交互的方式,你就不需要StdLibC。@恩佐:如果你想到独立的C,你是对的。托管的标准C99需要像
malloc
setjmp
fprintf
…Basile这样的函数,看起来我的问题的答案介于“没有”和“我不知道”之间。例如,我怀疑Linux内核是否包含任何malloc、fprintf或setjmp。尽管如此,它是C。很可能是介于C99和C11之间的东西。我说的是内核中使用的库。我不介意(也没有问)C99/C11合规性。我只需要一个“库”的能力或多或少的相同功能的“C标准库”。我会有问题吗?那将是我的工作!