Newsgroup: it.comp.lang.c
Titolo: aiuto!!!!!

ciao, ho un piccolo dilemma, sono alle prime armi con il C, in un esempio di
programma ho trovato questa istruzione
#define stdin (FILE *)0
la prima parte #define stdin è chiara è il resto che non capisco
qualcuno può aiutarmi??
grazie...

 #define stdin (FILE *)0
Significa che definisce una costante (stdin) che ha valore 0 ed è di tipo
FILE* (si tratta di un cast esplicito).


#define stdin (FILE *)0
Ciao, Sabatino.
Mi sembra chiaro che il tuo programma di esempio utilizzi le librerie
standard del C, e in particolare le funzioni per la scrittura su file
definite in stdio.h. Ora, non conosco i dettagli delle varie
implementazioni della libreria, ma posso cercare di darti dei
chiarimenti. Come saprai, e se non lo sai te lo dico ora, ci sono
degli identificatori particolari (stdout, stdin, stderr e credo altri)
che rappresentano i dispositivi di I/O standard (come il video e la
tastiera). Questi identificatori sono appunto definiti in stdio.h.
Ora, molte funzioni pure definite in stdio.h sono simili, in quanto
prendono come argomento un puntatore a FILE. FILE è un particolare
tipo (credo una struct), definito pure nello stesso header. Per
esempio, prendiamo questo frammento di codice:
	FILE *pf = fopen("PROVA.TXT", "w");
	fprintf(pf, "Ciao");
E' chiaro che abbiamo ottenuto la creazione di un file di nome
PROVA.TXT e vi abbiamo scritto "Ciao". Fin qui tutto chiaro: il primo
argomento di fprintf è di tipo FILE*. Se invece scriviamo
	fprintf(stdin, "Ciao");
otteniamo che "Ciao" viene stampato sullo schermo.
E' possibile che tu già sapessi tutto questo, ma io ti ho spiegato
tutto perché in realtà non so rispondere alla tua domanda fino in
fondo. Il fatto che nel tuo esempio stdin sia definito come macro
(come vedi è un puntatore a FILE) mi sembra un pochino strano:
includendo stdio.h nel codice non ci dovrebbe essere questa necessità.
Forse nel tuo esempio questo non viene fatto, o forse c'è qualche
altra ragione (magari didattica) percui ci sia questa definizione
esplicita. Potrebbe essere che l'esempio voglia mostrarti qual è
l'effettiva definizione di stdin.
Spero di esserti stato di aiuto. In gamba.

qualcuno può aiutarmi??
L'identificatore "stdin" è destinato ad essere sostituito nel codice
in cui viene utilizzato con (FILE *)0 che non è altro che un puntatore
nullo al modello di struttura FILE.
Una definizione di questo tipo è, comunque, obsoleta.
--
Andrea Laforgia        (
andrea_...@bigfoot.com
)

otteniamo che "Ciao" viene stampato sullo schermo.
Attenzione, dato che "stdin" è lo stream di input e non di output, si
dovrebbe scrivere :
 
        fprintf( stdout, "Ciao" ) ;
e non è comunque garantito che l'output della funzione venga
indirizzato allo schermo : stdout, infatti, può rappresentare
qualsiasi stream di output (video, stampante, file, ...) .
--
Andrea Laforgia        (
andrea_...@bigfoot.com
)

On Sat, 13 Nov 1999 21:53:06 GMT, 
andrea_...@bigfoot.com
 (Andrea Laforgia)
wrote:

Ops...
Certo, è stdout.

...


 qualcuno può aiutarmi??
Fa il cast di un valore intero passandolo come fd (perche' 0 corrisponde
allo standard output).
Infatti fprintf(stdin, "Hello world\n");
Scrive la stringa sul descrittore 0 ovvero stdin ;)
Ciao,
 Emanuele
--
Live free or die, UNIX trademark of BELL labs - 
http://www.bsd.org
 -
Key fingerprint = 5BE2 14E1 A532 680F 57AB  E828 BBF6 92CB BC4C 81A9