Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用纯c编写Hello World(不使用任何c库)?_C - Fatal编程技术网

如何用纯c编写Hello World(不使用任何c库)?

如何用纯c编写Hello World(不使用任何c库)?,c,C,我知道linux内核源代码是纯c语言的。所以我想知道,在不使用printfapi的情况下,如何用纯C编写简单的Hello,World程序 我知道linux内核源代码是纯c语言的 当然不是。Linux内核因频繁使用GCC编译器的非标准扩展而臭名昭著 所以我想知道,在不使用printfapi的情况下,如何用纯C编写简单的Hello,World程序 printf只是操作系统API函数的包装。您的意思是问如何只使用Linux API函数编写printf吗?因为“纯C”是在C标准ISO 9899中定义的,

我知道linux内核源代码是纯c语言的。所以我想知道,在不使用printfapi的情况下,如何用纯C编写简单的Hello,World程序

我知道linux内核源代码是纯c语言的

当然不是。Linux内核因频繁使用GCC编译器的非标准扩展而臭名昭著

所以我想知道,在不使用printfapi的情况下,如何用纯C编写简单的Hello,World程序


printf
只是操作系统API函数的包装。您的意思是问如何只使用Linux API函数编写printf吗?因为“纯C”是在C标准ISO 9899中定义的,它与Linux操作系统无关。

在任何操作系统的进程中运行时,您都无法直接访问硬件资源。因此,如果不要求操作系统为您打印任何内容,就无法打印任何内容

您可以使用较低级别的API,而不是
printf
,例如
write


您可以更进一步,使用正确的机器指令(取决于操作系统和体系结构)自行发出系统调用。这样你就不会使用任何库,但仍然依赖于操作系统。

这可能会让人吃惊,但是
printf
也是用“纯”C编写的。可能的副本可以使用内联汇编程序和系统调用。嗯,它是一个内核,直接处理硬件内容。内核与用户应用程序非常不同
write()
系统调用可以在汇编中使用正确的内存地址中的
int
写入,并且您会在计算机屏幕上看到一条消息<然后在内部对其进行printf()`调用。如果您自己实现这个功能,根据您的概念,它将是“纯”的。但是现在你不能在现代系统上进行DMA(据我所知)。所以,这真的是不可能的,唯一的办法就是做一个sys调用。@Khajavi:这意味着要编写一个操作系统。不,我向H2CO3解释了我的想法。我想写Hello,运行在计算机上的世界,不使用任何操作系统。当启动操作系统时,hello,world执行。@Khajavi然后您必须了解特定机器输出工作的细节。操作系统的目的是避免您必须处理平台硬件的细节。@Khajavi然后您必须从头开始编写所有内容,无论是在汇编程序中还是在为特定CPU生成代码而设计的编译器端口中。您不能为特定操作系统(如GCC for Linux)使用编译器端口。