C语言 在编译单元之间传递函数指针时是否存在任何陷阱



我问,因为我正在使用PIC微控制器来异步操作硬件,并且实现函数指针作为回调机制将是有益的。

例如,i2C 库接受读取和写入"作业",并在硬件资源可用时(以及当用户勾选 i2C 软件状态机时)按顺序执行每个"作业"。根据 i2C 库的实现者使用情况,他们可能希望在返回数据之前对其进行操作(位掩码、设置标志等),这就是我正在考虑添加 I2C 回调机制的地方。

用户将传递一个作业,其中包括指向调用编译单元的回调函数。这是允许的吗?如果允许,是否有任何我需要小心的情况?

在编译单元之间传递指针一直都在进行。例如,标准库中的free()当然是单独编译的,但将指针作为其参数。

在许多项目中,包括 Linux 内核,编译单元之间的回调经常使用。

主要关键是使用公共头文件来定义共享变量、创建函数定义等。如果使用long指针定义函数,但使用指定char指针的声明调用该函数,则会进入"未定义的行为"区域。

还要注意可能会更改变量大小、默认打包等的编译器标志。

最新更新