C++ 为什么函数不需要外部变量,而变量需要外部变量

C++ 为什么函数不需要外部变量,而变量需要外部变量,c++,function,variables,extern,C++,Function,Variables,Extern,对不起,伙计们,我知道我的英语不好,但我举了一些例子,这样我的问题就更清楚了。 a.cpp #include <iostream> using namespace std; void funcfoo(){ cout << "test only" << endl; } int varfoo = 10; #包括 使用名称空间std; void funcfoo(){ cout当你从extern void funcfoo();中删除extern时,你是

对不起,伙计们,我知道我的英语不好,但我举了一些例子,这样我的问题就更清楚了。

a.cpp

#include <iostream>

using namespace std;

void funcfoo(){
    cout << "test only" << endl;
}

int varfoo = 10;
#包括
使用名称空间std;
void funcfoo(){

cout当你从
extern void funcfoo();
中删除
extern
时,你是在向前声明它,这样你下面的代码就会知道
funcfoo()
是什么。如果你对一个变量这样做,你实际上是在实例化它,并且会与你的其他文件冲突。因此
extern
是这样说的“它是存在的,相信我;)”它可以从您的另一个文件中得到解决。

问题在于每行代码的含义。
int varfoo
是变量的定义,而
void funcfoo()
只是一个声明。您可以提供一个实体的多个声明,但只能提供一个定义。提供声明和变量声明的语法是通过添加
extern
关键字:
extern int varfoo;
是一个声明


3.1[basic.def]/2声明是一种定义,除非声明函数时未指定函数体(8.4),它包含外部说明符(7.1.1)或链接规范25(7.5),且既不包含初始值设定项,也不包含函数体[…]


另一种考虑方法是,当您执行int-varfoo时,会分配内存来保存变量,因此它既是定义又是声明,当您执行int-foo()时函数是声明的,但没有定义,因此在某种程度上没有分配内存。对于函数,默认情况下链接是外部的,因此删除它并不重要,但是对于变量,如果你说extern int varfoo,编译器将不会为它分配内存——它将假定变量是在其他地方定义的。

我知道这可能是一个错误te,但我希望这在某种程度上有所帮助。检查下面的链接,它将给出什么是extern以及它是如何工作的想法

http://www.geeksforgeeks.org/understanding-extern-keyword-in-c/

谢谢你

See--函数默认有外部链接;关键字是多余的。我认为定义类似于int varfoo=value;,然后int varfoo;是声明。我是不是错了?int varfoo;@user1628256:是的。
int varfoo;
是一个没有初始化的定义,
int varfoo=value;
是一个带有initi的定义alization.int varfoo=value;@user1628256
int-var;
http://www.geeksforgeeks.org/understanding-extern-keyword-in-c/