在源文件中声明和在头文件中声明有什么规则可以遵循吗?该怎么处理
在源文件中声明和在头文件中声明有什么规则可以遵循吗?
头文件和源文件都能声明函数,那么到底是在源文件中声明还是头文件中声明有没有什么规则可以遵循?
我的理解是,头文件声明对外的接口函数,源文件中声明内部使用的函数,对外不可见。
不知道大家有没有其他的见解?
------解决方案--------------------
一半是在头文件中声明函数原型,在程序文件中定义这个函数
这样,如果把你的代码编译成 static library 或者 dynamic library以后,用户
都只要把头文件包含进来就可以使用你的代码了。
------解决方案--------------------
函数的作用域有两种 extern 和 static
int FuncA(); -----------如果没有指定,函数默认为全局的(即其他文件也可以使用)
extern int FuncB();
区别:但是如果没有extern 在编译的时侯必要要求提供FuncA()的define,而加了extern之后就可以把查找FuncA的define的工作推迟到link的时侯进行。在link的时侯,会为extern的函数声明找到一个定义,如果出现了重复定义,或者定义和声明不一致,都会出现link错误。
static int FuncC(); ----------表示函数的作用范围是当前的文件,其他文件是看不见的,不管其他的文件是否含有FuncC的定义,该文件中凡是使用到FuncC的地方,都只会调用本文件中定义的FuncC。因为在编译阶段就找到了FuncC,而不用再Link的时候在去查找
------解决方案--------------------
一般都是头文件声明,源文件定义.但static 型的都声明和定义都在源文件进行
头文件和源文件都能声明函数,那么到底是在源文件中声明还是头文件中声明有没有什么规则可以遵循?
我的理解是,头文件声明对外的接口函数,源文件中声明内部使用的函数,对外不可见。
不知道大家有没有其他的见解?
------解决方案--------------------
一半是在头文件中声明函数原型,在程序文件中定义这个函数
这样,如果把你的代码编译成 static library 或者 dynamic library以后,用户
都只要把头文件包含进来就可以使用你的代码了。
------解决方案--------------------
函数的作用域有两种 extern 和 static
int FuncA(); -----------如果没有指定,函数默认为全局的(即其他文件也可以使用)
extern int FuncB();
区别:但是如果没有extern 在编译的时侯必要要求提供FuncA()的define,而加了extern之后就可以把查找FuncA的define的工作推迟到link的时侯进行。在link的时侯,会为extern的函数声明找到一个定义,如果出现了重复定义,或者定义和声明不一致,都会出现link错误。
static int FuncC(); ----------表示函数的作用范围是当前的文件,其他文件是看不见的,不管其他的文件是否含有FuncC的定义,该文件中凡是使用到FuncC的地方,都只会调用本文件中定义的FuncC。因为在编译阶段就找到了FuncC,而不用再Link的时候在去查找
------解决方案--------------------
一般都是头文件声明,源文件定义.但static 型的都声明和定义都在源文件进行