Ssl_local.h OpenSSL头文件包含以下内容

#  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);

我不明白下面的宏是做什么的,因为它没有实际定义.

# define SSL_CONNECTION_NO_CONST

然而,它被用在下面提到的宏中.

SSL_CONNECTION_FROM_SSL_ONLY_int(ssl, c)

推荐答案

如您所见,宏用作cSSL_CONNECTION_FROM_SSL_ONLY_int的第二个参数,并用作SSL_CONNECTION的前缀:

? (c SSL_CONNECTION *)(ssl)                \
  ^^^^

ssl_local.h中,SSL_CONNECTION_FROM_SSL_ONLY_int实际上有多种用法:

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

SSL_CONNECTION_FROM_SSL中用SSL_CONNECTION_NO_CONST调用,这会将c扩展为空字符串,即

? ( SSL_CONNECTION *)(ssl)   
  ^^^^

SSL_CONNECTION_FROM_CONST_SSL中用const调用,这会将c扩展到const,即

? (const SSL_CONNECTION *)(ssl)   
  ^^^^^^^

在OpenSSL源代码中,SSL_CONNECTION_FROM_SSLSSL_CONNECTION_FROM_CONST_SSL都在多个地方使用,所以这两个变体似乎都有用例--有const也有没有const.

C++相关问答推荐

漏洞仅出现在FreeBSD上,但在Windows、Linux和MacOS上运行得非常好

函数指针始终为零,但在解除引用和调用时有效

try 使用sigqueue函数将指向 struct 体的指针数据传递到信号处理程序,使用siginfo_t struct 体从一个进程传递到另一个进程

C:gcc返回多个错误定义,但msvc—不""'

球体—立方体重叠:无、部分或全部?

在使用GTK 4 Columnview列表模型时,如何为多列添加排序函数.C编码,Linux/GNOME环境

使用额外的公共参数自定义printf

Ruby C Api处理异常

为什么STM32G474RE上没有启用RCC PLL

在C++中通过空指针隐式访问常量变量的值

试图从CSV文件中获取双精度值,但在C++中始终为空

为什么未初始化的 struct 的数组从另一个数组获取值?

如何使用libgpio(d)为Raspberry Pi编译C程序?

在函数外部使用内联ASM时无法指定操作数

C程序向服务器发送TCPRST

Makefile无法将代码刷新到ATmega328p

我可以使用Windows SDK';s IN6_IS_ADDR_LOOPBACK等,尽管没有文档?

如何为avr atmega32微控制器构建C代码,通过光电二极管捕获光强度并通过串行通信传输数据

使用 GCC 将一个函数中初始化的 struct 体实例通过指针传递到 C 中的另一个函数会产生不同的结果

段错误try 访问静态字符串,但仅有时取决于构建环境