【发布时间】:2016-06-17 20:44:49
【问题描述】:
库函数默认设置了弱属性(请参阅 [1]),并且可能会被具有相同签名的函数“覆盖”。
例如printf 内部调用fputc,我可以轻松地声明我的一个函数int fputc(int, FILE *)。
如果发生这种情况,我希望收到编译器警告。
有没有办法告诉编译器在覆盖弱函数时警告我?
[1]https://gcc.gnu.org/onlinedocs/gcc-3.2/gcc/Function-Attributes.html
【问题讨论】:
-
它不会是编译器警告,而是链接器警告。 BTW GCC3.2 是一个古老的 - 不符合当前 C11 和 C++14 标准的编译器,当前(2016 年 3 月)版本是 GCC5 所以你应该升级你的
gcc -
您被允许 重新定义
fputc,前提是您的定义符合标准(这可能很棘手) -
你为什么这么问?你想解决的实际问题是什么?看起来像XY problem...所以请编辑您的问题以解释更多并激发它
-
我最终否决了这个问题,因为它没有动机(我怀疑有些混乱)而且不是很清楚。
-
实际上,库函数不太可能被意外覆盖。首先,开发人员应该了解 C 标准库(并且不会意外重用标准中定义的名称)。其次,即使他们重新定义了一个函数,也不太可能具有与标准要求的签名相同的签名。其他重新定义 - 带有良好的签名 - 不会是偶然的,而是故意的。
标签: c gcc compiler-warnings