Pages: [1]   Go Down
Author Topic: il #define?  (Read 1439 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

In realtà c'è ben poco da illustrare, nonostante le guide e gli esempi, non riesco bene a comprendere la differenza pratica di suddetta istruzione  smiley-confuse
Perchè non utilizzare una variabile ma un #define, per impostare il collegamento di un led ad un pin per esempio?

Code:
#define LED 13
int  led = 13;
 
Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 112
Posts: 7079
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Col primo crei un etichetta "LED" che verrà sostituita prima di compilare il programma col numero 13.
Nel secondo caso crei una variabile di nome "led" che vale 13.
Di solito si usa il #define quando devi indicare dei dati fissi, ovvero che non verranno cambiati durante l'esecuzione del programma.

Ti rinvio a questa pagina che spiega per bene le direttive preprocessore e altre cosette --> http://www.bo.cnr.it/corsi-di-informatica/corsoCstandard/Lezioni/14Direttive.html
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 327
Posts: 22638
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Secondo mio modesto parere si dovrebbe evitare l'uso delle #define per definire delle costanti ma utilizzare la parola chiave const.
Le #define sono ottime per passare al compilatore delle porzioni di codice da scegliere in base a determinate situazioni ma l'uso di const è IMHO più coerente e semanticamente corretto.
Logged


Offline Offline
God Member
*****
Karma: 9
Posts: 550
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

mi aggiungo anch'io..
define:è più da c,non è tipizzata se non lo fai te esplicitamente(e non è molto bello),non ha uno scope e alcuni debugger al posto di visualizzarti la costante,ti visualizzano direttamente il nome..
const: è nuovo e più da c++,risolve i problemi sopracitati,ma x esempio non sempre può essere usata come dimensione di un array globale..inoltre non puoi usarlo per cambiare il codice durante la compilazione..e di solito non puoi usarlo nei case degli switch..tutto ciò perchè const viene visto come una variabile,anche se poi spesso il compilatore la fa sparire..e in alcuni casi non lavora troppo bene coi template,penso..
« Last Edit: September 28, 2012, 05:15:56 am by m_ri » Logged

rome
Offline Offline
Sr. Member
****
Karma: 17
Posts: 482
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

si può discure se usare #define o una variabile di tipo const, ma ci sono situazioni in cui il #define non è sostituibile, per esempio nella compilazione condizionale, dove si definisce una "costante" mediante #define e si usa #ifdef per verificare se compilare o meno un pezzo di codice. Caso tipico: per evitare di avere conflitti negli #include dei file di tipo  .h
Logged

Offline Offline
Edison Member
*
Karma: 26
Posts: 1339
You do some programming to solve a problem, and some to solve it in a particular language. (CC2)
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

IMHO la compilazione condizionale è il mestiere di #define. Le costanti è meglio definirle con const. Più controlli si hanno da parte del compilatore, meno probabili sono i bug smiley
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 327
Posts: 22638
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

IMHO la compilazione condizionale è il mestiere di #define. Le costanti è meglio definirle con const. Più controlli si hanno da parte del compilatore, meno probabili sono i bug smiley
Approvo
Logged


Italy
Offline Offline
Full Member
***
Karma: 6
Posts: 102
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

IMHO la compilazione condizionale è il mestiere di #define. Le costanti è meglio definirle con const. Più controlli si hanno da parte del compilatore, meno probabili sono i bug smiley
Approvo
Sottoscrivo
Logged

"The question is not whether intelligent machines can have emotions, but whether machines can be intelligent without any emotions"

Pages: [1]   Go Up
Jump to: