根据其他结构成员创建结构

标签 c struct

我有一个用 typedef 定义的结构

typedef struct 
{
   uint16_t x;
   uint16_t y;
   uint16_t width;
   uint16_t height;
}TArea;

现在我想创建一些相互依赖的区域。 类似的东西

AreaDefs.h

extern TArea UI_AREA_1;
extern TArea UI_AREA_2;    

AreaDefs.c

TArea UI_AREA_1 = {.x = 0, .y = 0, .width = 5, .height = 10};
TArea UI_AREA_2 = {.x = UI_AREA_1.x, .y = 200, .width = 5, .height = 10};

为什么我收到“错误:表达式必须具有常量值”以及什么是更好的解决方案?我不想做类似的事情

#define X_VAL 0
TArea UI_AREA_1 = {.x = X_VAL, .y = 0, .width = 5, .height = 10};
TArea UI_AREA_2 = {.x = X_VAL, .y = 200, .width = 5, .height = 10};

因为在我的实际应用程序中,我不仅仅有这两个相互依赖的领域。

最佳答案

初始化变量时,初始化器不能是另一个变量的值,即使该变量被定义为 const。它必须是一个常数值。

您能做的最好的事情就是第二个示例的操作:使用#define将某些变量初始化为相同的值。

关于根据其他结构成员创建结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44801980/

相关文章:

c - 按下修饰键时获取修改的键码(字符)

c - C语言中的_Space是什么意思?

c - liburing/IORING_OP_PROVIDE_BUFFERS - 分配给读取操作的错误缓冲区

计算 C 中 char 数组的离散值

c - 使用 seccomp 过滤器获取 "Bad System Call"

SWIFT:将 NSData 中的字节粘贴到结构中?

c++ - struct 成员默认初始化的区别

c# - 我可以为我的自定义值类型分配后缀吗?

c - 为什么 c = 4 而不是 1 的结构中字符和 int 地址的差异

c - 我如何将 "register"我的库 libfoo.so 与 `-lfoo` 链接起来?