C - 没有#include <stdio.h>打印到屏幕?</stdio.h>

时间:2011-07-24 21:48:59

标签: c

有没有办法让C源文件打印到屏幕而不包括<stdio.h>

这是我的情况:我被要求以编程方式处理1000个C源文件,这些文件将在C中实现几个数值函数(这些函数应该用于数据那是 在内存中 ,没有任何I / O)。这些源文件的来源不明确,因此,我想确保在编译和编译时对我的机器没有任何损害。运行这些源文件。

有没有办法找出C源文件是否有潜在危害?我想让开发人员避免任何#include语句,但我确实只需要printf - 因为我希望他们在main()中包含计算结果。< / p>

有什么想法吗?

6 个答案:

答案 0 :(得分:3)

当然,在源文件的顶部添加printf原型,只要您链接到CRT库,就可以使用该功能而不包括stdio.h

printf原型

int printf ( const char * format, ... );

答案 1 :(得分:3)

  

有没有办法找出C源文件是否有潜在危害?

不,没有。恶意源文件可以通过定义自己的原型或使用内联汇编来完成它想要的任何操作 - #include只是编译时的便利。

答案 2 :(得分:1)

虽然它们可能比SO的格式范围大一些。实质上,您在C中利用汇编程序调用。博客KSplice触及主题(包含代码和示例)here

答案 3 :(得分:1)

我想澄清为什么我们需要printf和studio.h来使概念更清晰。 C是一种可移植的语言。您可以为Linux,Mac OSX,Windows编译c。在每一个中,导致输出通常归结为系统调用,或者在嵌入式系统中,直接处理帧缓冲区或Uart设备。

所以当然有可能,你想做吗?取决于原因。如果您针对特定平台进行编码并且没有printf(),那么您可能需要考虑直接为该平台调用系统调用/编写一些特定于平台的汇编代码。这一切都取决于你的用例。

答案 4 :(得分:0)

当然,将必要的功能原型放入您的程序中。

如果您的意思是不使用printf,那么您有几个选项 - 您可以使用fwrite,或者您可以省去流并使用write,或者您可以直接调用操作系统I / O服务,或者您可以与之交谈直接显示硬件,或许多其他事情。

如果您想要更好的答案,或许可以解释为什么不想包含stdio.h

答案 5 :(得分:-1)

这很愚蠢但仍然:

#include <string.h>

int main() {
    puts ("hi");
return 0;
}

和输出:

$ gcc -o try try.c 
$ ./try 
hi