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

时间:2017-01-17 17:46:02

标签: c++

我尝试了以下代码并收到错误。

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

我见过关于extern的一些答案,比如

When to use extern in C++

Defining extern variable in main() vs. globally

并得到了一个概念,但我仍然想知道编译器在这种情况下做了什么。在某些功能中可以使用extern(合法)吗?

更新

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

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

  

但我仍然想知道编译器在这种情况下做了什么。在某些功能中可以使用extern(合法)吗?

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

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

int x; 

答案 2 :(得分:0)

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

关于编译器做什么的问题,dreamlax对您链接的问题的answer处理得很好。除了它的类型之外,编译器不需要知道/知道任何其他内容,以便它知道如何使用它。链接器将看到它是一个extern并知道它需要找到它实际声明的位置。

This MSDN链接提供了有关外部网的更多常规信息以及Microsoft在VS 2015中的功能。

相关问题