繁体   English   中英

c ++中的extern const

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM