2013-02-24 45 views
3

我相信我所尋找的是被稱爲預測...預測一個結構

我想的typedef指代一個結構函數指針,然後該函數指針存儲在結構體。請參閱下面的ShellCmdDEF。

typedef BOOL (*ShellCmdFN) (struct ShellCmdDEF* pCmd, uint16_t u16State); 

typedef struct 
{ 
    uint32_t u32Flags; 
    uint16_t u16State; 
    ShellCmdFN pCmdFN; 

} ShellCmdDEF; 

編譯器會抱怨正是如此...

Shell.h:57:71:警告:57:71 '結構ShellCmdDEF' 裏面的參數列表 Shell.h [默認啓用]聲明:警告:它的範圍只是這個定義或聲明,這可能不是你想要的[默認情況下啓用]

當然,代碼的工作原理,我已經做了多年,但現在它是爲了米斯拉/ DO170B合規性和我需要擺脫警告。

+2

「前進宣言」是您正在尋找的術語。 http://en.wikipedia.org/wiki/Forward_declaration – 2013-02-24 16:11:17

回答

10

聲明該結構的函數指針類型之前:

struct ShellCmd; 

typedef BOOL (*ShellCmdFN) (struct ShellCmd* pCmd, uint16_t u16State); 

typedef struct ShellCmd 
{ 
    uint32_t u32Flags; 
    uint16_t u16State; 
    ShellCmdFN pCmdFN; 
} ShellCmdDEF;