Newsgroup: it.comp.lang.c
Titolo: include solo x heders?

Domanda da novizio : su tutte le guide ho visto la parola chiave #include 
associata a file .h ovvero headers;
Dovendo compilare più sorgenti c x poi linkarli, ho eseguito il comando 
seguente:
bcc32 main.c file2.c ecc...
ho visto che il comando #include "file2.c" non da fastidio in compilazione e 
funziona perfettamente, evitandomi di dover elencare ogni volta al 
compilatore quali file preleveare; mi chiedevo se è questo il metodo giusto 
di lavorare cioè se è corretto includere anche i file c che contengono 
chessò delle funzioni e strutture utilizzate nel main ...
Inoltre: supponendo che sia il metodo giusto, mi chiedo se ho
main.c
funz1.c
funz2.c
e la dipendenza è main implementa funz1 che implementa funz2,
nel main mi basta includere funz1 o anche funz2?
Grazie e scusate l'ignoranza...
____________________
Se la so, rispondo sempre. 

 Grazie e scusate l'ignoranza...
Prego ;) nn si nasce mica imparati :-P

 Grazie e scusate l'ignoranza...
No, non ti scuso per niente. I "newbie" dovrebbero leggere i manuali sul
linguaggio e non usare il ng per chiedere delle banalità.
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 linguaggio e non usare il ng per chiedere delle banalità.
1) Il solo fatto che ti sia stato risposto che hai detto delle cose errate, 
vera o falsa che sia tale affermazione implica comunque che non ho chiesto 
una mera banalità
2) I manuali li ho letti

 in main.c per esempio.
perfetto, ora sperimento.grazie 

Ok ho fatto come mi hai detto (spero) e funziona (e qui non è speranza 
macertezza );
Ti posto il codice:
//main.c
#include <stdio.h>
#include "header.h"
main(){    printf("%d\n", funz(4)); }
//header.h
#define PARAM 1
#ifndef FUNZ        //<--comodo...
#define FUNZ          //è convenzione che funzione
                                //e definizione siano omonimi?
extern int funz(int num);
#endif
//funz.c
int funz(int num){
    return num;
}
Ti posto la command line :
bcc32 main.c funz.c
DOmanda: mi puoi gentilmente indirizzare ad un ->_b_u_o_n_<- tutorial/guida 
per comprendere bene l'uso di "make" x evitare di ricompilare tutto e 
scrivere imbordellate righe di comando x compilare?
Grazie mille!
__________________________
Lllee preeendeeeeva e ed in fondo gli piaceeeeeva 

 scrivere imbordellate righe di comando x compilare?
Google -> make ... tempo totale: 2 secondi di cui 1 sec per scrivere
make e battere invio, 0,26 secondi per far terminare la ricerca e i
restanti 0,74 secondi per prendere il mouse, muovere il cursore sul link
e cliccare. Come ho gia` detto, un po' di iniziativa, ragazzi... non e`
troppo difficile trovare le cose da se'... e` anche piu` veloce, visto
che non si deve aspettare la risposta nel NG.
Tornando alla ricerca (tanto ora l'ho fatta ^_^:)...
Il primo sito che da` e quello del GNU Make, comprensivo di manuale. Il
manuale descrive ovviamente lo GNU Make, che (come al solito) ha molte
estensioni, ma se non ricordo male il manuale evidenzia quali sono.
Il link al sito e`
 
www.gnu.org/software/make/
quello al manuale online in html e`
 
www.gnu.org/software/make/manual/make.html
Il sito principale riporta Dos e Windows come sfide per il porting (non
meglio specificato), quindi non garantisco che GNU Make ci funzioni.
Saluti,
Marco
-- 
To email me, remove the no_ and _spam from my address.

 Allora anche tu sei un "newbie" ;-) se fai affermazioni come quella sopra?
Non ritengo di esserlo e tu non ti sei sforzato neanche per un attimo di
capire che cosa io volessi dire. E' ovvio che si può includere anche un .C,
"si può" nel senso che è in tuo potere farlo, non "si può" nel senso che è
bene farlo.


 1) Il solo fatto che ti sia stato risposto che hai detto delle cose
errate,
Leggi la mia risposta. Prima di giudicare una cosa "errata" bisogna sapere
di che si sta parlando.


 il modo corretto di operare.....
Non c'è nulla che giustifichi l'inclusione di un .c, neanche per un progetto
piccolo.


 di che si sta parlando.
Ma sai leggere ??? e fino in fondo? Non puoi prendere una frase 
deprendandola del resto del contesto... CITO IL SEGUITO DI QUELLA FRASE : 
"BLA BLA....VERA O FALSA CHE SIA TALE AFFERMAZIONE", il che significa che 
non ti ho giudicato, ho solo espresso il basilare concetto che se io faccio 
una domanda e te rispondi "bruscamente" ( per non dire di peggio), con 
arroganza, dicendomi che tale domanda č stupida e banale, e poi qualcuno ti 
contraddice, anche se hai ragione, comunque non era poi tanto stupida visto 
che ci sono pareri contrastanti...
Ecco se afferri questo ti rendi conto che quanto mi hai postato qua sopra č 
una fesseria e che SEI TE che devi leggere la mia risposta fino in fondo.
Saluti 

 Ma sai leggere ???
Sprechi il tuo tempo: usalo meglio studiando il C.
Adios.


 bene farlo.
Non hai notato l'ironia?
In ogni caso trovo sbagliato fare affermazioni come hai fatto tu. Dai 
una indicazione sbagliata.
Anche io concordo che e` un modo non corretto di scrivere il codice, ma 
leggendo la tua affermazione un novizio puo` anche da pensare che allora 
deve mettere codice in un .h (e purtroppo mi capita spesso di trovarne).


 deve mettere codice in un .h (e purtroppo mi capita spesso di trovarne).
Questa è una deduzione del tutto gratuita, che non si evince AFFATTO da ciò
che ho scritto.
Forse è una tua personalissima elucubrazione su ciò che un novizio
penserebbe.
I novizi, come già detto, devono studiare i manuali, quelli seri, in cui c'è
sicuramente scritto che un file header contiene definizioni, tipi e
prototipi, in cui c'è sicuramente scritto come linkare insieme più file .C,
in cui sicuramente da nessuna parte viene incluso un .C mediante
preprocessore.


 #endif
Ok,solo una cosa: se  PARAM è un parametro il cui accesso viene implementato 
solo nel main, in quel caso non è meglio includerlo esternamente al blocco 
condizionale? O addiruttura nel main stesso?

 Diciamo che ti stai arrampicando sugli specchi, tanto per dare addosso ;-)
E tu continui a difendere delle cazzate.


 E tu continui a difendere delle cazzate.
Ti plonkerei volentieri se non fossi su newsland... eh.. benedetti
newsreader!...
Molto più simpaticamente, mi limito a mandarti a cagare...


 Molto più simpaticamente, mi limito a mandarti a cagare...
Come al solito quando non si sa piu` cosa rispondere .....


 Come al solito quando non si sa piu` cosa rispondere .....
No no, io sapevo esattamente cosa rispondere!...




Il concetto del blocco ifndef..endif in queste circostanze e` esattamente
quello di assicurare che il contenuto di un header sia incluso una sola
volta, il che vuol dire che non ha senso poi mettere le cose all'esterno
:) Anche perche' adesso PARAM lo usi nel main(), ma in futuro potresti
usarlo altrove! Effettivamente io metto sempre l'ifndef..endif in ogni
header, anche se in progetti piccoli nemmeno servirebbe visto che non mi
e` mai capitato di fare inclusioni multiple... pero` lo faccio ugualmente
per buona pratica e perche' non si sa mai... metti caso che dopo un mese
riprendo qualche progettino... chi se lo ricorda se, come, dove e quando
ho incluso i file!
Visto che PARAM e` usato solo nel main(), puoi anche metterlo direttamente
nel file che contiene main()... sta a te la scelta. In genere negli header
si mette tutto quello che plausibilmente sara` usato in diversi file.
Saluti,
Marco
PS. Per GIOVANNI e ANDREA... scusate se mi intrometto nella vostra
interessantissima disquisizione su chi e` piu` capace di offendere
l'altro, ma vorrei farvi notare che forse noi altri non siamo molto
interessati alla cosa. Potreste per cortesia continuare in separata
sede? Grazie


 sede? Grazie
Qui, se non mi sbaglio, scattano gli applausi!!!
