我在函数内部有这个功能,该函数封装在#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 */
这对我来说比第一个例子更清洁。但是,这样做是否有任何缺点(性能,......)?
答案 0 :(得分:1)
在c89中,变量只能在块的开头声明。一些ppl /编码标准会将所有变量声明放在函数的顶部,就像你在这里看到的那样。但是,变量可以在任何块的开头声明。
您需要考虑othervar
的范围。如果仅在if
块内使用它,则可以将声明移动到if
块的开头。
应该没有任何性能缺陷。编译器不太可能为这两种情况生成完全相同的代码。
答案 1 :(得分:0)
不,除非你想在块范围内使用变量,否则没有缺点。唯一的问题是这种定义,即代码之间的变量定义可能在某些标准中不被接受。