use*_*256 2 c++ variables function extern
对不起伙计我知道我的英语不好,但我做了一些例子,以便我的问题更加清晰.
a.cpp
#include <iostream>
using namespace std;
void funcfoo(){
cout << "test only" << endl;
}
int varfoo = 10;
Run Code Online (Sandbox Code Playgroud)
b.cpp
#include <iostream>
using namespace std;
extern void funcfoo();
extern int varfoo;
int main(){
funcfoo();
cout << varfoo;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
然后我像这样编译它"cl b.cpp a.cpp"
我的问题是.为什么我在void funcfoo()之前删除"extern关键字"它工作正常,但是当我在int var foo之前删除extern关键字时出现错误?
问题在于每行代码的含义.int varfoo是变量的定义,而void funcfoo()只是一个声明.您可以提供实体的多个声明,但只能提供一个定义.提供声明和仅声明变量的语法是通过添加extern关键字:extern int varfoo;是声明
3.1 [basic.def]/2声明是一个定义,除非声明一个函数而没有指定函数的主体(8.4),它包含extern说明符(7.1.1)或linkage-specification25(7.5),既不是初始化器也不是初始化器功能体[...]