我有一个程序可以调用库中的函数。函数的参数是函数指针。
Helloworld.c
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include "helloworld.h"
struct data_buffer
{
char name[10];
}data;
int main()
{
int result;
int (*func_pointer)(&data_buffer); //function pointer which takes structure as parameter
result=send_data(func_ponter); //error
func_pointer(&data_buffer); //call the SPI write
}
helloworld.h
#ifndef HELLOWORLD_H
#define HELLOWORLD_H
/* Some cross-platform definitions generated by autotools */
#if HAVE_CONFIG_H
# include <config.h>
#endif /* HAVE_CONFIG_H */
/*
* Example function
*/
struct data_buffer;
extern int send_data(int (*func_pointer)(&data_buffer)); //is the declaration correct
#endif
libexample.c
#include<stdio.h>
#include<stdlib.h>
int send_data(int (*func_pointer)(&data_buffer)) //error
{
func_pointer=spi_write(); // assigning the function pointer to SPI WRITE function
return;
}
所以我的项目目标是发送一个函数指针作为send_data函数的参数。在库程序中,函数指针必须分配给spi_write()函数,然后可以借助Helloworld程序中的函数指针调用SPI_Write。
答案 0 :(得分:0)
extern int send_data(int (*func_pointer)(&data_buffer)); //is the declaration correct
函数的参数必须是类型。类型使用*
来表示它是一个指针。所以&data_buffer
在声明中是不正确的。
另请注意,在C中,与C ++不同,结构名称不是类型,您需要将其与关键字struct
(或使用typedef)组合。所以使用:
extern int send_data(int (*func_pointer)(struct data_buffer *));