我对于在我的extern.cpp文件中,使用
如果我从“extern const int my_int = 1;”中删除“extern”,那么我会得到“undefined reference to 'my_int'”。如果我在“const char* my_str = "FOO";”中添加“extern”,则会收到一个警告“'my_str' initialized and declared 'extern'”。为什么我需要在“my_int”上使用“extern”,但是将其添加到“my_str”会生成警告?
这是在gcc 10.1.0上运行的C++17。具体命令如下:
int
和char*
的定义时,是否需要extern
感到困惑。我有以下测试程序:// extern.cpp
extern const int my_int = 1;
const char* my_str = "FOO";
// main.cpp
#include <iostream>
extern const int my_int;
extern const char* my_str;
int main() {
std::cout << my_int;
std::cout << my_str;
return 0;
}
如果我从“extern const int my_int = 1;”中删除“extern”,那么我会得到“undefined reference to 'my_int'”。如果我在“const char* my_str = "FOO";”中添加“extern”,则会收到一个警告“'my_str' initialized and declared 'extern'”。为什么我需要在“my_int”上使用“extern”,但是将其添加到“my_str”会生成警告?
这是在gcc 10.1.0上运行的C++17。具体命令如下:
/usr/bin/g++-10 -g -std=gnu++17 -o main.cpp.o -c main.cpp
/usr/bin/g++-10 -g -std=gnu++17 -o extern.cpp.o -c extern.cpp
/usr/bin/g++-10 -g main.cpp.o extern.cpp.o -o TestExtern
my_str
不是const
。 - user253751extern
永远不应与初始化一起使用。在头文件中使用extern
,然后在某个c
或cpp
文件中定义实际变量,而不使用extern
。来自头文件的extern
声明可以在作用域内,并且其类型必须匹配。 - Zan Lynxmy_str
改为const char * const my_str
,那么你仍然会遇到同样的问题。 - Slava