我注意到OpenSSL的源代码,here一个奇怪的习惯用语和重复如下:这是什么C成语(if(1))?
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 required\n");
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, passwd_malloc_size, "Password: ",
!(passed_salt || in_noverify)) != 0)
goto end;
passwds[0] = passwd_malloc;
#else
BIO_printf(bio_err, "password required\n");
goto end;
#endif
}
我排除了一些解释:
- 它可能是为
passwds_static
引入块范围,但封闭if
将为sim ilar目的 - 它可能是一个构造,通过几个有意义的转换变得毫无意义,但该构造有since the introduction of
OPENSSL_NO_UI
。
我在这里错过了什么吗?这个if (1)
有什么好处?这是用在其他代码库吗?
谢谢!
在我看来,它的唯一目的是为了避免和'#else'子句出于任何原因 – StoryTeller
Dup of http://stackoverflow.com/questions/2266060/why-would-somebody-use-an-如果-1-C-预处理程序指令? – CristiFati
@CristiFati - 不,这不是关于'#if 1',因为那个构造在问题中完全不出现。这是关于'if(1)'。 – StoryTeller