经过长时间停顿后,我再次被迫使用C EDIT(版本C89)。真正令人不安的是,开头的变量声明违反了这个C++ well-coding rule。客户的功能很庞大,每个功能开头的变量列表几乎无法管理。可以使用范围来解决这个问题吗?是适当的还是" hack"?
第一种情况。代替:
{//Beginning of the function
int i;
int Important=0;
使用:
{//Beginning of the function
int Important=0;
//... code
{ int i; for (i=0,... } //use i in close scope
第二种情况:
{//Beginning of the function
int i;
// many other var definitions
if ( !initialized ) return;
使用:
{//Beginning of the function
{if ( !initialized ) return; ... other checks}
int i;
// many other var definitions
答案 0 :(得分:10)
你从C暂停一定已经有20年了,因为C允许变量声明在任何地方长久。只需使用符合标准的现代C编译器,然后确保您的C知识是最新的,然后所有这些问题都将消失。例如gcc编译器,版本5.x或更高版本。
答案 1 :(得分:4)
或许,你经历了一个长时间的停顿,或者是一个没有让自己更新的人教过C.
从c99开始,在任何你喜欢的地方声明一个变量是完全没问题的。
最小例子:
int main(void) {
int a = 1;
for(int i = 0; i < 2; ++i)
a = i;
int b = a;
return 0;
}
答案 2 :(得分:1)
好的,因为您无法切换到现代编译器,正如您在现在编辑的问题和一些注释中所表达的那样,我的想法是:
不引入人工作用域。这不会让你(和其他人)的生活变得更容易。我宁愿建议只留下99 C之前给你带来的东西,因为额外的括号和额外的缩进级别(如果格式正确)过重会影响更多局部范围的优点。
如果已经有块范围,请尽可能多地移动变量。
如果您因其他原因无需修改现有代码,请不要触摸它。
如果你有大功能并且害怕丢失概述,可以考虑将它们分成小块。如果要从原始函数仅调用这些片段,请将它们内联。 (即使使用C99或C11,最后一点也是一般性建议......)。