2010-11-14 31 views
7

yo quería imprimir algo usando la función printf() en C, sin incluir stdio.h, por lo que escribió el programa como:Cómo declarar printf()?

int printf(char *, ...); 
int main(void) 
{ 
     printf("hello world\n"); 
     return 0; 
} 

Es el programa anterior correcta?

+5

Su cadena de formato deben ser 'const char *'. Podrías ubicar 'stdio.h' y leer la definición allí. ¿Por qué, por curiosidad, no quieres '#include '? – meagar

+1

¿cómo espera imprimir algo en la pantalla sin incluir stdio.h ?? Tendrás que escribir tus propias bibliotecas ... es suicida :) – sdadffdfd

+12

@bemace @Vic El hecho de incluir 'stdio.h' no vincula nada, los archivos de encabezado no funcionan de esa manera. Esta pregunta es completamente válida y funcionará perfectamente. – meagar

Respuesta

18

La declaración correcta (ISO/IEC 9899: 1999) es:

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

Pero sería más fácil y segura a solo #include <stdio.h>.

+1

@Saurabh No sé dónde aprendiste eso, pero los prototipos de función (es decir, las declaraciones) en C * siempre * terminan con punto y coma. Lo mismo es cierto en C++. –

12

Justo:

man 3 printf 

Se le dirá printf firma:

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

esta es la correcta.

+0

+1 para la referencia de la página de manual – Zeke

4

No tengo idea de por qué quieres hacer esto.

Pero debería ser const char *.

+1

'const char * restrict' –

+0

@Oli: ¿Solo char * afecta a algo? –

+1

@Charles: en C99, sí. Eso no se compilará por nada antes. –

-3
int printf(char *, ...); 

funciona bien, no sé por qué la gente te dice que Char tiene que ser una constante

+0

lea el comentario de charles en la respuesta de oli. –

0

Aquí es otra versión de la declaración:

extern int printf (__const char *__restrict __format, ...);