gpt4 book ai didi

具有常量(真)值的条件运算符?

转载 作者:太空狗 更新时间:2023-10-29 16:23:47 28 4
gpt4 key购买 nike

我在查看 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,并且还必须在宏中手动键入该指针的类型。

三元表达式将始终返回第二个操作数,但如果第二个和第三个操作数的类型匹配,则会检查它们,如果不匹配,您应该得到编译器错误。

一个简单的例子:

int* p = NULL ;

1 ? p : ( float* )p ; //error

1 ? p : ( int* )p ; //ok

关于具有常量(真)值的条件运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27586311/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com