社区
C语言
帖子详情
我对C语言中的static void func()不是很理解
taft
2005-02-17 06:43:46
在阅读一个开源代码时,我就是无法理解这个函数前加个static的意思,返回值是静态的?什么意思呢?谢谢大家的解答
...全文
1541
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是函数声明作用域修饰符,表示该声明只在该源码文件内有效。
C语言
-指针函数与函数指针
本文深入解析
C语言
中
指针函数与函数指针的核心区别:指针函数是返回指针的函数,声明格式为'类型*
func
()';函数指针是指向函数的指针变量,声明格式为'类型 (*
func
_ptr)()'。文
中
通过语法特征(括号位置)、定义本质、调用方式及典型示例进行对比,并简要介绍二级指针和指向指针数组的指针在实际编程
中
的应用。
C语言
---一些特殊的用法(函数调度表、变量附加属性)
本文介绍了
C语言
中
的一些高级技巧,包括如何创建函数调度表、为变量附加属性、结构体初始化、
理解
结构体标签与EOF的关系,以及如何处理命令行参数和文件输入输出。通过示例代码展示了这些概念的实际应用,并探讨了从初学者角度深入
理解
C语言
的重要性。
c/c++-
static
的作用
本文系统讲解C/C++
中
static
关键字的五大核心作用:控制链接性(使全局变量/函数具有内部链接)、延长局部变量生命周期、声明类静态成员变量(共享于所有实例、需类外定义初始化)、定义类静态成员函数(无this指针、可直接通过类名调用),以及默认初始化为0的特性。重点涵盖其在内存布局(静态区/代码段)、作用域、存储期及访问规则上的行为差异。
iOS开发之runtime:
static
_init()讲解
本文从C++全局变量角度解析了iOS App启动过程
中
的
static
_init()作用,梳理了其调用原理,深入探讨了Mach-O文件结构,特别是如何利用__objc_init_
func
区优化App启动速度。
C语言
面试
本文列举了
C语言
面试
中
常见的问题,包括指针、内存管理、数据结构和函数等方面。例如,讨论了
void
Func
(char str[100])
中
sizeof(str)的值,以及如何
理解
和使用
void
*p = malloc(100)。还涉及了数组、指针、函数指针、联合体和结构体的内存分配与大小计算,以及对const、
static
关键字的
理解
和使用。同时,探讨了堆栈、内存泄漏、字符串操作和内存安全等问题。此外,还给出了如何实现strcpy、整数与字符串相互转换的函数,以及strcmp和字符串逆序的函数。这些问题涵盖了
C语言
的基础和高级概念,是面试
中
常见的考察点。
C语言
70,039
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章