根据我收集的内容,c ++中的'extern'关键字可用于告诉编译器变量是在另一个.cpp文件中定义的。我想知道这个定义是否必须是显式的,或者是否可以通过.cpp文件中定义变量的函数通过副作用来改变定义。
即
//a.h
extern int foo;
//a.cpp
#include <a.h>
int foo=0;
int func(int &foo) // EDIT: oops, forgot the type for the parameter and return statement
{
foo = 10;
return 5;
}
int x = func(foo); // EDIT: changed to match declaration and assigned function to dummy variable
//b.cpp
#include <a.h>
int main()
{
cout << foo;
return 0;
}
程序能识别出foo应该是10,还是0?如果编译器将foo识别为0,有没有办法让它识别为10? 另外,我不能自己编译和测试的原因是我不确定如果有多个文件时如何编译,我是新的=)。
编辑:感谢错误指针,但我想主要的问题仍然是b.cpp是否能看到foo是10还是0.欢呼!答案 0 :(得分:2)
如果你纠正了所有的语法错误并构建了整个项目,那么在文件中会有一个名为'foo'的整数,并且可以从两个源读取和写入它。将其设置为任何地方的值将被任何其他地方读取。
答案 1 :(得分:2)
应该是10。
<强>解释强>
首先是声明
int x=func(foo);
在输入main
功能之前和之后将调用
int foo=0;
其次,foo
中的func
会隐藏全局foo
,因此foo
中的func
将仅通过引用应用于传入参数
第三,您的代码不会被编译。原因1:您没有使用系统中的标头,因此您需要#include "header.h"
而不是#include <header.h>
。原因2:对于cout
,有必要#include <iostream>
并写std::cout
,假设您没有使用过时的VC 6.0。