#define SSL_CONNECTION_NO_CONST

问题描述 投票:0回答:1

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)
c ssl openssl tls1.2
1个回答
0
投票

如您所见,宏用作

c
SSL_CONNECTION_FROM_SSL_ONLY_int
的第二个参数,并用作
SSL_CONNECTION
的前缀:

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

SSL_CONNECTION_FROM_SSL_ONLY_int
中的
ssl_local.h
实际上有多种用途:

#  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_NO_CONST
中用
SSL_CONNECTION_FROM_SSL
调用,这会将
c
扩展为空字符串,即

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

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

? (const SSL_CONNECTION *)(ssl)   
  ^^^^^^^
© www.soinside.com 2019 - 2024. All rights reserved.