3

我相信我正在寻找的东西被称为预测......

我想键入一个引用结构的函数指针,然后将该函数指针存储在结构中。请参阅下面的 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: 警告: 'struct ShellCmdDEF' 在参数列表中声明 [默认启用] Shell.h:57:71: 警告: 它的范围只是这个定义或声明,这可能不是你想要的 [默认启用]

当然代码有效,我已经这样做了多年,但现在它是为了符合 Misra/DO170B,我需要摆脱警告。

4

1 回答 1

10

在函数指针类型之前声明结构:

struct ShellCmd;

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

typedef struct ShellCmd
{
    uint32_t    u32Flags;
    uint16_t    u16State;
    ShellCmdFN  pCmdFN;
} ShellCmdDEF;
于 2013-02-24T15:29:02.603 回答