C语言 在结构中创建匿名静态缓冲区的最佳方法是什么?

46scxncf  于 11个月前  发布在  其他
关注(0)|答案(2)|浏览(105)

我有以下结构,主要用于处理动态malloc'ed数组:

#include <stddef.h>
#include <stdint.h>

typedef struct {
    size_t cap;
    size_t len;
    uint8_t *data;
} bytearray;

字符串
我想创建一个宏BYTEARRAY_STATIC_CREATE()在堆栈上创建它。什么应该是最好的方法,使这一点?
我也试过

#define BYTEARRAY_STATIC_CREATE(B, CAP) \
    B.len = 0;                      \
    B.cap = (CAP);                  \
    uint8_t __##B[CAP];             \
    B.data = __##B

int main()
{
    bytearray a;
    BYTEARRAY_STATIC_CREATE(a, 32);
}

tkclm6bt

tkclm6bt1#

通常我看到复合文字被使用:

#include <stddef.h>
#include <stdint.h>
struct bytearray {
    size_t cap;
    size_t len;
    uint8_t *data;
};
#define BYTEARRAY_STATIC_CREATE(size)  { \
      .len = size,  \
      .data = (uint8_t[100]){0} \
   }
struct bytearray hello = BYTEARRAY_STATIC_CREATE(100);

字符串

9fkzdhlc

9fkzdhlc2#

你不需要typedef和指针:

#define CREATEARRAY(name, size)         \
struct {                                \
    size_t cap;                         \
    size_t len;                         \
    unsigned char data[size];           \
}name = {.cap = 0, .len = size}

CREATEARRAY(hello, 32);    //static storage duration

int foo(void)
{
    CREATEARRAY(bar, 100);  //automatic stora
}

字符串
如果你想malloc也一样。使用 * 灵活的 * 数组成员

相关问题