繁体   English   中英

如果在函数内部使用extern声明怎么办?

[英]What if using extern declaration inside the function?

我尝试了以下代码,但出现错误。

int main()
{
    //this will cause redefinition error
    extern int x;
    int x=2; 
}

我已经看到了有关extern的一些答案,例如

何时在C ++中使用extern

在main()与全局中定义extern变量

有了一个概念,但是我仍然想知道在这种情况下编译器会做什么。 extern可以在某些函数内使用(合法)吗?

更新:

更具体地说,由于extern int x只是一个声明,为什么不能定义int x? 编译器是否将extern int x作为定义?

当然可以使用它,不要在函数内部定义另一个x

int main()
{
    extern int x;
    x=2; 
}

但是我仍然想知道在这种情况下编译器会做什么。 extern可以在某些函数内使用(合法)吗?

可以,但是您不能像在代码中那样重新声明变量。 因此,这是一个有效的示例:

int main()
{
    //this will cause redefinition error
    extern int x;
    x=2; 
}

int x; 

正如其他人回答的那样,是的,只要不使用该名称声明另一个变量,就可以在函数中使用它。

对于您的编译器功能问题,dreamlax对您链接的问题的回答非常好处理。 编译器不需要/不知道其类型是什么,因此知道如何使用它。 链接器将看到它是一个外部变量,并且知道它需要去查找实际声明的位置。

MSDN链接提供了有关externs以及Microsoft在VS 2015中所做的操作的更多常规信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM