【发布时间】:2017-03-08 05:11:00
【问题描述】:
当void* 被分配或作为参数传递给更具体的指针类型时,我如何使gcc 发出警告,例如没有强制转换的my_struct*?我想确保所有的转换都是明确的。
更新:此问题的范围也已扩展到非gcc linters。
Update2:到处都是缺点?一个简单的纯技术问题会引发如此多的争议,这让我感到困惑。
【问题讨论】:
-
@GabrieleB-David Yup.
-
@GabrieleB-David 我想显而易见的解决方法是
typedef { } opaque_t并在任何地方使用opaque_t*而不是void*但如果有人有更好的想法或知道非gcclinter 可以做这个检查。 -
@GabrieleB-David:
void *可以分配给 C 中的任何其他指针类型。OP 询问有关没有意义的合法表达式的警告。 -
@DepressedDaniel:这将违反有效类型规则,因此调用 UB。只需介绍编码风格指南并信任您的同行。 C中有足够多的其他东西,你可以射击你的脚、手臂和头部。如果您已经对此有疑问,您应该考虑使用强类型语言。想到了 Ada,或者 Python(从你的问题来看,我怀疑动态类型的语言也会是编码纪律的问题)。