OPENSSL_NO_DEPRECATED_3_0含义解析:该宏代表启用还是禁用废弃函数?
关于
OPENSSL_NO_DEPRECATED_3_0宏的含义 直接拆解这个宏的作用:
OPENSSL_NO_DEPRECATED_3_0字面意思是“不要OpenSSL 3.0的废弃内容”,实际行为是:如果编译时定义了这个宏,代码中标记为OSSL_DEPRECATEDIN_3_0的废弃函数会被排除,不会编译进程序;如果没定义这个宏,这些废弃函数就会被包含,程序可以调用它们。
结合你给出的代码片段来看:
# ifndef OPENSSL_NO_DEPRECATED_3_0 OSSL_DEPRECATEDIN_3_0 size_t HMAC_size(const HMAC_CTX *e); OSSL_DEPRECATEDIN_3_0 HMAC_CTX *HMAC_CTX_new(void); OSSL_DEPRECATEDIN_3_0 int HMAC_CTX_reset(HMAC_CTX *ctx); OSSL_DEPRECATEDIN_3_0 void HMAC_CTX_free(HMAC_CTX *ctx); # endif
这段代码用#ifndef(即“如果未定义”)判断:当OPENSSL_NO_DEPRECATED_3_0没有被定义时,才会展开下面这些带OSSL_DEPRECATEDIN_3_0标记的废弃函数声明。反过来,如果定义了OPENSSL_NO_DEPRECATED_3_0,这段代码会被跳过,废弃函数不会被声明,自然无法调用。
简单总结:
- 定义
OPENSSL_NO_DEPRECATED_3_0→ 禁用OpenSSL 3.0的废弃函数 - 不定义
OPENSSL_NO_DEPRECATED_3_0→ 启用OpenSSL 3.0的废弃函数
内容的提问来源于stack exchange,提问作者kelsonic
相关产品推荐
相关产品推荐

