在 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 块的开头是安全的。

应该没有任何性能缺陷。编译器不太可能为这两种情况生成完全相同的代码。