在 IF 体内声明变量时有什么缺点吗?
Are there any drawbacks when I declare variables inside an IF body?
我在封装在 #ifdef
块中的函数中具有该功能,该块附有 if()
语句:
int myfunction(void) {
int condition = 0;
#ifdef USE_WHATEVER
int othervar = 0;
#endif /* USE_WHATEVER */
/* some code */
#ifdef USE_WHATEVER
if( condition ) {
othervar++;
/* do other things with othervar */
}
#endif /* USE_WHATEVER */
变量othervar
只在#ifdef
块内部使用。由于整个 #ifdef
块是一个 if
语句,我可以将 othervar
的声明拉到 if
块中 :
int myfunction(void) {
int condition = 0;
/* some code */
#ifdef USE_WHATEVER
if( condition ) {
int othervar = 0;
othervar++;
/* do other things with othervar */
}
#endif /* USE_WHATEVER */
在我看来,这比第一个示例要清晰得多。但是,这样做有什么缺点(性能,...)吗?
不,除非您想在块中使用变量,否则没有缺点 scope.The 唯一的问题是这种定义,即代码之间的变量定义在某些情况下可能不被接受标准。
在c89中,变量只能在块的开头声明。一些 ppl/coding 标准会将所有变量声明放在函数的顶部,就像您在这里看到的那样。但是,可以在任何块的开头声明变量。
你需要考虑othervar
的范围。如果它仅在 if
块内使用,则将声明移动到 if
块的开头是安全的。
应该没有任何性能缺陷。编译器不太可能为这两种情况生成完全相同的代码。
我在封装在 #ifdef
块中的函数中具有该功能,该块附有 if()
语句:
int myfunction(void) {
int condition = 0;
#ifdef USE_WHATEVER
int othervar = 0;
#endif /* USE_WHATEVER */
/* some code */
#ifdef USE_WHATEVER
if( condition ) {
othervar++;
/* do other things with othervar */
}
#endif /* USE_WHATEVER */
变量othervar
只在#ifdef
块内部使用。由于整个 #ifdef
块是一个 if
语句,我可以将 othervar
的声明拉到 if
块中 :
int myfunction(void) {
int condition = 0;
/* some code */
#ifdef USE_WHATEVER
if( condition ) {
int othervar = 0;
othervar++;
/* do other things with othervar */
}
#endif /* USE_WHATEVER */
在我看来,这比第一个示例要清晰得多。但是,这样做有什么缺点(性能,...)吗?
不,除非您想在块中使用变量,否则没有缺点 scope.The 唯一的问题是这种定义,即代码之间的变量定义在某些情况下可能不被接受标准。
在c89中,变量只能在块的开头声明。一些 ppl/coding 标准会将所有变量声明放在函数的顶部,就像您在这里看到的那样。但是,可以在任何块的开头声明变量。
你需要考虑othervar
的范围。如果它仅在 if
块内使用,则将声明移动到 if
块的开头是安全的。
应该没有任何性能缺陷。编译器不太可能为这两种情况生成完全相同的代码。