今天我遇到了一些代码,这些代码使用了我多年来进行 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
and gcc
使用此语法时默认不发出警告,但我从未在任何地方看到过它的记录。这是某种扩展,还是标准 C 语法?
这是 gcc 和 clang 支持的指定初始值设定项的 GNU 扩展,您可以阅读在海湾合作委员会文档中 https://gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html。请注意,这仅适用于初始值设定项,不适用于赋值,尽管两者都使用=
symbol.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)