最终如何定义所有c ++函数?

时间:2014-05-04 19:28:15

标签: c++ operating-system

例如,我们知道printf()函数在控制台屏幕中显示文本。但是如何定义printf()之类的函数。是否可以编写代码来显示文本而不使用任何库文件?是用于定义这些函数的汇编代码?

4 个答案:

答案 0 :(得分:2)

我们可以更轻松地谈论C,因为它是一种非常基本的语言,而且比asm更高一点。
答案是:系统调用 你可能想知道:为什么?语言不能做的事情。而I / O就是其中之一。 I / O流被拥有"由操作系统。它处理它们 操作系统允许您使用它们,但您必须始终依赖它。

系统调用非常基本:例如,没有格式字符串或其他内容 您还需要考虑系统调用是否依赖于操作系统。的Windows'那些与Linux的不同。

puts implementation in the glibc

答案 1 :(得分:1)

由于每个库/代码都在内部使用内核提供的操作系统调用。 因此,可以在不使用c库的情况下编写自己的printf函数。

如果您想了解这些功能在内部是如何工作的,您可以进行assembly language编程。

答案 2 :(得分:1)

  

是否可以在不使用任何库文件的情况下编写显示文本的代码?

是的,当然是。您可以直接驱动显示设备,而无需使用标准功能。

  

是用于定义这些函数的汇编代码吗?

不一定,它可以在c或c ++中完全完成,没有一行汇编代码。

最后,它取决于您用于编译程序的实际工具链,以及随附的标准库,以及如何定义这些函数。有一些低级功能,您可以'覆盖' 为您的具体环境。

通用绑定是将标准输出接口(由printf()使用)映射到MCU的其中一个UART接口。

对于GCC工具链中常用的newlib(c),这里有一些参考资料,可以选择移植到任何环境:'What steps do I need to do to port newlib to a new platform?'

答案 3 :(得分:0)

  

是否可以在不使用任何库文件的情况下编写显示文本的代码?

当然,既然他们也做过了,他们还没有?

您需要将内核连接起来编写类似的低级库,尽管对于每个案例并不是绝对必要的。

  

是用于定义这些函数的汇编代码吗?

是的,部分地,使用SIMD等和其他聪明的技巧来处理性能关键部件等。