簡體   English   中英

C中的函數指針:警告:來自不兼容指針類型[-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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM