社区
C语言
帖子详情
请问static 和 extern 的区别
zj_zyq
2002-02-25 05:51:57
请问static 和 extern 的区别
例
//example.h
int a;
extern int b;
////
Ctrl F5;
Error Link ... example.obj; why
static int c;
void AA()
{
c++;
cout<<c;
}
void main
{
AA();
c++;
cout<<c;
}
output
11 Why
...全文
382
13
打赏
收藏
请问static 和 extern 的区别
请问static 和 extern 的区别 例 //example.h int a; extern int b; //// Ctrl F5; Error Link ... example.obj; why static int c; void AA() { c++; cout<<c; } void main { AA(); c++; cout<<c; } output 11 Why
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zj_zyq
2002-02-27
打赏
举报
回复
在《MFC深入浅出》中
//mfc.h
//mfc.cpp
extern CWinApp theapp;
//my.h
//my.cpp
CWinApp theapp;
void main()
{
CWinApp* APP=GetApp();
...
}
}
1\
extern CWinApp theapp;//为什么不放在 mfc.h中声明
2、
CWinApp theapp;//难道不是重复声明吗,或有其他含义吗
zj_zyq
2002-02-27
打赏
举报
回复
1、
// wnd.h
int a;
extern int b;
static c;
会出现Errof Link *.obj Why; 针对int a; extern int b;出错
// wnd.cpp
LERESULT CALLBACK WndProc(...)
{
...
case WM_PAINT:
c=1;
return 0;
...
}
///////////////
2、
//myprogram.h
#include *.h
//myprogram.cpp
bool CALLBACK DlgProc(...)
{
...
case WM_PAINT:
output(c);//输出C
return 0;
...
}
结果有时是1,有时是0,Why
sdmity
2002-02-27
打赏
举报
回复
extern CWinApp theapp 不是变量定义,CWinApp theapp才是,它只是在这个文件(mfc.cpp)中对在别的文件中定义的变量(my.cpp)的引用,不放在mfc.h中是因为并不是所有用到mfc.h的文件都需要这个变量。所以,CWinApp theapp不是重复声明。
Last_Dodo
2002-02-26
打赏
举报
回复
extern只能用来修饰变量/函数的声明(declaration)。它的意思是:变量/函数已经定义,我要用它。此变量/函数可以是别的模块(module)定义的,也可以是当前模块定义的。它修饰的变量不一定是全局变量但若是别的模块定义的,它必定是全局变量而且不是静态(static)全局变量。若修饰的是函数,当前文件内不能有同名函数(有些编译器允许有同名函数但它必须是静态即static而且extern指的总是这静态函数)。
下面的例子可帮助理解:
In a.C:
#include <iostream.h>
int i = 100;
void foo()
{
cerr << "In a.C foo()\n";
}
In main.C:
#include <iostream.h>
extern int i;
void test()
{
cerr << i << endl; //i自然是100
extern void foo();
foo(); //哪个foo()?
}
static void foo() //有些编译器允许
{
cerr << "In b.C foo()\n";
}
int main()
{
int i = 0;
extern int i;
cerr << i << endl; //哪个i?
{
extern int i;
cerr << i << endl; //现在又是哪个i?
}
test();
extern void foo();
foo(); //哪个foo?
}
static修饰变量时,既可以修饰变量的定义(definition)也可以修饰变量的声明。
static int i; //如果是在类里,修饰的是声明。如果是在类外修饰的是定义。
static还可以用来修饰函数的声明或定义。
static void foo(); //修饰的是函数声明。
static void foo() //修饰的是函数定义
{
...
}
它的意思是:
1。如果在类里,修饰的变量/函数是类变量/函数。
2。如果在类外,修饰的变量/函数可见范围(scope)是整个文件内部,即其它模块是不能通过extern来调用它。
masterjames
2002-02-26
打赏
举报
回复
一个是静态,一个是全局,
静态应该用静态函数来访问。
全局都可以访问
zheng_can
2002-02-25
打赏
举报
回复
就你的程序来讲
在声明好 static int c 后,应该给它赋以初值(0),否则打印出任何数都是有可能的
zosatapo
2002-02-25
打赏
举报
回复
基本同意: hezh() 的观点。
static和extern都被称为"global"变量(或者函数)。
但是他们的生存周期和可见性是不同。static是文件级,
只有程序文件之间显式的包含才可以引用(主要就是使用#include)
但是extern是程序级的,你不必显式的引用文件的,但需要使用extern
存储空间修饰符,这个任务编译器,链接器帮你完成了。
可以参考一下下面的文章。
http://www.csdn.net/Develop/read_article.asp?id=12545
http://www.csdn.net/Develop/read_article.asp?id=12539
Witty
2002-02-25
打赏
举报
回复
static 声明需要初始化?
结合你的要求,给你一个例子
// TEST.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "h.h"
#include "iostream.h"
static int c;
extern int h;
void AA()
{
c++;
cout<<c;
}
int main(int argc, char* argv[])
{
AA();
c++;
cout<<c<<endl;
cout<<h<<endl;
return 0;
}
/*
* h.h
*/
int h ;
///////////
output:
12
0
//////////
对变量而言,static声明或定义一个静态变量
而extern 是引用已经声明的变量
wolfboy
2002-02-25
打赏
举报
回复
哦,说错了,对变量而言,static将声明或定义一个静态变量
extem外部声明或定义
wolfboy
2002-02-25
打赏
举报
回复
对函数而言,static将函数申明为局部函数,
对变量而言,则相反
Behard
2002-02-25
打赏
举报
回复
static:在程序的数据区
extern:是在不同的*.c/*.cpp 文件中的,只能定义一次,别的只是引用
hezh
2002-02-25
打赏
举报
回复
static 是文件级的,必须初始化,extem外部声明或定义!两个不同的概念
garfield_82
2002-02-25
打赏
举报
回复
我记得,static的作用域是整个文件范围,extern是多个文件之间。
extern
和
static
的详细用法
本文详细说明了
extern
和
static
的详细用法,看完之后您不会再对这两个东西糊涂了。
const,
extern
,
static
,volatile的使用
const,
extern
,
static
,volatile的使用
auto、register、
static
、
extern
等存储类修饰符的
区别
.
auto、register、
static
、
extern
等存储类修饰符的
区别
.
C中的auto、
static
、register和
extern
的
区别
C中的auto、
static
、register和
extern
的
区别
浅谈C/C++中的
static
与
extern
关键字的使用详解
本篇文章是对C/C++中的
static
与
extern
关键字的使用进行了详细的分析介绍,需要的朋友参考下
C语言
69,371
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章