C – Imprimir en pantalla sin #incluir ?

¿Hay alguna forma de imprimir un archivo fuente en C en la pantalla sin incluir ?

Esta es mi situación: se me pidió que manejara programáticamente archivos fuente 1000 C que implementarán varias funciones numéricas en C (se supone que estas funciones funcionan en datos que están en la memoria , sin ninguna E / S). El origen de estos archivos de origen no está claro y, por lo tanto, me gustaría asegurarme de que no habrá daños en mi máquina cuando compile y ejecute estos archivos de origen.

¿Hay alguna manera de averiguar si un archivo fuente en C es potencialmente dañino? Pensé en pedirles a los desarrolladores que eviten cualquier #include declaraciones, pero solo necesito printf , ya que me gustaría que incluyeran una salida de sus cálculos en main() .

¿Algunas ideas?

Claro, agregue el prototipo para printf en la parte superior de su archivo fuente, siempre que esté vinculado a las bibliotecas CRT, puede usar la función sin incluir stdio.h

prototipo de printf

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

¿Hay alguna manera de averiguar si un archivo fuente en C es potencialmente dañino?

No, no hay ninguno. Un archivo fuente malintencionado podría hacer lo que quisiera al definir sus propios prototipos o al usar un ensamblaje en línea. #include es solo una conveniencia en tiempo de comstackción.

Hay, aunque probablemente sean un poco más grandes que el scope del formato de SO. En esencia, usted aprovecha las llamadas de ensamblador en C. El blog KSplice toca el tema (con código y ejemplos) aquí .

Me gustaría aclarar por qué necesitamos printf y studio.h para aclarar el concepto. C es un lenguaje portátil. Puedes comstackr c para Linux, Mac OSX, Windows. En cada uno, la salida causada normalmente se reduce a una llamada al sistema, o en sistemas integrados, que tratan directamente con un buffer de cuadros o un dispositivo Uart.

Así que por supuesto es posible, ¿quieres hacerlo? Depende de por qué. Si está codificando en una plataforma específica y no tiene printf (), entonces es posible que deba invocar una llamada al sistema directamente para esa plataforma o escribir algún código de ensamblaje específico de la plataforma. Todo depende de tu caso de uso.

Claro, pon los prototipos de funciones necesarias en tu progtwig.

Si quiere decir que no está utilizando printf, tiene varias opciones: puede usar fwrite, puede prescindir de flujos y escritura, o puede invocar servicios de E / S del sistema operativo directamente, o quizás podría hablar con el hardware de la pantalla. directamente, o muchas otras cosas.

Si desea una respuesta mejor, quizás explique por qué no quiere incluir stdio.h

Esto es tonto pero aún así:

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

y salida:

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