我维护rawdraw,rawdraw使用全局符号来回调,用于创建,输入和关闭。我想自动使用一个符号的副本,比如说,如果用户没有定义一个,或者如果用户定义了一个,我想使用它。
这对大多数平台来说都不是问题,但对于Android来说,这是非常烦人的,因为在应用程序在设备上运行之前,您无法识别链接器问题。
问题是这是在标题中。所以我想要的是一种方法,从同一个C文件,允许函数调用被覆盖,但不需要它。
我尝试了weak
和weak,aliasof(...)
属性,似乎都不允许在同一个C文件中覆盖符号。
例如,在这种情况下,用户希望允许检测窗口终止,但该库的许多用户并不关心。
cnfg.h
void HandleWindowTermination();
...
case APP_CMD_TERM_WINDOW:
...
HandleWindowTermination();
break;
将要求用户实现HandleWindowTermination()
-但我想有一个可选的实现它。
void DefaultHandleWindowTermination() { } // Do nothing
这只在HandleWindowTermination()
从未定义时使用。
1条答案
按热度按时间wlp8pajw1#
GCC“weak”属性并非对所有目标都可用。关于GCC manual:
此属性需要汇编程序和对象文件支持,可能并非在所有目标上都可用。
因此,您可能需要使用变通方法。一种可能性是定义一个指向可选实现的函数指针:
然后,另一个模块可以实现一个
HandleWindowTermination()
函数,并将HandleWindowTerminationFunction
指针设置为指向该实现(您可以实现一个“setter”函数来实现)。