使用宏初始化嵌套结构时出现问题

问题描述 投票:0回答:1

我正在尝试使用宏初始化嵌套结构指针。我的结构如下所示。我正在使用如下宏。

typedef struct {
        uint8_t Loc;
        uint8_t Module;
        uint8_t EventId;
} ErrorPayload;

typedef struct {
        uint32_t ErrorCount;
        uint32_t ReturnCode;
        ErrorPayload *Payload;
} ErrorInfo;

typedef struct {
        ErrorInfo *ErrInfo;
        uint32_t ArraySize;
        uint32_t Cols;
} ErrorMetaData;


#define ErrorMetadataInit(Mdata, _Buffer, _Size)                   \
        ErrorMetaData Mdata = {                                    \
                .ErrInfo = (ErrorInfo *) (_Buffer),                \
                .ErrInfo = {                                            \
                    .ErrorCount = 0,                                    \
                };                                                       \
                .ArraySize = (_Size - sizeof(ErrorInfo))/ sizeof(ErrorPayload), \
                .Cols = 0,                                         \
        }

我的主要问题是我无法为

ErrorPayload
的结构成员分配任何值,它是
ErrorInfo
结构的一部分。它总是给出构建错误。 任何帮助都会非常有帮助。

我想将值分配给定义的宏内的

ErrorPayload
结构。

c
1个回答
0
投票

首先填充

_Buffer
更简单,假设它已被定义为指向
ErrorInfo
的指针,这就是我编写代码的方式:

*_Buffer = (ErrorInfo) { .ErrorCount = 0 };
ErrorMetaData Mdata = {
    .ErrInfo = (ErrorInfo *) (_Buffer),
    .ArraySize = (_Size - sizeof(ErrorInfo)) / sizeof(ErrorPayload),
    .Cols = 0
}

尽管我建议将其设为

[[gnu::always_inline]] static inline
函数,并取消宏。

© www.soinside.com 2019 - 2024. All rights reserved.