C 访问已声明函数的参数
我有以下功能声明:C 访问已声明函数的参数,c,function,callback,typedef,C,Function,Callback,Typedef,我有以下功能声明: typedef void (cback) (scan_results *scan_result, uint8_t *adv_data); 我声明函数如下: cback my_cback; 我将my_cback作为一个函数的输入。然后,我想访问my\cback的参数。如何实现这一点?使用我的VC2008可以编译并运行以下内容: typedef void (cback) (int *scan_result, int *adv_data); void f(int *scan_
typedef void (cback) (scan_results *scan_result, uint8_t *adv_data);
我声明函数如下:
cback my_cback;
我将
my_cback
作为一个函数的输入。然后,我想访问my\cback
的参数。如何实现这一点?使用我的VC2008可以编译并运行以下内容:
typedef void (cback) (int *scan_result, int *adv_data);
void f(int *scan_result, int *adv_data)
{
*adv_data= *scan_result;
}
void ftest(cback *g, int k)
{
int l;
g(&k, &l); // call the function passed as argument
printf("%d\n",l);
}
void test(void)
{
int i=3, j;
cback *my_cback= f; // assign f to a function pointer variable
my_cback(&i,&j); // call the function pointer directly
printf("%d\n",j);
ftest(my_cback, 4); // pass the function pointer
}
输出:
3
4
我将my_cback
作为输入提供给函数。然后,我想访问我的_cback的参数。我怎样才能做到这一点 传递给函数(
foobar()
),不仅传递给my\u cback
,还传递给my\u cback()
的参数
#include <stdint.h>
#include <stdio.h>
typedef char *scan_results;
typedef void (cback) (scan_results *scan_result, uint8_t *adv_data);
// Declare function
cback my_cback;
// Define function
void my_cback(scan_results *scan_result, uint8_t *adv_data) {
*scan_result = "Hello";
*adv_data = 42;
}
void foobar(cback foo, scan_results *scan_result, uint8_t *adv_data) {
(foo)(scan_result, adv_data);
// access the arguments
printf("Inside foobar(): scan_result = %s, adv_data = %d\n", *scan_result,
*adv_data);
}
int main() {
scan_results sr;
uint8_t data;
// I give my_cback to a function as an input.
foobar(my_cback, &sr, &data);
// access the arguments
printf("Inside main(): scan_result = %s, adv_data = %d\n", sr, data);
}
你确定这两行会编译吗?是的,我肯定会compile@EugeneSh:假设我将
cback
声明为指向函数的指针,以便以后在声明此类指针的参数时使用。同时,当我定义my_cback
时,我希望确保它符合预期的函数类型。如果cback
是一个指针,我看不出有什么方法可以做到这一点。但是,考虑到它是一个类型,我可以首先声明cbackmycback然后用void my_cback(scan_results*,uint8_t*){…}
定义函数,如果它与cback
类型不匹配,编译器将给我一个错误。@EugeneSh。需要编写my\cback
的标准定义。您不能使用typedef别名,当然您需要提供一个与之兼容的定义。@AlperenGörmez:您“想在什么代码中访问my_cback
”的参数?”?在my_cback
的代码中,您只需通过参数名访问它们,就像在任何其他函数中一样。在任何其他代码中,参数都不在范围内。
Inside foobar(): scan_result = Hello, adv_data = 42
Inside main(): scan_result = Hello, adv_data = 42