c-如何强制用户实现__weak函数



我正在写一个库,有一些__weak函数需要被程序员重写。我想确保他们这样做,所以我做了这个:

__weak void checkButtons(){
#warning "Implement this"
}

并将原型放在标题中:

__weak void checkButtons();

并在另一个文件中实现:

void checkButtons(){
//Some codes here
}

顺便说一句,问题是在编译时,编译器显示#warning消息。

编译库.c.

library.c(8(:警告:#1215-D:#警告指令:消息";实现这个";

#"警告消息";实现这个";

库.c:1警告,0错误

我认为如果__weak函数被重写,主函数就不应该被编译,应该是吗?

我不知道为什么会发生这种事。还有其他想法可以强迫用户吗?

主函数不应该编译,应该是吗?

所有内容都已编译。编译弱函数,编译正常函数。链接程序链接时,链接器选择符号的(编译的(正常版本,而不是符号的(也编译的(弱版本。链接发生在编译之后。

为什么会发生这种情况。

您已经在代码中编写了一个#warning,它无论如何都将是可见的并由编译器处理,无论是否使用该函数。#warnings在编译之前由预处理器进行解释。

如何强制用户实现__weak函数

首先,不要在头文件中使用weak。它将使所有函数定义都变弱,从而查看此声明。

// header
void checkButtons();

其次,如果您想强制用户定义函数,那么不要使用weak,也不要定义函数。当您希望为函数提供默认定义时,会使用弱符号,如果您不想这样做,则不要使用它。如果没有函数定义,用户将收到一个";未定义引用"-来自链接器的错误消息类型。

我正在写一个库,有一些函数需要被程序员重写

对于您的库来说,更好和正常的方法是获取指向库用户实现的函数的函数指针。这样的设计是";"更好"-允许代码重用,更容易进行单元测试,并在以后发生更改时节省大量重构。

最新更新