You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于OpenSSL中无定义宏SSL_CONNECTION_NO_CONST的作用咨询

解析OpenSSL中SSL_CONNECTION_NO_CONST空宏的作用

相关代码片段

ssl_local.h中的宏定义:

#  define SSL_CONNECTION_FROM_SSL(ssl) \
    SSL_CONNECTION_FROM_SSL_int(ssl, SSL_CONNECTION_NO_CONST)
    
# define SSL_CONNECTION_NO_CONST

# define SSL_CONNECTION_FROM_SSL_ONLY_int(ssl, c) \
    ((ssl) == NULL ? NULL                         \
     : ((ssl)->type == SSL_TYPE_SSL_CONNECTION    \
       ? (c SSL_CONNECTION *)(ssl)                \
       : NULL))

调用示例:

int SSL_connect(SSL *s)
{
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);
}

宏的具体作用

这个空宏是const修饰符的开关占位符,核心目的是复用同一个底层宏来生成两种指针类型的转换逻辑:

  • 当传入SSL_CONNECTION_NO_CONST时,因为它是空定义,宏展开后(c SSL_CONNECTION *)(ssl)就变成(SSL_CONNECTION *)(ssl),得到非const的指针类型,适配SSL_connect这类需要修改连接对象的场景。
  • 必然存在另一个配套宏(比如定义为const的SSL_CONNECTION_CONST),当需要返回const SSL_CONNECTION*时,会调用类似SSL_CONNECTION_FROM_CONST_SSL(ssl)的接口,传入SSL_CONNECTION_CONST,此时展开后就是(const SSL_CONNECTION *)(ssl),用于那些只读取连接状态、不允许修改的函数。

这种设计避免了重复编写几乎完全一致的宏代码,通过占位符参数切换指针的const属性,是C语言中复用代码、处理const/非const类型兼容的常用技巧。

内容的提问来源于stack exchange,提问作者programming_in_custom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 20:00:20