我的感觉是,基本上100%的时间都是你想要的,但我怀疑可能有一些理论上的警告,例如:
假设我静态链接标准库,并且我使用printf
,但不使用sprintf
。进一步假设我知道&sprintf == &printf + SPRINTF_OFFSET
。编译器怎么会知道我从来没有这样访问过sprintf
?标准是否以某种方式禁止它?
如果我静态链接一个C库,未使用的函数会被优化吗?
是的,前提是它们不是通过其他符号拉入链接的对象的一部分。
要了解链接器是如何工作的,请阅读此或此。
编译器怎么会知道我从来没有这样访问过sprintf?
C
语言标准禁止计算不指向有效对象或刚好超出数组最后一个元素的指针。你的榜样不成熟。