С ISO/IEC 9899: 1999 -> 6.7.8 Инициализация § 10Является ли каждый элемент статического массива инициализированным?
Если объект, который имеет автоматическую продолжительность хранения не инициализирована явно, его значение неопределенными. Если объект, который имеет статическую длительность хранения, не инициализируется явно, затем:
- если у него есть указатель, он инициализируется нулевым указателем;
- если у него арифметический тип, он инициализируется (положительным или без знака) нулем;
- если это совокупность, каждый член инициализируется (рекурсивно) в соответствии с этими правилами;
- если это объединение, первый именованный элемент инициализируется (рекурсивно) в соответствии с этими правилами .
ли я получить это право, что представить себе этот код:
int main()
{
static char *szArray[4];
return 0;
}
гарантируется, что каждый член szArray[]
инициализируется NULL
? Или как я могу понять «рекурсивно» в этом контексте?
Для практических целей на всех платформах, с которыми вы, вероятно, столкнетесь, неинициализированные статические данные находятся в области памяти, которая обнуляется при запуске программы. Стандарт более подробный, потому что есть (или могут быть) неясные платформы, где это нужно делать по-другому. – hyde
@hyde Ну, я не разрабатываю программное обеспечение для клиентов. Я разрабатываю сервер для себя, который компилируется и запускается на archix FreeBSD x86. Так что, наверное, я не буду бежать в беде, не так ли? – dhein
Если вы принимаете значения указателя, это NULL, что гарантируется стандартом C. Я просто имел в виду, вы также можете визуализировать ситуацию как область с нулевым объемом памяти на практике (на любом мобильном устройстве или мобильном устройстве). – hyde