2018年12月26日 更新:千万 不要写任何变量初始化!!
在稍微比较大的工程里,头文件会被重复包含,此时,如果头文件里诸如LIST_HEAD
这样的初始化,而且如果头文件被多个c 文件包含,那么多个c文件导出的o 文件会报错,
错误的原文
可以写,但是不建议, 但有时侯又很有必要啊
对于变量赋值, 甚至编译器不让你这样做, 我记得会有报错的
但是使用 宏式 的变量赋值 是有时候必须的
LIST_HEAD
其定义是:
#define LIST_HEAD(name) \
struct list_head name = LIST_HEAD_INIT(name)
// 后者定义是:
#define LIST_HEAD_INIT(name) { &(name), &(name) }
你可以参考我的之前文章: linux :c :list_head
总结说就是: 你可以在h 文件里进行 变量的初始化,那么工程里的所有c 函数以后就可以使用这个变量了。
在c 文件中进行初始化,然后在运行的时候刚开始,通过一些init 函数进行初始化,然后让其他文件里的c函数使用这个变量,是不行的
编译器期望:每个c文件里的函数,都在编译的时候,知道我(函数)的参数和操作的数来自哪里
人类希望的:期望运行时的其他c文件初始化这个全局变量, 尽管这符合事物之间的衍生,依赖关系,但是不符合编译器的期望。