2013-08-13 13 views
6

Esistono metodi per scrivere un programma C senza includere stdio.h come file di intestazione. È stato suggerito che può essere attuata dichiarando extern int scanf(char* format, ...);Come utilizzare scanf() senza includere stdio.h

#include <stdio.h> //I want this same code to work without including this line 

int main() 
{ 
    char str [80]; 
    scanf ("%s",str); 
    return 0; 
} 
+15

perché pensi che includere 'stdio.h' è sbagliato? –

+0

Troverete che in C, non in C++, avete bisogno di 'stdio.h' più spesso di quanto pensiate. Ad esempio, in C, dove è definito 'NULL'? – cdarke

+2

@WouterHuysentruit Voglio solo sapere se ci sono soluzioni possibili. – Niko

risposta

10

È possibile dichiarare la funzione scanf con:

extern int scanf(const char *format, ...); 

La parola chiave extern è facoltativo ma mi piace includerlo come un promemoria del fatto che la funzione è definita altrove.

tuo esempio sarebbe quindi simile:

extern int scanf(const char *format, ...); 

int main() 
{ 
    char str [80]; 
    scanf ("%s",str); 
    return 0; 
} 
+9

Funziona solo se 'scanf' è implementato come una funzione. Non c'è nulla nei requisiti C che dice che non può essere una macro che richiama alcune altre funzioni come 'fscanf'. –

+0

Se può essere usato, puoi scrivere il codice per me. Modifica la tua risposta – Niko

+7

@DavidHammen No. Dalla sezione 7.1.4/1, nota 155 della norma ISO C99: "Ciò significa che un'implementazione deve fornire una funzione effettiva per ogni funzione della libreria, anche se fornisce anche una macro per quella funzione." Le macro possono essere fornite * in aggiunta * alle funzioni di libreria standard, ma non possono sostituirle interamente. – jamesdlin

1

In C-89, che il codice avrebbe compilato senza il # include, come prototipi di funzione sono opzionali.

Detto che, si rientra nella lista delle 'cose davvero male da fare' - scanf può essere una macro, potrebbe avere uno o più parametri richiesti, ...

Così si può farlo, ma è come guidare di notte senza luci. Sei soggetto a schiantarsi, anche se pensi di conoscere la strada.

+0

Potresti fornire un motivo per il downvote? –