6.7.9 учитывает так называемые назначенные инициализаторы.
Рассмотрим следующую демонстрационную программу
#include <stdio.h>
struct test{
int a;
int b;
int c;
};
int main(void)
{
struct test test = {
.c = 123
};
printf("%d %d %d\n", test.a, test.b, test.c);
return 0;
}
Ее вывод
0 0 123
Или другойprogram
#include <stdio.h>
int main(void)
{
enum { N = 10 };
int a[N] = { [0] = 0, [4] = 4, [9] = 9 };
for ( size_t i = 0; i < N; i++ ) printf( "%d ", a[i] );
putchar( '\n' );
return 0;
}
Выходные данные
0 0 0 0 4 0 0 0 0 9
Итак
все подобъекты, которые не инициализированы явно, должны быть неявно инициализированы так же, как объектыкоторые имеют статическую продолжительность хранения .
Вторая цитата существовала до того, как назначенные инициализаторы были приняты в Стандарте C, и описывает ситуацию, например, такую как
char s[20] = "Hello";
иотвечает на вопрос, будет ли инициализирован хвост массива символов. Он поддерживает совместимость со стандартом C ++, где указанные инициализаторы отсутствовали, до появления стандарта C ++ 17.