其实也没有什么大惊小怪的,你就记住static 定义的函数不能被外部函数调用,没有static定义的多extern定义的可以被外部函数调用,
原因是c语言将带有static 定义为内部函数,不带static或extern的,定义为外部函数,这样做的目的是,你定义一个当前.c文件中定义static int fuc()时;
在另一个.c文件中也定义static int fuc();两个名字相同,但是都属于内部函数,仅作用于当前包含的.c文件,所以不冲突,两个函数你要是不加static 将带来“名字空间污染”情况,编译器会报错,目的就是当前文件函数名防止与其他文件函数名想冲突而到导致,系统报错!
kyan1991 于 2012-07-16 22:56:22发表:
不怎么明白!
于 2012-06-26 20:32:44发表:
其实也没有什么大惊小怪的,你就记住static 定义的函数不能被外部函数调用,没有static定义的多extern定义的可以被外部函数调用,
原因是c语言将带有static 定义为内部函数,不带static或extern的,定义为外部函数,这样做的目的是,你定义一个当前.c文件中定义static int fuc()时;
在另一个.c文件中也定义static int fuc();两个名字相同,但是都属于内部函数,仅作用于当前包含的.c文件,所以不冲突,两个函数你要是不加static 将带来“名字空间污染”情况,编译器会报错,目的就是当前文件函数名防止与其他文件函数名想冲突而到导致,系统报错!
lxxwyy 于 2011-06-11 22:30:25发表:
hao
dengxiangbao 于 2011-04-06 16:25:51发表:
将会
dengxiangbao 于 2011-04-06 16:25:46发表:
环境
dengxiangbao 于 2011-04-06 16:25:41发表:
风高放火
dengxiangbao 于 2011-04-06 16:25:37发表:
递归
dengxiangbao 于 2011-04-06 16:25:34发表:
递归
dengxiangbao 于 2011-04-06 16:25:29发表:
豆腐干第三方
dengxiangbao 于 2011-04-06 16:25:25发表:
豆腐干
dengxiangbao 于 2011-04-06 16:25:22发表:
似懂非懂
dengxiangbao 于 2011-04-06 16:25:18发表:
阿萨德
dengxiangbao 于 2011-04-06 16:25:14发表:
阿萨德
hml1006 于 2011-04-06 11:54:09发表:
linux设备驱动程序上有
hml1006 于 2011-04-06 11:53:37发表:
内核模块与应用程序的另一个区别是,你得小心“名字空间污染”问题。程序员在写小程序
时,往往不注意程序的名字空间,但当这些小程序成为大程序的一部分时就会造成许多问题
了。名字空间污染是指当存在很多函数和全局变量时,它们的名字已不再富有足够的意义来
很容易的区分彼此的问题。不得不处理这种应用程序的程序员必须花很大的精力来单单记住
这些“保留”名,并为新符号寻找新的唯一的名字。如果在写内核代码时出现这样的错误,
这对我们来说是无法忍受的,因为即便最小的模块也要连编到整个内核中。防止名字空间污
染的最佳方法是把所有你自己的符号都声明为 static 的,而且给所有的全局量加一个
well-defined 前缀。此外,你还可以通过声明一个符号表来避免使用 static 声明,这些内
容将在本章的“注册符号表”小节中介绍。即便是模块内的私有符号也最好使用选定的前缀,
这样有时会减轻调试的工作。
Gaga_Yan 于 2011-04-01 10:31:37发表:
这是特殊定义的函数,秘密
soulkiller520 于 2011-03-31 21:36:37发表:
为什么呀
hml1006 于 2011-03-22 13:44:23发表:
自己顶一下