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?
Ответы
Ответ 1
Это расширение GNU для назначенных инициализаторов, поддерживаемых как gcc, так и clang, о которых вы можете прочитать в документах gcc. Обратите внимание, что это только для инициализаторов, а не для назначений, которые очень разные, несмотря на то, что оба они используют символ =
.