[英]Assignment from incompatible pointer type[Wincompatible-pointer-types]
[英]Function pointers in C: warning: assignment from incompatible pointer type [-Wincompatible-pointer-types]
考慮以下私有函數聲明:
static void ParseCore(SI_32 num_param,const t_config_param config_param[CONFIG_PARAM_BUFFER_SIZE]);
static void ParseGnss(SI_32 num_param,const t_config_param config_param[CONFIG_PARAM_BUFFER_SIZE]);
static void ParseEaf(SI_32 num_param,const t_config_param config_param[CONFIG_PARAM_BUFFER_SIZE]);
static void ParsePps(SI_32 num_param,const t_config_param config_param[CONFIG_PARAM_BUFFER_SIZE]);
static void ParseImu(SI_32 num_param,const t_config_param config_param[CONFIG_PARAM_BUFFER_SIZE]);
在同一源文件中的另一個函數的定義內,我初始化以下指針:
void (*ParseConfigGeneric)(SI_32, t_config_param*) = NULL;
以下所有作業均獲得帖子標題中指示的警告:
ParseConfigGeneric = &ParseCore;
ParseConfigGeneric = &ParseGnss;
ParseConfigGeneric = &ParseEaf;
ParseConfigGeneric = &ParsePps;
ParseConfigGeneric = &ParseImu;
這是GCC的輸出:
../src/core/time_mgmt.c: In function ‘ParseConfigFile’:
../src/core/time_mgmt.c:753:32: warning: assignment from incompatible pointer type [-Wincompatible-pointer-types]
ParseConfigGeneric = &ParseCore;
^
../src/core/time_mgmt.c:757:32: warning: assignment from incompatible pointer type [-Wincompatible-pointer-types]
ParseConfigGeneric = &ParseGnss;
^
../src/core/time_mgmt.c:761:32: warning: assignment from incompatible pointer type [-Wincompatible-pointer-types]
ParseConfigGeneric = &ParseEaf;
^
../src/core/time_mgmt.c:765:32: warning: assignment from incompatible pointer type [-Wincompatible-pointer-types]
ParseConfigGeneric = &ParsePps;
^
../src/core/time_mgmt.c:769:32: warning: assignment from incompatible pointer type [-Wincompatible-pointer-types]
ParseConfigGeneric = &ParseImu;
該代碼確實可以編譯,並且似乎可以正常工作。 我查找了類似的問題,但問題始終是指針類型不同於原始函數的指針,但是在這種情況下,它們全都是void*
並且參數匹配,所以我無法確定問題出在哪里。
調用如下(編譯器沒有抱怨,我檢查了每次都調用了正確的函數):
(*ParseConfigGeneric)(num_param, config_param);
函數和函數指針變量之間第二個參數的類型不同。
在函數中,它是指向const
的指針,但不在函數指針變量中。
類型必須完全相等。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.