c - 如何构建每个函数调用或宏只有一个字段的结构?

标签 c struct

我想通过套接字发送一个结构。我不想使用IDL来指定结构,而是更动态地进行。我想在代码中添加几个函数调用或宏调用,例如SendInt32(someInteger)。该结构应在代码中的每个函数调用中包含一个字段。同一代码行(例如循环)的多次调用应更新同一字段。如何动态构建这个结构?

还需要计算字段的长度总和。我们暂时忽略远程端点如何读取结构。

SendInt32(1);    // (1)
SendInt16(2);    // (2)
for (int i = 0; i < 10; i++) 
{
  SendInt32(i);  // (3)
}

Send 函数的实现应生成一个结构,如下所示:

struct {
  uint16_t size = 10;  // sizeof(first) + sizeof(second) + sizeof(third)
  int32_t first = 1;   // (1)
  int16_t second = 2;  // (2)
  int32_t third = 9;   // (3)
}

这在 C 语言中可能吗?

最佳答案

您可以将数据累积在字节缓冲区中,例如:

size_t packet_size = 0;

unsigned char buf[1024];

void AccumulateInt32(int32_t n)
{
  memcpy(buf + packet_size, &n, sizeof n);
  packet_size += sizeof n;
}

然后您可以获取 packet_sizebuf[] 并实际发送。

字节顺序、错误检查和更好的 API 留作练习。

关于c - 如何构建每个函数调用或宏只有一个字段的结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55394415/

相关文章:

go - 具有多个映射符号的结构

c++ - 在不实例化局部变量的情况下将结构传递给函数的效率

从 x86 汇编语言调用 C 函数

c - 是否保证执行 memcpy(0,0,0) 是安全的?

c++ - 做时间戳的最好方法是什么?

c - GNU GCC 编译器 - 对齐属性

函数调用值丢失后 C 返回结构指针

c++ - 从结构启动 Cuda Call

c++ - 如何使用 qsort 对结构(由几个不同的元素组成)进行排序?

c - 测试共享内存,发生奇怪的事情