Pagina 1 di 1

GRAVE et URGENTE problema di include!!!

Inviato: ven 12 ago 2005, 13:35
da sir_alex
Ok, mi rendo conto del tono un po' allarmista, pardon.
Dunque, io ho un progetto fatto grosso modo così:
- main.c, che include primo.h, secondo.h, terzo.h, quarto.h;
- primo/secondo/terzo/quarto.c (e relativi fle h) che fanno tutti cose diverse, tutte chiamate dal main;
- utils.c/h, che contiene un paio di funzioni comuni e tutti i tipi usati (6 struct).
Ora, quando compilo mi vengono dati una valanga di conflicting types, dato che in pratica il main verrebbe ad includere, seppur in modo indiretto, 4 volte utils.h; non posso togliere da nessuno dei vari primo/secondo etc tale inclusione, dato che già nei prototipi delle funzioni implementate nei rispettivi file c vengono richiamate le struct i utils.h, come faccio? L'unica soluzione che mi è venuta in mente è di includere a catena: primo.h include utils.h, secondo include primo etc, main include solo quarto; ma il comportamento del gcc non è un po' poco logico? Possibile che non capisca che le dichiarazioni di tipi sono le stesse (dato che il file utils.h è uno ed uno solo)? Forse questo forum non è il maggiormente adatto ad una questione prettamente di programmazione, ma se qualcuno sa qualcosa PARLI!!! :lol: Please!

Inviato: ven 12 ago 2005, 13:49
da zzt
Fai cosi: all'inizio degli header definisci una variabile di preprocessing, in questo modo vengono inclusi una volta sola...

ES: primo.h

Codice: Seleziona tutto

#ifndef _PRIMO_H
#define _PRIMO_H

... il tuo bel .h

#endif

Re: GRAVE et URGENTE problema di include!!!

Inviato: ven 12 ago 2005, 13:55
da gastone90
sir_alex ha scritto:ma il comportamento del gcc non è un po' poco logico?
se è un prog in c++ usa il g++, non il gcc

Inviato: ven 12 ago 2005, 18:01
da sir_alex
Grazie! comunque è c!

Inviato: ven 12 ago 2005, 19:13
da Paoletta
non puoi fare un unico file di header che include a sua volta tutto ciò di cui hai bisogno e poi includere esclusivamente questo in tutti i files .c?

se non ricordo male si può far così...
ciao!

Inviato: ven 12 ago 2005, 20:17
da absinthe
zzt ha scritto:Fai cosi: all'inizio degli header definisci una variabile di preprocessing, in questo modo vengono inclusi una volta sola...

ES: primo.h

Codice: Seleziona tutto

#ifndef _PRIMO_H
#define _PRIMO_H

... il tuo bel .h

#endif
soluzione da manuale anche se io userei PRIMO_H_ anzichè _PRIMO_H... ma queste son fesserie :)
M.

Inviato: ven 12 ago 2005, 20:43
da zzt
Effettivamente il primo underscore mi lascia sempre un po' basito... :)
Io faccio così perchè così si usa negli header del kernel...
L'importante è ovviamente che tale nome sia il più possibile "unico", in teoria mettendo l'underscore solo per questo tipo di define non ci si confonde con altri nel codice... ma bisogna fare attenzione a non usare un nome già usato nel kernel...
bah... se qualcuno conosce lo stile corretto faccia un fischio...

Inviato: ven 12 ago 2005, 22:01
da absinthe
zzt ha scritto:Effettivamente il primo underscore mi lascia sempre un po' basito... :)
Io faccio così perchè così si usa negli header del kernel...
L'importante è ovviamente che tale nome sia il più possibile "unico", in teoria mettendo l'underscore solo per questo tipo di define non ci si confonde con altri nel codice... ma bisogna fare attenzione a non usare un nome già usato nel kernel...
bah... se qualcuno conosce lo stile corretto faccia un fischio...
dunquew dunque:

in teoria l'underscore prima del nome servirebbe a definire funzioni di sistema non relative al progetto: cioè se guardi il file stdio.h dovrebbe avere un underscore prima del nome ad indicare che quello è un file .h contenete funzioni ansi.

per gli .h personali sarebbe meglio evitarlo...

ma non ricordo bene...uselessss batti un colpo!

M.

Inviato: mar 16 ago 2005, 15:22
da useless
eccomi :).

credo anch'io che il _ all'inizio delle proprie costanti vada tralasciato, anche se lo usavo anch'io fino a poco fa. xò ho letto recentemente che è utile solo nelle funzioni "interne" delle librerie in modo da non sporcare il namespace. in realtà xò, essendo questi define + o - "collaterali", direi che ha anche senso usare il _ iniziale. boh, credo che ognuno possa fare come preferisce :).

Inviato: mar 16 ago 2005, 15:25
da zzt
credo che ognuno possa fare come preferisce Smile.
"Free as in a header file" ... :lol:

Inviato: mar 16 ago 2005, 15:28
da useless
grandissimo 8).

Inviato: mer 17 ago 2005, 12:57
da absinthe
zzt ha scritto:
credo che ognuno possa fare come preferisce Smile.
"Free as in a header file" ... :lol:

ahahahahahahahahaha