gpt4 book ai didi

c - 是否可以在 C 的结构中创建 'empty' 成员?

转载 作者:太空宇宙 更新时间:2023-11-04 00:34:08 25 4
gpt4 key购买 nike

我正在尝试创建一些类似数组的结构来处理 MODBUS 数据和寻址。

我在一个结构中进行操作,这样以后设置某些值会更简单,而不是引用数据表来找出哪个地址与数据耦合。

一些地址留空并保留供将来使用(我知道这在 MODBUS 标准中没有指定,数据不应该完全是特定于 MODBUS 的)。

我已经创建了一个结构,它在应该运行的嵌入式设备的软件上进行编译。但是我不太确定它会按照我想象的方式运行,所以我在 2 个不同的编译器上运行了一些测试代码。 1 是一个在线 c 编译器,它按照我预期的方式运行,在保留字节处只有一个警告。第二个是在 visual studio c++ 控制台应用程序中运行的,它不会运行,因为它会生成错误:

错误 C2208 'unsigned short': 没有使用此类型定义的成员

这是应该运行的完整代码:

#include <stdio.h>
#include <stdint.h>
#define U16 uint16_t
#define UI unsigned int
struct t {
U16 t1;
union {
struct {
UI b_f1 : 2;
UI b_f2 : 2;
UI b_f3 : 2;
UI b_f4 : 2;
UI b_f5 : 2;
UI b_f6 : 2;
UI b_f7 : 2;
UI b_f8 : 2;
}f;
U16 c;
}t2;
U16; //Reserved space for later use <- this gives me the compiler error
U16 t3;
}test;

int main()
{
test.t3 = 12;
test.t2.f.b_f1 = 0; //0
test.t2.f.b_f2 = 2; //4 (8)
test.t2.f.b_f3 = 0; //16
test.t2.f.b_f4 = 0; //64
test.t2.f.b_f5 = 0; //256
test.t2.f.b_f6 = 0; //1024
test.t2.f.b_f7 = 2; //4096 (8192)
test.t2.f.b_f8 = 0; //16384
//tot: 8200
test.t1 = 3000;
int h; //test variable
for (int i = 0; i < (sizeof(test) / sizeof(U16)); i++) {
h = *(&test.t1 + (i*sizeof(U16));

printf("%d", h); //here I can now send every MODBUS address & data
}

return 0;
}

设置变量不是必需的,它只是为了测试目的

我预计它只会生成一个包含 4 个元素的结构,一个是 0 指针,这样寻址是正确的,地址 3 未被使用,因此为 0,而地址 4(t3) 将包含更多数据。

有没有办法让我计划完成这项工作,或者我应该只在名为 Reserved1..Reserverd2..etc 之间创建一些变量?

最佳答案

像这样的“声明”

U16; //Reserved space for later use

根本无效。

只需使用一些虚拟名称即可解决您的问题,例如

U16 _reserved_; //Reserved space for later use

关于c - 是否可以在 C 的结构中创建 'empty' 成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55866832/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com