c - 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 语法?
解决方案
这是 gcc 和 clang 支持的指定初始化程序的 GNU 扩展,您可以在 gcc 文档中阅读。请注意,这仅适用于初始化程序,不适用于赋值,尽管两者都使用了=
符号,但它们是非常不同的东西。
推荐阅读
- python - Selenium:Chromedriver.exe 使用 if 中的函数自动退出
- python-3.x - 如何使用 PIL 或类似的东西用 yuv420 格式数据写入图像
- angular - Should i disable change detection during angular app init phase?
- apache-kafka - Create schema from JSON to write Parquet to HDFS with Kafka Sink
- c# - 良好实践 - C# 中的私有事件与私有方法
- javascript - Angular 2 - 使用 AOT 构建:Javascript 堆内存不足
- swift - 压缩我的音频文件后,为什么我不能播放文件?
- c# - 使用 .net 核心声纳扫描仪将声纳结果发布到 tfs 构建
- node.js - find all documents of all collections in db of mongoose using express
- ios - 斯威夫特:如何使所有正在运行的计时器无效?