首页 > 解决方案 > C [x ... y] 范围赋值

问题描述

我今天遇到了一些代码,这些代码使用了我多年从事 C 编程时从未见过的语法。

MWE:

#include<stdio.h>

char *example_array[] = {
    [0 ... 5] = "hello world",
    [6 ... 10] = "goodbye world"
};

int main(void) {
    printf("%s, %s.\n", example_array[3], example_array[7]);
    return 0;
}

预期输出:

hello world, goodbye world.

很清楚在静态上下文中发生了什么,但我很好奇这是否可以用作非静态快捷方式中的方便快捷方式,例如循环中的分配。当然,它不会提供任何无法提升的性能-funroll-loops,但它可能会在矩阵行分配或其他方面产生更清晰的代码。

clang并且gcc在使用此语法时默认不给出警告,但我从未在任何地方看到它记录在案。这是某种扩展,还是标准的 C 语法?

标签: carrays

解决方案


这是 gcc 和 clang 支持的指定初始化程序的 GNU 扩展,您可以在 gcc 文档中阅读。请注意,这仅适用于初始化程序,不适用于赋值,尽管两者都使用了=符号,但它们是非常不同的东西。


推荐阅读