原创 为啥有的要声明为静态?

2008-2-10 00:45 3424 7 7 分类: MCU/ 嵌入式

原帖讨论: http://bbs.21ic.com/club/bbs/list.asp?boardid=42&t=2853557



phoenixmy 发表于 2008-2-9 12:47 ZLG-MCU ←返回版面 按此察看该网友的资料 按此把文章加入收藏夹 按此编辑本帖

5楼: 为啥有的要声明为静态?




    static void HibernateISR(void);//必须声明为静态函数!!!
    static void SysTickISR(void);//必须声明为静态函数!!!


hotpower 发表于 2008-2-10 00:35 ZLG-MCU ←返回版面 按此察看该网友的资料 按此把文章加入收藏夹 按此编辑本帖

7楼: 不声明为静态函数就得不到类的实际地址


类的声明和变量的类型声明实际是一样的,它们并不实际存在.
只有在定义并分配空间后,才能得到实际的物理地址.

由于类的成员变量的备份可能有许多,而类的成员函数实际是共享的.
所以类的成员函数的地址应该是唯一的.

声明为静态函数实际和生存期有关,不声明为静态函数,编译器将找不到
成员函数的物理地址.

基于以上的理解,类的(静态)成员函数做中断函数后,由于类的成员变量的备份可能有许多,

所以IAR要求访问时需要:实际类名称.类成员(变量/函数),想来也真是有道理的~~~

特别是: 实际类名称.类成员变量.

不过再饶着站在GCC的立场上想: 类的(静态)成员函数做中断函数肯定是唯一的.
所以指明类的实际名称是多余的~~~

总之两者都各有自己的道理~~~所以编程者就遵守各自的约定好了~~~

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
7
关闭 站长推荐上一条 /3 下一条