为什么“extern”关键字在同一个文件中不起作用?

-8 c++ conditional-operator extern

请参阅下面的示例代码以了解“extern”的使用。当我在代码中使用 extern 关键字时,出现编译错误。请提出问题的解决方案。

#include<iostream>

  extern int x;
  extern int y;
  extern int z;

int main(){
    
    x = 10;
    y = 15;
    
    z = (x>y ? x: y);
    
    std::cout<<z;
     
    return 0;
}

Run Code Online (Sandbox Code Playgroud)

错误信息:

example8.cpp:(.rdata$.refptr.z[.refptr.z]+0x0): undefined reference to `z';
example8.cpp:(.rdata$.refptr.y[.refptr.y]+0x0): undefined reference to `y';
example8.cpp:(.rdata$.refptr.x[.refptr.x]+0x0): undefined reference to `x';
F:\DEVC_workspace\collect2.exe  [Error] ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

Jef*_*ica 5

extern int x;
Run Code Online (Sandbox Code Playgroud)

告诉编译器:“我会int x在其他编译单元中为您提供一个”。请期待在链接时找到它。

所以,你需要另一个文件:

示例8b.cpp

int x = 0;
int y = 0;
int z = 0;
Run Code Online (Sandbox Code Playgroud)

并且您需要链接项目中的两个文件。

最重要的是

是什么让你选择把xyz为外部摆在首位?

结束下面的讨论:

  • extern int x; 意思是“某处会有一个 x”
  • int x;意思是“请放在x这里”
  • undefined reference to x 意思是“我没有找到你想让 x 去的地方”

编译器需要一个地方来放置你的x. 你没有给它这样的地方,因为extern专门要求编译器不要放在x那里。错误是编译器告诉你把它放在x某个地方。

  • @SaikatGuha “extern” 是什么缩写? (3认同)