头文件中使用extern的作用?
发现在某个.h头文件中,有直接写函数原型的,有在函数原型前加extern的。如:
void init_timer_key(struct timer_list *timer, const char *name, struct lock_class_key *key);
extern int mod_timer(struct timer_list *timer, unsigned long expires);
如果某个.c文件包含了该头文件,是否加extern好像也没有区别。
那么为什么init_timer_key不加extern,而mod_timer加extern?
[解决办法]
extern说明该函数来自其他文件
[解决办法]
比如a.c中有int a =1;如果b.c中要用到a=1;那么就可以extern int a;这样b.c就引用声明了a.c中的a,而不会去创建内存了
[解决办法]
C++支持函数重载,而C语言不支持,如果在C++中需要调用C文件中的函数,必须用extern加以区分。
[解决办法]
對於函數,沒有加extern的一般都在本文件實現,加了extern的在其它文件實現。
帶extern的函數聲明,一般是爲了避免編譯警告。
另外,如果這個C文件所包含的頭文件已經有函數的聲明了,就不需要再聲明。
[解决办法]
extern int mod_timer(struct timer_list *timer, unsigned long expires);//extern的作用是声明这个函数是来自外部的,当运行到该函数时就要到外部文件中去找该函数
void init_timer_key(struct timer_list *timer, const char *name, struct lock_class_key *key);//这个也是声明一个函数,该函数跟main函数是一起的,如果是在main中调用该函数时,写程序时你把这个函数写在main之前就不用这条声明语句,写在其之后就要。
应该明白了吧
[解决办法]
说简单点,加extern的函数实现在外部,不加的在内部。
[解决办法]