Nel source code of stdbool.h
al progetto LLVM, si legge:Che effetto ha #define X X in C?
/* Don't define bool, true, and false in C++, except as a GNU extension. */
#ifndef __cplusplus
#define bool _Bool
#define true 1
#define false 0
#elif defined(__GNUC__) && !defined(__STRICT_ANSI__)
/* Define _Bool, bool, false, true as a GNU extension. */
#define _Bool bool
#define bool bool
#define false false
#define true true
#endif
Nelle ultime 4 righe ci sono tre linee della da #define X X
. Perché dovresti farlo? Che differenza fa? Non forzerebbe questo compilatore a sostituire, per esempio, true
con true
?
Il downvoter potrebbe voler commentare? – alk
Non io, ma direi che una direttiva per il preprocessore è "vera" e ti ha fatto scendere il voto. Alcune persone sono pignoli per la precisione. – john
@john: ero consapevole di questo, è per questo che l'ho messo tra virgolette. Tuttavia è un'espressione booleana nel contesto della pre-elaborazione, non è vero? Hai un'idea per una formulazione alternativa? – alk