【问题标题】:What is this C syntax (used in Linux drivers/net/bonding/bond_main.c)?这是什么 C 语法(在 Linux 驱动程序/net/bonding/bond_main.c 中使用)?
【发布时间】:2014-08-01 06:57:19
【问题描述】:

我以前写过很多 C,但我不认识这种语法:

static const char *names[] = {
    [BOND_MODE_ROUNDROBIN] = "load balancing (round-robin)",
    [BOND_MODE_ACTIVEBACKUP] = "fault-tolerance (active-backup)",
    [BOND_MODE_XOR] = "load balancing (xor)",
    [BOND_MODE_BROADCAST] = "fault-tolerance (broadcast)",
    [BOND_MODE_8023AD] = "IEEE 802.3ad Dynamic link aggregation",
    [BOND_MODE_TLB] = "transmit load balancing",
    [BOND_MODE_ALB] = "adaptive load balancing",
};

[...] = 部分在我看来很奇怪。 (顺便说一下,BOND_MODE_ROUNDROBIN 和其他都是宏,只是扩展为整数。)

【问题讨论】:

    标签: c linux syntax


    【解决方案1】:

    它被称为指定初始化器,它是在 C99 中引入的。 GCC 也支持它作为扩展。

    用于初始化结构体和数组,详见Designated Initializers

    【讨论】:

    • 酷。所以无论具体的#defined 值是什么,它们总是会以正确的顺序出现在数组中。
    • +1,它扩展了我对结构成员指定初始化器的了解,很酷。
    • +1 对我来说是新的。真的很有帮助。我看到内核编码中使用了这种类型代码。
    【解决方案2】:

    那是designated initializer。它允许您以任意顺序初始化数组的内容。

    【讨论】:

      【解决方案3】:

      这里的名字是字符指针数组。

      这些指针指向存储在只读部分中的字符串。

      而初始化是使用 Designated Initializers 方法完成的。

      所以在这里你可以用它们的索引的任何顺序来初始化任何数组。 这些宏是数组的索引。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-29
        • 1970-01-01
        • 1970-01-01
        • 2010-09-30
        • 1970-01-01
        相关资源
        最近更新 更多