stavo guardando alcune macro di preprocessore utilizzati in OpenSSL, e mi sono imbattuto nel seguente da crypto/stack/safestack.h
:Operatore condizionale con un valore costante (vero)?
#define CHECKED_STACK_OF(type, p) \
((_STACK*) (1 ? p : (STACK_OF(type)*)0))
#define CHECKED_SK_FREE_FUNC(type, p) \
((void (*)(void *)) ((1 ? p : (void (*)(type *))0)))
#define CHECKED_SK_FREE_FUNC2(type, p) \
((void (*)(void *)) ((1 ? p : (void (*)(type))0)))
Sto indovinando il suo scritto in quel modo per aggirare un bug del compilatore (probabilmente qualcosa di antico che hasn 'è stato supportato in oltre un decennio dal venditore).
Qual è lo scopo di utilizzare lo 1
in quanto è sempre vero?
Verificare il tipo di 'p', probabilmente - il secondo e il terzo operando dell'operatore condizionale devono essere convertibili nello stesso tipo. –