为您不希望人们使用的已弃用函数生成链接时错误的最佳方法是确保库中不存在已弃用的函数 - 这使它们成为“已弃用”之外的一个阶段。
也许您可以提供一个辅助库,其中包含不推荐使用的功能;不注意的人可以链接辅助库,但主流的人不会使用辅助库,因此不会使用这些功能。但是,它仍然超出了“弃用”阶段。
获取链接时警告很棘手。显然,GCC 对某些功能(mktemp()
等)执行此操作,如果您运行使用gets()
. 我不知道他们做了什么来实现这一点。
根据评论,我认为您需要在编译时解决问题,而不是等到链接时或运行时。
GCC 属性包括(来自 GCC 4.4.1 手册):
error ("message")
如果在函数声明中使用此属性,并且未通过死代码消除或其他优化消除对此类函数的调用,则会诊断出包含消息的错误。这对于编译时检查很有用,尤其是与 __builtin_constant_p 和内联函数一起使用时,无法通过 extern char [(condition) 来检查内联函数参数?1:-1];技巧。虽然可以保留函数未定义并因此调用链接故障,但使用此属性时,即使存在内联函数或未发出调试信息,也会更早地诊断出问题并提供调用的确切位置。
warning ("message")
如果在函数声明中使用此属性,并且没有通过死代码消除或其他优化消除对此类函数的调用,则会诊断出包含消息的警告。这对于编译时检查很有用,尤其是与 __builtin_constant_p 和内联函数一起使用。虽然可以在 .gnu.warning* 部分中使用消息定义函数,但使用此属性时,即使存在内联函数或不发出调试信息,也会更早地诊断出问题并提供调用的确切位置。
如果配置程序忽略这些错误,它们就会被破坏。这意味着无法使用这些函数编译新代码,但现有代码可以继续使用库中已弃用的函数(直到需要重新编译)。