2010-11-14 7 views
7

Je voulais imprimer quelque chose en utilisant la fonction printf() en C, sans inclure stdio.h, donc j'écrit programme:Comment déclarer printf()?

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

le programme ci-dessus est correct?

+5

Votre chaîne de format devrait être 'const char *'. Vous pouvez simplement localiser 'stdio.h' et lire la définition ici. Pourquoi, par curiosité, ne voulez-vous pas '#include '? – meagar

+1

comment vous attendez-vous à imprimer quoi que ce soit sur l'écran sans inclure stdio.h ?? Vous devrez écrire vos propres bibliothèques .. c'est suicidaire :) – sdadffdfd

+12

@bemace @Vic Le fait d'inclure 'stdio.h' ne lie rien, les fichiers d'en-tête ne fonctionnent pas de cette façon. Cette question est tout à fait valide, et fonctionnera très bien. – meagar

Répondre

18

La déclaration correcte (ISO/IEC 9899: 1999) est:

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

Mais il serait plus facile et plus sûr juste #include <stdio.h>.

+1

@Saurabh Je ne sais pas où vous avez appris cela, mais les prototypes de fonction (c'est-à-dire, les déclarations) dans C * toujours * se terminent par des points-virgules. La même chose est vraie en C++. –

12

Just:

man 3 printf 

Il vous dira la signature printf:

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

c'est la bonne.

+0

+1 pour la référence de page de manuel – Zeke

4

Je ne sais pas pourquoi vous voudriez faire ceci.

Mais il devrait être const char *.

+1

'const char * restrict' –

+0

@Oli: Seul le caractère * affecte-t-il quelque chose? –

+1

@Charles: En C99, oui. Cela ne compilera rien pour plus tôt. –

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

fonctionne très bien, je ne sais pas pourquoi les gens vous disent que l'omble doit être un const

+0

lire le commentaire de charles dans la réponse de oli. –

0

Voici une autre version de la déclaration:

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