我有以下主要用于处理动态恶意锁定数组的 struct :

#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);
}

推荐答案

我通常会看到使用复合字面意思:

#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);

C++相关问答推荐

Zig将std.os.argv转换为C类型argv

ATTiny1606定时器TCA 0中断未触发

在函数中使用复合文字来初始化C语言中的变量

#If指令中未定义宏?

在C++中头文件中声明外部 struct

从纯C中访问通用项对话框

C lang:当我try 将3个或更多元素写入数组时,出现总线错误

`#if`条件中是否允许`sizeof`?

如何在C中打印包含扫描字符和整数的语句?

Kdb:仅升级指定的列

GTK3按钮信号错误

为什么未初始化的 struct 的数组从另一个数组获取值?

搜索使用int代替time_t的用法

静态初始化顺序失败是否适用于C语言?

Linux分段故障(核心转储)

Dlsym()的手册页解决方法仍然容易出错?

C:面筋蛋白';为什么不刷新窗口?

为什么一个在线编译器拒绝这个VLA代码,而本地的Apple clang却不拒绝;t?

比 * 更快的乘法

C99 的 %zu 格式说明符不起作用