在C编程语言中,我的理解是变量只能在代码块的开头定义,而变量将具有声明它的块的范围.考虑到这一点,我想知道它是否是被认为是人为地创建新范围的不良做法,如下例所示:
void foo() { ... Do some stuff ... if(TRUE) { char a; int b; ... Do some more stuff ... } ... Do even more stuff ... }
假设在宏定义中将TRUE设置为1,这段代码是否会被认为是"好代码",或者是否会使经验丰富的程序员在想到它时感到畏缩?
感谢您的输入!
编辑:为了回应一些答案,我正在使用的代码需要与一些非常古老的遗留系统一起工作.虽然按照C99的假设进行操作会很好,但我们真的无法保证他们会拥有它.
你甚至不需要if语句.您可以使用{}创建块
那应该是一个单独的功能.
这里的例子:
#includeint main(int argc, char **argv) { int i = 0; { int i = 10; printf("%d\n", i); } printf("%d\n", i); }
据我所知,你可以创建一个没有if的范围.
像这样使用大括号:
{ int x; }
我推荐反对
if (TRUE)
因为它阻碍了可读性.
您可能想要为该范围创建一个新函数.
如果它确实需要拥有它自己的范围,那么无论如何它可能是一个单独的逻辑功能.
因为你可以在没有if的情况下制作示波器块,这是一个更好的主意.
void foo() { ... Do some stuff ... { char a; int b; ... Do some more stuff ... } ... Do even more stuff ... }
请注意,在C99中,允许在块的中间声明局部变量.
C99是1999年的C标准版本; 大多数现代C编译器都支持它.
首先,新块不需要是if块.它可能只是由大括号包围的代码段,如下所示:
void foo() { ... Do some stuff ... { char a; int b; ... Do some more stuff ... } ... Do even more stuff ... }
其次,在任何符合C标准的现代C编译器(我认为C99)中,您可以在块中的任何位置声明变量,因此您根本不需要创建新块.