在编译单元之间传递函数指针时是否有任何陷阱?

时间:2014-11-26 17:11:58

标签: c callback function-pointers

我问,因为我使用PIC单片机来异步操作硬件并实现函数指针,因为回调机制会有所帮助。

一个例子是i2C库接受读写“作业”,并在硬件资源可用时(以及用户勾选i2C软件状态机时)依次执行每个“作业”。根据实现者对i2C库的使用,他们可能希望在返回数据之前操作数据(比特掩码,设置标志等),这是我想添加i2C回调机制的地方。

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

1 个答案:

答案 0 :(得分:2)

始终在编译单元之间传递指针。例如,标准库中的free()当然是单独编译的,但它还是以指针作为参数。

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

主要关键是使用通用头文件来定义共享变量,制作函数定义等。如果使用long指针定义函数,但使用指定char指针的声明调用它,则表示您正在输入未定义的行为区域。

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