怎样让函数在被编译或被链接时警告用户?

Linux 内核 init/main.c 里的 do_initcalls 就是利用 gcc 的 section 属性来自动遍历 执行各个模块的初始化代码,从而避免复杂的注册处理。那么,在应用层代码里能否 借用这个方法呢,看下面的代码:

注意属性 section 前的 used 属性:在这个例子中如果打开优化会出现编译错误,原 因是 fn_a 和 fn_b 由于没有在任何其他地方用到而被优化掉。

不过在打开优化选项时该程序编译不通过,还需要进一步研究。

另外采用这种方法执行的函数必须没有依赖关系,尤其对不同源文件中的函数, 其执行顺序由链接器来决定。