[C#] - Direttive preprocessore

venerdì 27 marzo 2009 - 14.01

Allison Profilo | Newbie

Buongiorno.

Le mie conoscenze si basano sul C++ ANSI. Avrei intenzione di riscrivere alcune mie applicazioni in C#. Il primo problema che incontro, riguarda le direttive del preprocessore, molto comuni nei codici sorgenti C++. Avrei necessità di utilizzare le seguenti direttive:

#ifndef
#define macro
#define macro(x) (y)
#endif

Ho notato che in C#, la direttiva #define è differente da quella utilizzata in C++. Come potrei ottenere il medesimo risultato, in modo da assicurarmi che il file non venga compilato due volte? In C# non è necessario?

Le direttive del preprocessore di C# le ho trovate su MSDN, ma nella lista non è presente #ifndef.
http://msdn.microsoft.com/it-it/library/ed8yd1ha.aspx

Grazie in anticipo.

aiedail92 Profilo | Expert

Ciao

In realtà il C# non è provvisto di un preprocessore, e la sua funzione viene svolta dal compilatore stesso, per cui la compilazione avviene in una sola passata. Da questo consegue che le macro in C# non sono più supportate (non c'è il processo di sostituzione della macro con il suo computato)

> Sebbene il compilatore non disponga di un preprocessore indipendente,
> le direttive descritte in questa sezione vengono elaborate come se esistesse.
> Queste direttive vengono utilizzate per facilitare la compilazione condizionale.
> Contrariamente alle direttive in C e C++, non è possibile utilizzare queste direttive per creare delle macro.

Per quanto riguarda il problema di avere simboli ridefiniti più volte, questo in C# non si presenta più, quindi puoi andare tranquillo.

Luca

Allison Profilo | Newbie

Grazie. Con C# non avrò quindi più il problema della doppia compilazione. Ma se dovessi scrivere, col C++:

#define function(exp) ((void)NULL)

In C# come dovrei trasformarlo? Il #define in C# è diverso da quello C++. Dovrei scrivere quel codice in tutte le occorrenze, oppure c'è un medoto per semplificare? Se infatti un giorno dovessi modificare la funzione, in C++, col #define impiegherei pochi secondi...

llamanna Profilo | Junior Member

Io non conosco molto bene c++, ma conosco approfonditamente c#. Se il tuo problema è quello di dover scrivere del codice da riutilizzare in varie parti del programma, devi semplicemente incapsularlo in una classe,ed esporlo tramite un suo metodo (eventualmente statico) . Ogni volta che ti serve la funzionalità implementata tramite quel codice ti basterà istanziare la classe e invocare il metodo creato (o nel caso di metodo statico non devi neanche istanziare la classe).
Usare c# al posto di c++, non significa solo imparare una nuova sintassi, ma anche cambiare modo di scrivere il codice.

Laura.
http://lauralamanna.blogspot.com/

Allison Profilo | Newbie

La struttura del C# non mi è del tutto nuova.

Il mio problema è il seguente: ho un programma scritto in diversi linguaggi, da molte persone: C, C++, Python (versione 2.5). Per poter uniformare tutto il codice, ho intenzione, pian piano, di riscriverlo tutto utilizzando C# e Python (versione 3.0).

Il C++ e il C# sono molto simili: entrambi sono orientati agli oggetti e gran parte della sintassi del C# deriva da quella del C++. Quello che mi mette in difficoltà, sono i dettagli: ad esempio, con il seguente codice C++ (ovviamente non funzionante, poiché è stato inventato sul momento):

#define function(x) ((void)NULL) class NomeClasse { public: char getPosition(int pos) const { function(pos<length); return pData[pos]; } };
Cambiando la sola definizione della macro in #define, cambierei anche tutte le "function" che compaiono di seguito nel codice e non dovrei cambiarle manualmente.

Col C# è possibile fare una cosa del genere, o devo scrivere tutto manualmente, ad ogni minimo cambiamento?

llamanna Profilo | Junior Member

Se ho capito il tuo problema forse potrebbero esserti di aiuto i generics
http://msdn.microsoft.com/it-it/library/512aeb7t(VS.80).aspx
Laura.
http://lauralamanna.blogspot.com/

Allison Profilo | Newbie

Non saprei... forse dovrei dichiare i valori costanti come membri statici... Devo ancora acquistare la forma mentis che ci vuole per programmare in C#. Accetto il tuo precedente consiglio. Grazie.

llamanna Profilo | Junior Member

..di nulla...anche se forse non sono stata molto di aiuto visto che non conosco bene c++
Laura.
http://lauralamanna.blogspot.com/

Allison Profilo | Newbie

Invece lo sei stata. Ricercando i termini "metodo statico", sono giunto a questa pagina:

http://msdn.microsoft.com/it-it/library/yyaad03b.aspx

C# per programmatori C++.

Per me comunque la programmazione di alto livello è molto difficile... essendo un ing. elettronico. Cambiare linguaggio è ancora più difficile... ma è il lavoro, bisogna accontentarsi.

Grazie ancora.

llamanna Profilo | Junior Member

...be se può consolarti io sono passata dall'uso di Verilog e VHDL alla programmazione ad oggetti...senza neanche passare dai linguaggi procedurali.
Laura.
http://lauralamanna.blogspot.com/
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5