弱链接的便携性如何?
#pragma weak my_symbol
我看到了这个问题: how-to-make-weak-linking-work-with-gcc讨论了如何让它工作。但是有没有一种不需要 gcc 的好方法呢?
弱链接和用#ifdef 保护声明有什么区别?
#ifndef my_weak_fn
void my_weak_fn(){/* Do nothing */ return;}
#endif
弱链接的便携性如何?
#pragma weak my_symbol
我看到了这个问题: how-to-make-weak-linking-work-with-gcc讨论了如何让它工作。但是有没有一种不需要 gcc 的好方法呢?
弱链接和用#ifdef 保护声明有什么区别?
#ifndef my_weak_fn
void my_weak_fn(){/* Do nothing */ return;}
#endif
#pragma
根据定义,是不可移植的。
弱链接是在链接时完成的(令人惊讶的是)。它允许具有相同签名的函数(或任何符号,实际上)覆盖另一个。这意味着将优先选择强者而不是弱者,但如果没有强者,则将使用弱者。
包含保护由编译器完成,而不是链接器,如果强项不存在,它们不允许回退到弱项。如果您控制两个函数的源(通过ifdef
-ing 一个,ifndef
-ing 另一个),您可以模拟相同的行为,但情况并非总是如此,这更多的是在两个强大的函数之间进行选择。
弱链接允许您做一些事情,例如malloc()/free()
出于调试目的而自行删除,同时仍与提供它们的库进行链接。