【问题标题】:Statically initialize field to point to another field静态初始化字段以指向另一个字段
【发布时间】:2017-03-04 06:42:19
【问题描述】:

我想要一个带有嵌入式数组缓冲区和指针的结构,它可以指向嵌入式缓冲区或外部缓冲区:

struct s {
    char internal_buf[BUF_SIZE];
    char *active_buf;
};

我想静态初始化(如在全局变量中)这个结构,使active_buf 字段指向同一个结构的internal_buf 字段。换句话说,类似于:

struct s inst = {
    .internal_buf = {0},
    .active_buf = .internal_buf, // Doesn't compile unfortunately
};

这可能吗?我正在使用 GCC。

【问题讨论】:

  • @EugeneSh.: 嗯?当然有可能!只是不使用 OP 使用的语法。
  • 你为什么不试试呢?你的语法错了,但没问题。
  • @Olaf 真的吗?然后我要学习一些新东西,或者我错过了问题本身的含义..
  • @EugeneSh.:据我了解,OP 希望在初始化程序中将internal_buf 字段的地址设置为active_buf。 (OP:我故意不显示代码。如果您无法弄清楚自己,您将无法使用struct)。用=完成定义(有序列点)。
  • 初始化器不是语句,而是定义的一部分。但是 - 正如我所写,= 处有一个序列点,因此该对象在该点是完整的。

标签: c struct


【解决方案1】:

好吧,结果正确的语法是:

struct s inst = {
    .internal_buf = {0},
    .active_buf = inst.internal_buf, // Works, address is known at compile-time
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多