Я смотрел некоторые макросы препроцессора, используемые в OpenSSL, и я наткнулся на следующее из crypto/stack/safestack.h
:
#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)))
Я предполагаю, что он написал этот способ, чтобы обойти ошибку компилятора (возможно, что-то древнее, которое не поддерживалось более десяти лет от поставщика).
Какова цель использования 1
выше, поскольку оно всегда верно?