extern 为什么可以这样使用呢?

bsnry 2012-03-10 11:39:28
//test.cpp
static int m = 10;
int *p = &m;
//main.cpp
#include<iostream>
extern int m;
extern int *p;
int main()
{
std::cout << m << std::endl;
std::cout << *p << std::endl;
return 0;
}
//I:\learn C++\Learn C++\main.cpp|6|undefined reference to `m'|



这段代码 是一个帖子上的。


不明白已经定义为static的 东东,还可以再次变声明成 extern??


c++为什么会 引入自相矛盾的 语法

...全文
127 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ppsharp 2012-03-10
  • 打赏
  • 举报
回复
一个是定义,一个是申明

不在一个文件里,申明了才可以拿来用啊
面包大师 2012-03-10
  • 打赏
  • 举报
回复
这个帖子可以不用看了。。。不要学这些奇怪的东西
Binzo 2012-03-10
  • 打赏
  • 举报
回复
extern 是在告诉编译器,我在这声明,在别的地方定义了,不要报错。
蓝枫10 2012-03-10
  • 打赏
  • 举报
回复
我要告诉你static与extern是一对“水火不容”的家伙,也就是说extern和static不能同时修饰一个变量;其次,static修 饰的全局变量声明与定义同时进行,也就是说当你在头文件中使用static声明了全局变量后,它也同时被定义了;最后,static修饰全局变量的作用域 只能是本身的编译单元,也就是说它的“全局”只对本编译单元有效,其他编译单元则看不到它
就这句话···
pengfoo 2012-03-10
  • 打赏
  • 举报
回复
xspace_time 2012-03-10
  • 打赏
  • 举报
回复
编译器给出error LNK2001: unresolved external symbol "int m" (?m@@3HA)
xiyoulaoyuanjia 2012-03-10
  • 打赏
  • 举报
回复
不能这么使用的。static 限于本文件使用!

[Quote=引用楼主 bsnry 的回复:]
C/C++ code
//test.cpp
static int m = 10;
int *p = &m;
//main.cpp
#include<iostream>
extern int m;
extern int *p;
int main()
{
std::cout << m << std::endl;
std::cout << *p << std::endl;
……
[/Quote]

64,666

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧