c: 头文件不要写函数实现和变量赋值

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文件初始化这个全局变量, 尽管这符合事物之间的衍生,依赖关系,但是不符合编译器的期望。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值