Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Preprocessore

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] Preprocessore

Messaggioda Foto Utentefantamed » 18 mag 2019, 18:25

Buonasera a tutti,avrei bisogno di capire " Cos'è il preprocessore del C " allo scopo di poter compilare progetti con piu file sorgenti ,senza riscontrare conflitti nelle dichiarazioni come mi e gia capitato.
sorry Meglio ancora avere anche dei semplici esempi pratici,sarebbe utile per la mia comprensione fra teoria e pratica
Grazie mille
Marco
Avatar utente
Foto Utentefantamed
30 5
Frequentatore
Frequentatore
 
Messaggi: 110
Iscritto il: 8 nov 2013, 13:44

2
voti

[2] Re: Preprocessore

Messaggioda Foto UtentePietroBaima » 18 mag 2019, 19:17

Beh, la domanda é oltremodo generica.
E' come se chiedessi che cosa sia un transistore...
nessuno può risponderti in un post, casomai potresti procurarti qualche libro, ma dipende da quale C vuoi usare...

Riesci ad essere più specifico?
Generatore codice per articoli:
nomi
emoticon
citazioni
formule latex

Io capisco le cose per come le scrivete. Per esempio: K sono kelvin e non chilo, h.z è la costante di Planck per zepto o per la zeta di Riemann e l'inverso di una frequenza non si misura in siemens.
Avatar utente
Foto UtentePietroBaima
77,4k 6 12 13
G.Master EY
G.Master EY
 
Messaggi: 9475
Iscritto il: 12 ago 2012, 1:20
Località: Londra

0
voti

[3] Re: Preprocessore

Messaggioda Foto Utentefantamed » 18 mag 2019, 22:35

Ciao Pietro, #-o hai ragione detta così è un po troppo generica,lo scopo sarebbe capire come funziona appunto il pre-processore e le direttive di inclusione per organizzare al meglio i file di questo progetto :https://www.electroyou.it/forum/viewtopic.php?f=15&t=77524
e risolvere l’errore che mi segnala il compilatore ,errore provvisoriamente risolto su consiglio,optando io per la strada più semplice ,ma non la migliore sia per il codice che per me stesso.

Grazie
Marco
Avatar utente
Foto Utentefantamed
30 5
Frequentatore
Frequentatore
 
Messaggi: 110
Iscritto il: 8 nov 2013, 13:44

2
voti

[4] Re: Preprocessore

Messaggioda Foto UtentePietroBaima » 18 mag 2019, 22:42

vedi qui.
Ciao,
Pietro.
Generatore codice per articoli:
nomi
emoticon
citazioni
formule latex

Io capisco le cose per come le scrivete. Per esempio: K sono kelvin e non chilo, h.z è la costante di Planck per zepto o per la zeta di Riemann e l'inverso di una frequenza non si misura in siemens.
Avatar utente
Foto UtentePietroBaima
77,4k 6 12 13
G.Master EY
G.Master EY
 
Messaggi: 9475
Iscritto il: 12 ago 2012, 1:20
Località: Londra

4
voti

[5] Re: Preprocessore

Messaggioda Foto Utentexyz » 18 mag 2019, 22:59

Il preprocessore è un programma che ha come input un sorgente e ha come output il sorgente elaborato con le modifiche imposte dalle direttive e macro presenti nel codice.

Alcuni compilatori hanno la possibilità di mostrare come viene modificato il sorgente dal preprocessore. Ad esempio il GCC con l'opzione "-E" stampa nello standard output il sorgente elaborato dal preprocessore senza compilarlo:

Codice: Seleziona tutto
gcc -E file.c

Per i dettagli leggiti il manuale del GNU CPP come consigliato da Foto UtentePietroBaima.

Come ultima cosa se il compilatore segnala un errore sulle dichiarazioni ha ragione, il sorgente deve essere coerente.
Avatar utente
Foto Utentexyz
5.930 2 4 5
G.Master EY
G.Master EY
 
Messaggi: 1578
Iscritto il: 5 dic 2009, 18:37
Località: Italy Turin

4
voti

[6] Re: Preprocessore

Messaggioda Foto Utentefairyvilje » 19 mag 2019, 7:57

fantamed ha scritto:senza riscontrare conflitti nelle dichiarazioni come mi e gia capitato.

Non usando il preprocessore del C :mrgreen: . Seriamente si tratta di un sottolinguaggio invecchiato parecchio male. Nessun linguaggio moderno si affida a qualcosa di assurdo come il preprocessore per gestire le librerie e le dipendenze, ma il C ed il C++ purtroppo si :/.

Il modo per evitare la maggior parte dei conflitti è usando la direttiva
Codice: Seleziona tutto
#pragma once
che non è standard ma è de facto compatibile con tutti i compilatori. La versione compliant utilizza le guards.
Codice: Seleziona tutto
#ifndef VARIABLE_H
#define VARIABLE_H
//Metti il tuo codice qui
#endif


In questo modo eviti la ridefinizione di prototipi e strutture in multipli punti del codice, cosa che confonde il compilatore non sapendo a chi stai facendo riferimento. Alla fine un include si limita a fare copia ed incolla dei sorgenti, quindi non è molto efficace nell'assicurarsi che non ci siano violazioni dei labels :/.
"640K ought to be enough for anybody" Bill Gates (?) 1981
Qualcosa non ha funzionato...

Lo sapete che l'arroganza in informatica si misura in nanodijkstra? :D
Avatar utente
Foto Utentefairyvilje
11,4k 4 9 12
G.Master EY
G.Master EY
 
Messaggi: 2452
Iscritto il: 24 gen 2012, 19:23


Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 0 ospiti