社区
C语言
帖子详情
我对C语言中的static void func()不是很理解
taft
2005-02-17 06:43:46
在阅读一个开源代码时,我就是无法理解这个函数前加个static的意思,返回值是静态的?什么意思呢?谢谢大家的解答
...全文
1390
16
打赏
收藏
我对C语言中的static void func()不是很理解
在阅读一个开源代码时,我就是无法理解这个函数前加个static的意思,返回值是静态的?什么意思呢?谢谢大家的解答
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
sky911911
2005-02-18
打赏
举报
回复
最好能举个例子(关于static和extern的) 那样就鲜明多了!!!我早了一点。大家分享
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
内部函数和外部函数
函数一旦定义后就可被其它函数调用。 但当一个源程序由多个源文件组成时, 在一个源文件中定义的函数能否被其它源文件中的函数调用呢?为此,C语言又把函数分为两类:
一、内部函数
如果在一个源文件中定义的函数只能被本文件中的函数调用,而不能被同一源程序其它文件中的函数调用, 这种函数称为内部函
数。定义内部函数的一般形式是: static 类型说明符 函数名(形参表) 例如:
static int f(int a,int b) 内部函数也称为静态函数。但此处静态static 的含义已不是指存储方式,而是指对函数的调用范围只局限于本文件。 因此在不同的源文件中定义同名的静态函数不会引起混淆。
二、外部函数
外部函数在整个源程序中都有效,其定义的一般形式为: extern 类型说明符 函数名(形参表) 例如:
extern int f(int a,int b)如在函数定义中没有说明extern或static则隐含为extern。在一个源文件的函数中调用其它源文件中定义的外部函数时,应 用extern说明被调函数为外部函数。例如:
F1.C (源文件一)
main()
{
extern int f1(int i); /*外部函数说明,表示f1函
数在其它源文件中*/
……
}
F2.C (源文件二)
extern int f1(int i); /*外部函数定义*/
{
……
}
Rudy_zhuang
2005-02-18
打赏
举报
回复
对于全局的元素(这里是指不放在栈中的临时数据),如全局变量,函数,定义时出现static的作用是为了降低模块间的耦合度。即它不能被extern关键字来声明,否则会出现链接错误。
对于函数来说,它始终是位于文本段的,不象变量还有位置的差异,所以,对于用static限制定义的函数可以简单理解为是局部函数,外部不可直接访问(除非通过函数指针来找到这个函数的入口地址),不需要再考虑其他的了。
其实在这一点上,更多的是体现了一个程序员的编程风格。
若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量(用static来修饰),以降低模块间的耦合度
若全局变量仅在单个C文件中访问,则可以用static来修饰,将这个变量修改为静态全局变量,以降低模块间的耦合度;。
说明:当static用来修饰局部变量时,它改变了局部变量的存放位置,将其由原来的堆栈改为全局静态储存区,但是没有改变变量的作用域,还是局限在局部的{}里。
当static用来修饰全局变量时,它限制了全局变量的作用域,使其不能被别的程序extern,限制在了当前文件里,但是没有改变其存放位置,还是在全局静态储存区。
xuelong_zl
2005-02-18
打赏
举报
回复
回复人: nodummy(某人马甲的马甲的马甲) ( )
//===========================
谢谢你的指正,我也是初学,希望以后你多指教
我现在在概念上也明白一些了,不过上面所说的都是语法上的东东,我感觉读代码时重要的是分析思路和原因.
从上面的概念上看,我感觉是写这个程序的人,不希望别人能修改此函数,如果从接口的方面说,感觉就是写程序
的人不只希望它用于文件内部,而不希望这个函数成为接口
不知道高手们是如何看这个问题呢?
Great_Bug
2005-02-17
打赏
举报
回复
这个时候应当去找标准来看那。
bingbing1981
2005-02-17
打赏
举报
回复
加了这个static在其他文件中就见不到这个函数名了
kobefly
2005-02-17
打赏
举报
回复
文件作用域
bailingke
2005-02-17
打赏
举报
回复
static和extern这里是相对的。这个关键字有很多含义的。
Student02370236
2005-02-17
打赏
举报
回复
带了static关键字的变量或者函数在内存中不会有多个副本.因此是静态的.
Student02370236
2005-02-17
打赏
举报
回复
在C语言中,函数返回类型前加上static表示这是一个静态函数,不能被其它文件里的程序所调用,因此在不同文件中可以存在同名但不同功能的函数。
如果static加在变量前面又要分两种情况:第一,静态局部变量,它位于函数中,就是qinxiaolin说的那种情况,在函数退出后仍然存在,原因就是这类变量是保存在内存的静态存储区,其值不会因函数的退出而消失,但是在其它函数是不能引用这些变量的;第二,静态外部变量,这类变量的使用范围是在本文件内,其它文件中出现了同名的变量也不会发生冲突.
heroboy2000
2005-02-17
打赏
举报
回复
static void func() == void func()
这里static修饰的是函数,不是返回的参数。
如果函数不是static的,就是extern的。
extern函数可以被其它文件中的函数调用。
extern void func();
qinxiaolin
2005-02-17
打赏
举报
回复
static void func()
对于static的用法和其用途有很多:
对于上面这种情况,说明该函数是一个静态函数,是限定func()的函数作用域只在定义该函数的文件域中有效,若其它文件调用该函数则是非法的;
如果在一个函数中定义一个静态变量如:
int func()
{
static int a;
a =a+3;
return a;
}那么你每次调用func()函数的时候,a会将上一次调用func()函数的后a结果保留下来,但变量a只在该函数中可知,但编译器为它产生的却是和全局变量相同的永久性存储区.
static 还有一些其它的作用我也不太明白~
Jupin
2005-02-17
打赏
举报
回复
表明函数是静态的, 这个函数只能由与它在同一文件内的其它函数调用.
taft
2005-02-17
打赏
举报
回复
void 表明这个函数没返回值啊
nodummy
2005-02-17
打赏
举报
回复
这个时候的static是一个域作用符,限定该符号仅在文件域内有效,出了这个文件就算有func也不是这个文件的func了
楼上的理解是在说static的变量,那个是在函数里面修改变量生命周期的static,语义不一样了(其实static在C99里面还有其他的意义,不过那个语义和这两个无关……)
xuelong_zl
2005-02-17
打赏
举报
回复
那要看程序的需要了,如果它希望以后还可以调就这个返回值,或是说它不想这个返回值消失,就要加了,这样这个返回值就可以存放在静态区了,不然就在栈中了,随着函数的调用结束,这个返回值也没消失了
个人看法,你再听听高手的说法吧
iThinker
2005-02-17
打赏
举报
回复
这里static是函数声明作用域修饰符,表示该声明只在该源码文件内有效。
区块链之实战VM虚拟机开发
第一个维度很好
理解
,合约会提供根据用户地址和交易签名进行身份权限审查的功能(甚至可提供基于多密钥对的权限管理),以判断本次合约调用是否有权限修改相应的数据。这也是“私有财产神圣不可侵犯”的根源。第二...
c语言
static
int的作用,
c语言
中
static
是什么意思?作用是什么
c语言
中
static
是什么意思?作用是什么发布时间:2020-04-30 10:07:02来源:亿速云阅读:290作者:小新今天小编给大家分享的是
c语言
中
static
是什么意思?作用是什么,相信很多人都不太了解,为了让大家更加了解
static
,所以给大家总结了以下内容,一起往下看吧。一定会有所收获的哦。
static
在
c语言
中
是什么意思
c语言
中
,
static
用来说明静态变量。1、如果是在函数外面定义...
C语言
--
static
的作用
C语言
–
static
的作用 对于
C语言
初学者常常对
static
这个关键字的作用不是很清楚,在面试过程
中
也没有把它的用法表述全。下面我将用代码的形式把
static
的用法给展示出来 作用1:
static
修饰变量,可以保持变量的持久性 #include <stdio.h>
void
func
() { int num = 1; num *= 2; printf("num = %d\n", num); }
void
func
1() { //将num声明为静态变量
static
void
和
void
区别(转)
static
关键字 1.作用于变量: 用
static
声明局部变量-------局部变量指在代码块{}内部定义的变量,只在代码块内部有效(作用域),其缺省的存储方式是自动变量或说是动态存储的,即指令执行到变量定义处时才给变量分配存储单元,跳出代码块时释放内存单元(生命期)。用
static
声明局部变量时,则改变变量的存储方式(生命期),使变量成为静态的局部变量,即编译时就为变量分配内存,直到程序...
C语言
的
static
函数
前几天,一个同事跟我说在我们的代码库里面看到,一个
static
函数被放在了头文件里面,可构建的时候却没有报告链接错误。我的第一反应也是,函数被放在头文件里面,当这个头文件被多个源文件引用之后,再把那几个源文件编译产生的目标文件链接起来的时候,应该会产生重定义错误的…… 后来又仔细一想,
static
关键字不正是解决不同的源文件
中
、同名函数的命名冲突问题的吗?于是,快速做了一个小验证: //“
static
_
func
.h” #include <stdio.h>
static
void
displ
C语言
69,371
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章