这个C语言是什么(if(1))?
发布时间:2020-12-16 03:23:56 所属栏目:百科 来源:网络整理
导读:我在openssl源代码中注意到一个奇怪的成语,here并重复如下: if ((in == NULL) (passwds == NULL)) { if (1) { (* ---- HERE *)#ifndef OPENSSL_NO_UI /* build a null-terminated list */ static char *passwds_static[2] = { NULL,NULL }; passwds = passw
我在openssl源代码中注意到一个奇怪的成语,here并重复如下:
if ((in == NULL) && (passwds == NULL)) { if (1) { (* <---- HERE *) #ifndef OPENSSL_NO_UI /* build a null-terminated list */ static char *passwds_static[2] = { NULL,NULL }; passwds = passwds_static; if (in == NULL) if (EVP_read_pw_string (passwd_malloc,passwd_malloc_size,"Password: ",!(passed_salt || in_noverify)) != 0) goto end; passwds[0] = passwd_malloc; } else { #endif BIO_printf(bio_err,"password requiredn"); goto end; } } 看来这段代码相当于: if ((in == NULL) && (passwds == NULL)) { #ifndef OPENSSL_NO_UI /* build a null-terminated list */ static char *passwds_static[2] = { NULL,NULL }; passwds = passwds_static; if (in == NULL) if (EVP_read_pw_string (passwd_malloc,!(passed_salt || in_noverify)) != 0) goto end; passwds[0] = passwd_malloc; #else BIO_printf(bio_err,"password requiredn"); goto end; #endif } 我排除了一些解释: >它可能是为passwds_static引入块范围,但是如果将为类似的目的提供封闭的范围 我在这里遗漏了什么吗? (1)有什么好处?这是否用于其他代码库? 谢谢! 解决方法
看了其他类似的地方,I found an explanation:
if (1) { /* This is a trick we use to avoid bit rot. * at least the "else" part will always be * compiled. */ #ifdef AF_INET6 family = AF_INET6; } else { #endif BIOerr(BIO_F_ACPT_STATE,BIO_R_UNAVAILABLE_IP_FAMILY); goto exit_loop; } 在大多数情况下(包括其CI我猜),OPENSSL_NO_UI没有定义,所以两个分支都被编译.如果其中一个分支机构使用了更改,那么它将被编译器发现,它可以被修复,而无需测试所有的编译时交换机. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |