C – 没有#include 打印到屏幕?
有没有办法在不包含情况下将
C
源文件打印到屏幕上?
这是我的情况:我被要求以编程方式处理1000个C
源文件,每个源文件在C
实现几个数字函数(这些函数应该用于内存中的数据,不管任何I / O)。 这些源文件的来源不清楚,因此,我想确保在编译和运行这些源文件时对我的机器没有任何损害。
有没有办法找出C
源文件是否有潜在危害? 我想让开发人员避免任何#include
语句,但我确实只需要printf
– 因为我希望他们在main()
包含他们的计算输出。
有任何想法吗?
当然,在源文件的顶部添加printf
原型,只要你链接到CRT库就可以使用该函数而不包括stdio.h
printf
原型
int printf ( const char * format, ... );
有没有办法找出C源文件是否有潜在危害?
不,没有。 恶意源文件可以通过定义自己的原型或使用内联汇编来完成它想要的任何事情 – #include
只是编译时的便利。
虽然它们可能比SO的格式范围大一些。 本质上,您利用C中的汇编程序调用。博客KSplice在此处涉及主题(包含代码和示例)。
我想澄清为什么我们需要printf和studio.h来使概念更清晰。 C是一种可移植的语言。 您可以为Linux,Mac OSX,Windows编译c。 在每一个中,导致输出通常归结为系统调用,或者在嵌入式系统中,直接处理帧缓冲区或Uart设备。
所以当然有可能,你想做吗? 取决于原因。 如果您针对特定平台进行编码并且没有printf(),那么您可能需要考虑直接为该平台调用系统调用/编写一些特定于平台的汇编代码。 这一切都取决于您的用例。
当然,在您的程序中放置必要的函数原型。
如果您的意思是不使用printf,那么您有几个选项 – 您可以使用fwrite,或者您可以省去流并使用write,或者您可以直接调用操作系统I / O服务,或者您可以与显示硬件通信直接或许多其他事情。
如果你想要一个更好的答案,或许解释为什么你不想包括stdio.h
这很愚蠢但仍然:
#include int main() { puts ("hi"); return 0; }
和输出:
$ gcc -o try try.c $ ./try hi