È meglio farlo
#define INT_TRUE 1
#define INT_FALSE 0
int someFunctionalityIsEnabled = INT_TRUE;
o questo?
int someFunctionalityIsEnabled = 1;
Si può tranquillamente presumere che il falso sarà sempre zero e il vero sarà diverso da zero.
It can be safely assumed that false will always be zero and true will be non-zero.
In questo caso, la tua domanda è quasi inutile: se sei sicuro che chiunque leggendo il tuo codice sappia come "vero" e "falso" sono rappresentati come numeri, allora potresti non bisogno di quelle #define
macros.
Effetto collaterale positivo di questi #define
s. Sto dicendo "quasi" perché questi #define
s hanno ancora un valore: senza nomi come TRUE
e FALSE
, scegliendo la variabile sensibile i nomi diventano un po 'più importanti. Ad esempio:
int is_enabled = 1;
int age_in_years = 1;
Come puoi sapere quale variabile memorizza un valore booleano e quale numero intero? Osservando i nomi delle variabili. Ora, che ne dici di questo?:
int is_enabled = TRUE;
int age_in_years = 1;
Il #define
s aggiunge una certa ridondanza (oltre ai nomi delle variabili ben scelti) che ti aiuta a riconoscere più facilmente il tipo "reale" di quelle variabili int
.
Per questa ragione di maggiore chiarezza, ti consiglio di utilizzare tale #define
s, o se stai usando un compilatore conforme a C99, #include <stdbool.h>
.
Effetto collaterale negativo di questi #define
s. C'è anche un lato negativo nel dichiarare un TRUE
letterale. Stai dicendo che "vero" può essere rappresentato da "qualsiasi numero intero non zero". Definire TRUE
come equivalente a 1
è quindi impreciso, poiché questo è solo uno dei tanti valori possibili che significano "vero". ( FALSE
non ne risente). Questo porta alla conseguenza un po 'assurda che scrivere is_enabled == FALSE
funzionerà come previsto, ma is_enabled == TRUE
potrebbe non. Esistono due modi per risolvere questo problema:
NON confrontare mai i valori booleani usando ==
o !=
. Invece,
is_enabled
anziché is_enabled == TRUE
e !is_enabled
anziché is_enabled == FALSE
. CONSIDER che ridefinisce "true" come "numero intero 1" anziché "qualsiasi numero intero diverso da zero". (Non lo farei, poiché contraddice il modo in cui C interpreta gli interi come valori booleani ... ma è una possibilità teorica.)
Ti consiglio di andare con # 1 per il motivo indicato.
Il risultato è lo stesso. Usando il
#define TRUE 1
#define FALSE 0
è più prolisso, ma può rendere il tuo codice più leggibile per le generazioni future (di programmatori o le tue cellule cerebrali) che stanno mantenendo l'applicazione e stanno cercando di decifrare il codice.
Leggi altre domande sui tag c