关于 静态函数 生命周期 的问题

NeilHappy 2013-04-17 05:23:28
在C++中,类的静态方法属于类,只能使用同样属于类的静态变量。
但是在C中,静态变量是否只是用于控制文件内部链接性的? C语言的静态函数是否能操作非静态变量?在C语言,讨论静态函数的生命周期有意义吗?

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


int main()
{
int c=99;
func(c);
return 0;
}

这个例子向func静态函数传递一个栈变量,内部发生了什么?我对这里不理解,麻烦大家帮帮忙。
...全文
146 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
NeilHappy 2013-04-18
  • 打赏
  • 举报
回复
引用 4 楼 pathuang68 的回复:
一个类的静态成员函数中操作非静态成员变量,理由很简单:静态成员函数是类级别的,而非静态成员变量时对象级别的。 楼主给出的那个c语言的func静态成员函数,除了它只能在声明它的文件当中可见,不能被其他文件使用外,加不加static应该都没有什么意义。不在任何花括号内声明的变量或函数都是全局的,而全局的静态变量或静态函数都只在声明它的文件中可见。 建议楼主参考: ……
谢谢你啊,这下我确定我的想法了。
ForestDB 2013-04-17
  • 打赏
  • 举报
回复
static的含义是“overload”的。
pathuang68 2013-04-17
  • 打赏
  • 举报
回复
一个类的静态成员函数中操作非静态成员变量,理由很简单:静态成员函数是类级别的,而非静态成员变量时对象级别的。 楼主给出的那个c语言的func静态成员函数,除了它只能在声明它的文件当中可见,不能被其他文件使用外,加不加static应该都没有什么意义。不在任何花括号内声明的变量或函数都是全局的,而全局的静态变量或静态函数都只在声明它的文件中可见。 建议楼主参考: static关键字
常如意 2013-04-17
  • 打赏
  • 举报
回复
static函数仅限于本文件使用,不能被其他文件调用
startservice 2013-04-17
  • 打赏
  • 举报
回复
全局变量和函数前的static是链接属性,表示仅文件内可见。 C中的链接属性和存储类型: 链接属性 标识符的链接属性有3种:external(外部),internal(内部)和none(无)。 没有链接属性的标识符总是被当作是单独的个体,也就是说该标识符的多个声明被当作是独立不同的实体。属于internal链接属性的标识符在同一源文件内的所有声明中都指向一个实体,但位于不同源文件中的多个声明则分属于不同的实体。最后,属于external链接属性的标识符不论声明多少次,位于几个源文件都表示同一实体。 关键字extern和static则在声明中修改标识符的链接属性,如果某个声明在正常情况下具有external链接属性,在它前面加上static关键字可以使得它的属性变为internal。 static关键字只对链接属性为external的声明才能改变链接属性的效果,extern关键字的规则更为复杂,一般而言,它为一个标识符指定external链接属性,这样就可以访问在其他任何位置定义的这个实体。 当extern关键字用于源文件中一个标识符的第一次声明时,它指定该标识符具有external链接属性,但是,如果它用于该标识符的第二次或以后的声明时,它并不会更改第一次声明所指定的链接属性。 存储类型 变量的缺省存储类型取决于它的声明位置。凡是在任何代码块之外声明的变量总是存储在静态内存中,这类变量被称为static变量。对于这类变量,你无法为它们指定其他存储类型,静态变量在程序运行之前创建,在程序的整个执行期间始终存在。 static关键字 当它用于函数定义时,或用于代码块之外的变量声明时,static关键字用于修改标识符的链接属性,从external变为internal,但标识符的存储类型和作用域不受影响,用这种方式声明的函数或者变量只能在声明它们的源文件中访问。 当它用于代码块内部的变量声明时,static关键字用于修改变量的存储类型,从自动变量修改为静态变量,但变量的链接属性和作用域不受影响。用这种方式声明的变量在程序执行之前就创建。 总结 具有external链接属性的实体在其他语言中的术语里是全局实体,所有源文件中的所有函数均可以访问它。只要变量不是声明在代码块内或者函数定义内部,它在缺省情况下的链接属性都是external。如果一个变量声明于代码块内部,在它前面添加extern关键字将使它引用的是全局变量而不是局部变量。 具有external链接属性的实体总是具有静态存储类型,全局变量在程序开始执行之前创建。
lieyingshengbao 2013-04-17
  • 打赏
  • 举报
回复
static将函数限制在本文件中

69,369

社区成员

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

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