test_audio.c:66:38: warning: initialization of ‘void (*)(void)’ from incompatible pointer type ‘CU_TestInfo *’ {aka ‘ struct CU_TestInfo *’} [-Wincompatible-pointer-types] 66 | {"add", init_suite, clean_suite, test_add}, | ^~~~~~~~ test_audio.c:66:38: note: (near initialization for ‘suites[0].pSetUpFunc’)报错如何处理
时间: 2024-02-14 14:10:35 浏览: 315
这个错误是因为你将 `test_add` 函数的指针作为 `init_suite` 函数的参数传递给了 `CU_TestInfo` 结构体。这两个函数的类型不一致,所以编译器会给出警告。
要解决这个问题,你需要确保 `init_suite` 函数的类型与 `CU_SetUpFunc` 类型匹配。你可以在 `init_suite` 函数声明中添加 `CU_SetUpFunc` 类型说明符,像这样:
```c
CU_SetUpFunc init_suite(void);
```
然后,你需要在 `suites` 数组中使用 `CU_ADD_TEST` 宏来添加测试用例,像这样:
```c
CU_ADD_TEST(suite1, test_add);
```
这样就可以避免类型不匹配的问题,消除编译器警告。
相关问题
app/src/test_yunit.c:45:9: warning: initialization of 'void (*)(char *, int, int, char **)' from incompatible pointer type 'void (*)(int, char **)' [-Wincompatible-pointer-types] 45 | test_yunit报错什么原因
这个报错的原因是函数指针类型不匹配。具体来说,代码中定义了一个函数指针变量,它的类型是 `void (*)(char *, int, int, char **)`,但是在赋值时,右侧的函数类型是 `void (*)(int, char **)`,两个类型不匹配,导致编译器报错。
要解决这个问题,需要让左右两侧的函数类型匹配。可以通过定义一个中间函数,将右侧函数的参数转换成左侧函数需要的参数类型,然后将中间函数的指针赋值给左侧函数指针变量。例如:
```
void test_func(int a, char **b) {
// 转换参数类型,并调用左侧函数需要的参数类型
test_yunit_func("test_func", a, 0, b);
}
// 将中间函数的指针赋值给左侧函数指针变量
test_yunit_func_ptr = test_func;
```
这样就可以解决函数指针类型不匹配的问题了。
Compile error: /storage/emulated/0/Android/data/com.cjkj.clanide/files/CJ_IDE/CProject/我的/src/game.c: In function 'play': /storage/emulated/0/Android/data/com.cjkj.clanide/files/CJ_IDE/CProject/我的/src/game.c:31:41: warning: initialization of 'void (*)(int, int *, int *)' from incompatible pointer type 'void (*)(int (*)[10], int *, int *)' [-Wincompatible-pointer-types] void(*prr[4])(int , int*, int*) = { up,down,left,right}; ^~ /storage/emulated/0/Android/data/com.cjkj.clanide/files/CJ_IDE/CProject/我的/src/game.c:31:41: note: (near initialization for 'prr[0]') /storage/emulated/0/Android/data/com.cjkj.clanide/files/CJ_IDE/CProject/我的/src/game.c:31:44: warning: initialization of 'void (*)(int, int *, int *)' from incompatible pointer type 'void (*)(int (*)[10], int *, int *)' [-Wincompatible-pointer-types] void(*prr[4])(int , int*, int*) = { up,down,left,right}; ^~~~ /storage/emulated/0/Android/data/com.cjkj.clanide/files/CJ_IDE/CProject/我的/src/game.c:31:44: note: (near initialization for 'prr[1]') /storage/emulated/0/Android/data/com.cjkj.clanide/files/CJ_IDE/CProject/我的/src/game.c:31:49: warning: initialization of 'void (*)(int, int *, int *)' from incompatible pointer type 'void (*)(int (*)[10], int *, int *)' [-Wincompatible-pointer-types] void(*prr[4])(int , int*, int*) = { up,down,left,right}; ^~~~ /storage/emulated/0/Android/data/com.cjkj.clanide/files/CJ_IDE/CProject/我的/src/game.c:31:49: note: (near initialization for 'prr[2]') /storage/emulated/0/Android/data/com.cjkj.clanide/files/CJ_IDE/CProject/我的/src/game.c:31:54: warning: initialization of 'void (*)(int, int *, int *)' from incompatible pointer type 'void (*)(int (*)[10], int *, int *)' [-Wincompatible-pointer-types] void(*prr[4])(int , int*, int*) = { up,down,left,right}; ^~~~~ /storage/emulated/0/Android/data/com.cjkj.clanide/files/CJ_IDE/CProject/我的/src/game.c:31:54: note: (near initialization for 'prr[3]')
这个编译警告是因为你尝试将一个接受 `int (*)[10]` 类型参数的函数指针赋值给接受 `int*` 类型参数的函数指针。这两者是不兼容的类型,因此编译器给出了警告。
要解决这个问题,你需要确保函数指针数组 `prr` 的元素类型与函数 `up`、`down`、`left`、`right` 的类型匹配。如果这些函数的参数类型是 `int (*)[10]`,而不是 `int*`,那么你需要相应地更改函数指针数组的声明。
你可以检查一下函数 `up`、`down`、`left`、`right` 的定义,确保它们的参数类型与你所期望的一致。然后,根据实际情况修改函数指针数组的声明,确保类型匹配。这样就可以解决编译警告了。
阅读全文