我问,因为我使用PIC单片机来异步操作硬件并实现函数指针,因为回调机制会有所帮助。
一个例子是i2C库接受读写“作业”,并在硬件资源可用时(以及用户勾选i2C软件状态机时)依次执行每个“作业”。根据实现者对i2C库的使用,他们可能希望在返回数据之前操作数据(比特掩码,设置标志等),这是我想添加i2C回调机制的地方。
用户将传递一个作业,其中包括一个指向调用编译单元的回调函数。这是允许的吗?如果允许的话,我有什么需要小心的吗?
答案 0 :(得分:2)
始终在编译单元之间传递指针。例如,标准库中的free()
当然是单独编译的,但它还是以指针作为参数。
在许多项目中,包括Linux内核,编译单元之间的回调经常被使用。
主要关键是使用通用头文件来定义共享变量,制作函数定义等。如果使用long
指针定义函数,但使用指定char
指针的声明调用它,则表示您正在输入未定义的行为区域。
还要注意可能会改变变量大小,默认打包等的编译器标志。