【发布时间】:2015-02-19 14:03:14
【问题描述】:
我正在查看 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 的目的是什么,因为它总是正确的?
【问题讨论】:
-
验证
p的类型,大概——条件运算符的第二个和第三个操作数必须可以转换为相同的类型。