C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在C中的给定相同范围内声明相同的变量名称大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试理解C中的存储类说明符.我有两个案子.

这里,在给定的相同范围内,声明相同的变量名称.

情况1:

#include <iostream>

static int i; 
extern int i; 

int main() {
    std::cout<<i<<std::endl;
    return 0;
}@H_618_12@ 
 

输出

0@H_618_12@ 
 

案例2:

#include <iostream>

extern int i; 
static int i; 

int main() {
    std::cout<<i<<std::endl;
    return 0;
}@H_618_12@ 
 

得到错误

prog.cpp:4:12: error: 'i' was declared 'extern' and later 'static' [-fpermissive]
 static int i; 
            ^
prog.cpp:3:12: note: prevIoUs declaration of 'i'
 extern int i;@H_618_12@ 
 

为什么第一种情况正常,而第二种情况却出错?

解决方法

extern有点特殊,因为标有它的声明会查找同一实体的先前声明,如果找到,则使用之前的链接.只有当它找不到时才会声明具有外部链接的新实体.

另一方面,static无条件地声明其实体具有内部链接.

这意味着此代码只是通过内部链接声明和定义i.第二个声明找到第一个并重新使用它的链接.

static int i;
extern int i;@H_618_12@ 
 

而此代码声明变量具有外部链接,然后声明并定义它以具有内部链接,这是一个错误.

extern int i;
static int i;@H_618_12@ 
 

这种行为的原因很难跟踪,但最有可能回到C标准前的日子.

在C中,此行为由[basic.link]指定,在最新的N4687草案中为6.5 / 6:

大佬总结

以上是大佬教程为你收集整理的在C中的给定相同范围内声明相同的变量名称全部内容,希望文章能够帮你解决在C中的给定相同范围内声明相同的变量名称所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。