Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 局部变量auto int a和int a之间有什么区别?_C - Fatal编程技术网

C 局部变量auto int a和int a之间有什么区别?

C 局部变量auto int a和int a之间有什么区别?,c,C,存储类标识符auto的用例?我知道默认情况下所有局部变量都是自动的。但是显式地写auto int a有什么区别呢 严格说来没有区别 { auto int a; /* ... */ } 及 它们是等价的 通常的做法是不将自动说明符置于指定位置。有两种可能的情况: auto是默认值,显式添加关键字不会产生任何效果 不允许使用auto(例如,在全局变量上),在这种情况下,添加auto会阻止代码编译 在现代的C语言(C89、C99、C11)中,auto关键字是多余的。除了使意图显式(“这是

存储类标识符auto的用例?我知道默认情况下所有局部变量都是自动的。但是显式地写auto int a有什么区别呢

严格说来没有区别

{
   auto int a;
   /* ... */
}

它们是等价的


通常的做法是不将
自动
说明符置于指定位置。

有两种可能的情况:

  • auto
    是默认值,显式添加关键字不会产生任何效果
  • 不允许使用
    auto
    (例如,在全局变量上),在这种情况下,添加
    auto
    会阻止代码编译
  • 在现代的C语言(C89、C99、C11)中,
    auto
    关键字是多余的。除了使意图显式(“这是一个非静态变量,我是认真的!”),它不再有任何用途。它是C历史的残余,从B继承而来,但很像
    entry
    关键字实际上已经过时了

    我一生中用过一次。它与隐式int一起位于IOCCC条目中:

     drive () { auto motive; ... }
    

    局部变量和自动变量之间的差别很小

    #include<stdio.h>
    int fun()
    {
            auto int a=20;
            printf("%d\n",a);
            a++;
            return 0;
    }
    int main()
    {       
            fun();
            fun();
            return 0;
    }
    
    #include<stdio.h>
    int fun()
    {
            int a=20;
            printf("%d\n",a);
            a++;
            return 0;
    }
    int main()
    {       
            fun();
            fun();
            return 0;
    }
    
    我们可以使局部变量
    inta=20到任何存储类变量
    像
    autointa=20
    静态int a=20但当我们指定
    任何与自动相似的变量
    auto int a=20那么它将永远不会成为
    其他存储类,如
    静态
    寄存器
    等,我们无法写入 如
    静态自动积分a=20。其他内容与堆栈段中的内存完全相同。下面是生成相同输出的自动变量示例

    用于自动变量

    #include<stdio.h>
    int fun()
    {
            auto int a=20;
            printf("%d\n",a);
            a++;
            return 0;
    }
    int main()
    {       
            fun();
            fun();
            return 0;
    }
    
    #include<stdio.h>
    int fun()
    {
            int a=20;
            printf("%d\n",a);
            a++;
            return 0;
    }
    int main()
    {       
            fun();
            fun();
            return 0;
    }
    
    #包括
    int fun()
    {
    自动积分a=20;
    printf(“%d\n”,a);
    a++;
    返回0;
    }
    int main()
    {       
    乐趣();
    乐趣();
    返回0;
    }
    
    对于局部变量

    #include<stdio.h>
    int fun()
    {
            auto int a=20;
            printf("%d\n",a);
            a++;
            return 0;
    }
    int main()
    {       
            fun();
            fun();
            return 0;
    }
    
    #include<stdio.h>
    int fun()
    {
            int a=20;
            printf("%d\n",a);
            a++;
            return 0;
    }
    int main()
    {       
            fun();
            fun();
            return 0;
    }
    
    #包括
    int fun()
    {
    INTA=20;
    printf(“%d\n”,a);
    a++;
    返回0;
    }
    int main()
    {       
    乐趣();
    乐趣();
    返回0;
    }
    
    我到处都能找到,这意味着auto关键字没有特殊意义。@vkesh这对C是正确的。“
    auto
    ”意味着“not
    static
    ”,这是默认值。它在其前身B中有更大的影响。它们是等效的还是完全相同的?您的意思是第二种可能的情况,即如果我们将自动添加到全局变量,则会阻止定义全局变量??如果是这样的话,如果你知道什么,那用例是什么?@vkesh:我的意思是,如果你试图为一个全局变量指定
    auto
    ,那么代码将无法编译(无论如何,使用一个功能正常的编译器)。至于“什么是用例”,我的观点是没有。可能的重复