2010-11-14 16 views
7

chciałem coś wydrukować przy użyciu funkcji printf() w C, bez uwzględniania stdio.h, więc napisałem program jako:Jak zadeklarować printf()?

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

Czy Powyższy program jest prawidłowy?

+5

formatu ciąg powinien być 'const char *'. Możesz po prostu zlokalizować 'stdio.h' i przeczytać tam definicję. Dlaczego, z ciekawości, nie chcesz "#include "? – meagar

+1

jak można drukować cokolwiek na ekranie bez włączania stdio.h? Będziesz musiał napisać własne biblioteki ... to samobójstwo :) – sdadffdfd

+12

@bemace @Vic Akt dołączania 'stdio.h' nic nie łączy, pliki nagłówkowe nie działają w ten sposób. To pytanie jest całkowicie poprawne i będzie działało dobrze. – meagar

Odpowiedz

18

Prawidłowa deklaracja (ISO/IEC 9899: 1999) jest:

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

Ale byłoby najłatwiej i najbezpieczniej tylko #include <stdio.h>.

+1

@Saurabh Nie wiem, gdzie się tego nauczyłeś, ale prototypy funkcji (tj. Deklaracje) w C * zawsze * kończą się średnikami. To samo dotyczy C++. –

12

Wystarczy:

man 3 printf 

on powie printf Podpis:

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

jest słuszna.

+0

+1 dla strony podręcznika strony – Zeke

4

Nie mam pojęcia, dlaczego chcesz to zrobić.

Ale powinno być const char *.

+1

'const char * restrict' –

+0

@Oli: Czy tylko znak * wpływa na cokolwiek? –

+1

@Charles: W C99, tak. To nie skompiluje się do niczego wcześniej. –

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

działa dobrze, nie wiem, dlaczego ludzie mówią, że musi być char const

+0

przeczytać komentarz charles w odpowiedzi oli. –

0

Oto kolejna wersja deklaracji:

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