当我在IF体内声明变量时有任何缺点吗?

时间:2016-11-28 09:05:09

标签: c c89 variable-declaration

我在函数内部有这个功能,该函数封装在#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 */

这对我来说比第一个例子更清洁。但是,这样做是否有任何缺点(性能,......)?

2 个答案:

答案 0 :(得分:1)

在c89中,变量只能在块的开头声明。一些ppl /编码标准会将所有变量声明放在函数的顶部,就像你在这里看到的那样。但是,变量可以在任何块的开头声明。

您需要考虑othervar的范围。如果仅在if块内使用它,则可以将声明移动到if块的开头。

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

答案 1 :(得分:0)

不,除非你想在块范围内使用变量,否则没有缺点。唯一的问题是这种定义,即代码之间的变量定义可能在某些标准中不被接受。