[英]extern const in c++
我有一个名为abc.h的头文件,其中我想用外部链接定义一个常量。 因此它包含声明
--------------- abc.h -------------------------
extern const int ONE = 1;
接下来,我有main.cpp,我想使用ONE的值。 因此我在使用它之前在main.cpp中声明了ONE
--------------- main.cpp中---------------------
extern const int ONE;
int main()
{
cout << ONE << endl;
}
我收到错误“ONE的多个定义”。
我的问题是,如何使用外部链接声明一个const,并在随后的不同文件中使用它,这样常量只有一个内存位置,而不是每个包含常量静态版本的文件。
我从main.cpp中删除了#include“abc.h”,一切正常。
g ++ abc.h main.cpp -o main
ONE的地址在标题和主要内容中相同。 所以它有效。
但是我不明白编译器如何在main.cpp中解析ONE而没有include语句的定义
似乎g ++做了一些魔术。 这是一个不好的做法,main.cpp的读者不知道ONE声明在哪里,因为main.cpp中没有包含“abc.h”?
abc.h:
extern const int ONE;
abc.cpp:
#include "abc.h"
const int ONE = 1;
main.cpp中:
#include "abc.h"
int main() {
cout << ONE << endl;
}
命令行
g ++ abc.h main.cpp -o main
导致编译器使用头文件abc.h作为另一个模块。
通常一个人使用#include“abc.h”并编译:
g ++ main.cpp -o main
线
extern const int ONE = 1;
是一个定义 ,因此它应该只存在于一个模块中。 在标题中我们放置声明 (没有实际值的赋值):
extern const int ONE;
它们可以多次包含在模块中。 当您包含此类声明时,您的定义可以省略“extern”:
#include "abc.h"
const int ONE = 1;
(这个问题现在已经有7年了,所以作者已经肯定知道了,但我想为其他人澄清一下。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.