GRAVE et URGENTE problema di include!!!

Postate qui per tutte le discussioni legate a Linux in generale.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
sir_alex
Linux 3.x
Linux 3.x
Messaggi: 735
Iscritto il: lun 21 mar 2005, 0:00
Kernel: 2.6.35-22
Desktop: KDE4
Distribuzione: Ubuntu
Località: Milano - Corbola (RO)
Contatta:

GRAVE et URGENTE problema di include!!!

Messaggio 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!

Avatar utente
zzt
Linux 2.x
Linux 2.x
Messaggi: 249
Iscritto il: lun 7 mar 2005, 0:00

Messaggio 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
Ultima modifica di zzt il ven 12 ago 2005, 13:57, modificato 1 volta in totale.

gastone90

Re: GRAVE et URGENTE problema di include!!!

Messaggio 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

sir_alex
Linux 3.x
Linux 3.x
Messaggi: 735
Iscritto il: lun 21 mar 2005, 0:00
Kernel: 2.6.35-22
Desktop: KDE4
Distribuzione: Ubuntu
Località: Milano - Corbola (RO)
Contatta:

Messaggio da sir_alex »

Grazie! comunque è c!

Avatar utente
Paoletta
Staff
Staff
Messaggi: 3975
Iscritto il: lun 25 apr 2005, 0:00
Slackware: 14.2 - 64 bit
Desktop: fluxbox
Località: Varese

Messaggio 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!

Avatar utente
absinthe
Iper Master
Iper Master
Messaggi: 2354
Iscritto il: dom 15 mag 2005, 0:00
Nome Cognome: Matteo Nunziati
Slackware: 12.1 - defunct
Kernel: 2.6.32-5-amd64
Desktop: gnome
Distribuzione: debian squeeze
Località: Prato
Contatta:

Messaggio 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.

Avatar utente
zzt
Linux 2.x
Linux 2.x
Messaggi: 249
Iscritto il: lun 7 mar 2005, 0:00

Messaggio 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...

Avatar utente
absinthe
Iper Master
Iper Master
Messaggi: 2354
Iscritto il: dom 15 mag 2005, 0:00
Nome Cognome: Matteo Nunziati
Slackware: 12.1 - defunct
Kernel: 2.6.32-5-amd64
Desktop: gnome
Distribuzione: debian squeeze
Località: Prato
Contatta:

Messaggio 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.

Avatar utente
useless
Staff
Staff
Messaggi: 3896
Iscritto il: dom 12 ott 2003, 0:00
Località: A place where the streets have no name
Contatta:

Messaggio 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 :).

Avatar utente
zzt
Linux 2.x
Linux 2.x
Messaggi: 249
Iscritto il: lun 7 mar 2005, 0:00

Messaggio da zzt »

credo che ognuno possa fare come preferisce Smile.
"Free as in a header file" ... :lol:

Avatar utente
useless
Staff
Staff
Messaggi: 3896
Iscritto il: dom 12 ott 2003, 0:00
Località: A place where the streets have no name
Contatta:

Messaggio da useless »

grandissimo 8).

Avatar utente
absinthe
Iper Master
Iper Master
Messaggi: 2354
Iscritto il: dom 15 mag 2005, 0:00
Nome Cognome: Matteo Nunziati
Slackware: 12.1 - defunct
Kernel: 2.6.32-5-amd64
Desktop: gnome
Distribuzione: debian squeeze
Località: Prato
Contatta:

Messaggio da absinthe »

zzt ha scritto:
credo che ognuno possa fare come preferisce Smile.
"Free as in a header file" ... :lol:

ahahahahahahahahaha

Rispondi