在C中使用范围

时间:2018-01-26 09:19:07

标签: c scope

经过长时间停顿后,我再次被迫使用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

3 个答案:

答案 0 :(得分:10)

你从C暂停一定已经有20年了,因为C允许变量声明在任何地方长久。只需使用符合标准的现代C编译器,然后确保您的C知识是最新的,然后所有这些问题都将消失。例如gcc编译器,版本5.x或更高版本。

答案 1 :(得分:4)

或许,你经历了一个长时间的停顿,或者是一个没有让自己更新的人教过C.

开始,在任何你喜欢的地方声明一个变量是完全没问题的。

最小例子:

int main(void) {
    int a = 1;
    for(int i = 0; i < 2; ++i)
        a = i;
    int b = a;
    return 0;
}

答案 2 :(得分:1)

好的,因为您无法切换到现代编译器,正如您在现在编辑的问题和一些注释中所表达的那样,我的想法是:

  1. 引入人工作用域。这不会让你(和其他人)的生活变得更容易。我宁愿建议只留下99 C之前给你带来的东西,因为额外的括号和额外的缩进级别(如果格式正确)过重会影响更多局部范围的优点。

  2. 如果已经有块范围,请尽可能多地移动变量。

  3. 如果您因其他原因无需修改现有代码,请不要触摸它。

  4. 如果你有大功能并且害怕丢失概述,可以考虑将它们分成小块。如果要从原始函数调用这些片段,请将它们内联。 (即使使用C99或C11,最后一点也是一般性建议......)。