起初,我尝试使用 __attribute__ ((__nonnull__)) 来执行此操作,但这只会在参数表达式立即为 NULL 时触发 gcc 编译器警告。对我来说,问题是,如果参数表达式随后在链接器内计算为 NULL(例如,如果它是通过 const 指针取消引用间接实现的),则此非空测试似乎不会被触发。
那么,当链接器内的表达式 finally 计算结果为 0 时,有没有办法触发某种 gcc linker 错误?我想将其用作一种非常晚的静态断言,因为非空似乎还没有晚到真正安全。
注意:我目前只是在寻找特定于 gcc 的链接器技巧,我对其他编译器/链接器不感兴趣。谢谢!
如果指针最终计算结果为 NULL,有什么方法可以触发链接器错误吗?
假设您的意思是:如果程序可能在执行时尝试取消引用
NULL
指针,是否有办法使程序无法构建(在编译或链接时),答案是否定的。
检测程序是否可以取消引用
NULL
指针相当于停止问题,众所周知,这是不可判定的。