作为全局变量,static int a和int a是一样的吗?????

CCjiajia101 2004-12-11 04:35:41
虽然第一个是静态,但作为全局变量是一样的吗?在不同地方可有不同的作用?在非主函数的体内定义不讨论
...全文
2316 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sanco 2004-12-14
  • 打赏
  • 举报
回复
静态存储区 和 全局数据区 是一个数据区吧。
只是分为初始化的 和未初始化的。
lovessm 2004-12-13
  • 打赏
  • 举报
回复
给个测试程序:

/* test1.h */
#ifndef __TEST1_H__
#define __TEST1_H__

int a; /* 临时定义,并未真正分配空间 */

void test1();

#endif
/* test1.c */
#include "test1.h"

void test1()
{
printf("a in test1.c: %d\n",a);
}
/* test2.h */
#ifndef __TEST2_H__
#define __TEST2_H__

int a; /* 临时定义 */

void test2();

#endif
/* test2.c */
#include "test2.h"

void test2()
{
printf("a in test2.c: %d\n",a);
}
/* main.c */
#include "test1.h"
#include "test2.h"

int a=1; /* 真正定义,分配了真正的存储空间,并进行了初始化 */
int main()
{
test1();
test2();
return 0;
}

/* 运行结果 */
a in test1.c: 1
a in test2.c: 1

/* 补充要说的 */
如果到最后还是没发现变量的真正定义,那么就会选择“最后”一个作为真正定义。
lovessm 2004-12-13
  • 打赏
  • 举报
回复
你给每个加上static,限制变量的可视区为本文件域!

Popo_CN(Popo_CN) 说的有问题,你的程序就算不加static编译也是通过的,原因再于一个“临时定义”的概念,即多个变量声明,如果都不赋初值,那么这些只能算是临时的定义,因此不管你临时定义多少次,都是不会冲突的。
daikaiming 2004-12-12
  • 打赏
  • 举报
回复
同意上面的意见!!!
yangfasheng 2004-12-12
  • 打赏
  • 举报
回复
Microsnow(冰火) ( ) 信誉:100

=======================

说得不错!
Popo_CN 2004-12-12
  • 打赏
  • 举报
回复
Static 为文件级
test1.c

int a;
void test1(){
printf("%d\n",a);
}

test2.c
int a;
void test2(){
printf("%d\n",a);
}

maintest.c
#include "test1.h"
#include "test2.h"

int main(){
;
}
编译时候会报错。加上static 问题解决
peng22277 2004-12-12
  • 打赏
  • 举报
回复
静态存储区vs全局数据区???
lovessm 2004-12-12
  • 打赏
  • 举报
回复
1、影响作用域
static int i; /* i只在本文件中可见,即你不能通过extern引用 */
int i; /* i可在别的文件中通过extern引用 */
2、影响存储的区域
static int i; /* 编译器在编译时,会将其存储在静态存储区 /
int i; /* 会存储在全局数据区 */

但是,二者在编译时,如果不明写初始化,编译器会自动把二者初始化为0,这点二者相同。
bingbing1981 2004-12-12
  • 打赏
  • 举报
回复
不一样
时间同
空间不同
sharkhuang 2004-12-12
  • 打赏
  • 举报
回复
不一样的!static还有限制变量的作用范围。所以你能看到很多这样的定义
#define LOCAL static
fanlord 2004-12-11
  • 打赏
  • 举报
回复
static用在函数内,可使静态变量局部化。
anncanm 2004-12-11
  • 打赏
  • 举报
回复
static int a 如果在非主函数中,生存周期是整个程序吧!在一次调用的时候它的值还是存在!
在外部static int a ;和int a ; 是一样的,全局变量默认为static 的,好象是这样,我这么理解的!
flyingsnow1999 2004-12-11
  • 打赏
  • 举报
回复
同意楼上
greenteanet 2004-12-11
  • 打赏
  • 举报
回复
引用:
static int a只被本文件可见,外部文件不可见;而int a如果在外部文件作以下声明: extern int a,那么它在声明的文件里也是可见的.
wen167 2004-12-11
  • 打赏
  • 举报
回复
如果缺省的全局变量,系统会认为是extern int a,?此为愚弟意见
idler 2004-12-11
  • 打赏
  • 举报
回复
ah,冰火兄正解,C语言好基础
wen167 2004-12-11
  • 打赏
  • 举报
回复
同意冰火老兄
melonliu 2004-12-11
  • 打赏
  • 举报
回复
冰火正确!影响作用域
Joe 2004-12-11
  • 打赏
  • 举报
回复
static int a只被本文件可见,外部文件不可见;而int a如果在外部文件作以下声明: extern int a,那么它在声明的文件里也是可见的.
「已注销」 2004-12-11
  • 打赏
  • 举报
回复
个人认为是一样的,生存期一样。
加载更多回复(1)

69,390

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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