gcc, неинициализированные глобальные переменные

есть ли способ узнать / предупредить, если глобальная переменная неинициализирована с помощью gcc ?

Я получил его для локальных / атомарных переменных" - Wuninitialized"

3 ответов


нет!
Глобальные и статические переменные инициализируются неявно, если ваш код не делает этого явно, как предписано стандартом C.
Короче говоря, глобальные и статические переменные никогда не остаются неинициализированными.


6.9.2 определения внешних объектов

семантика

1 Если объявление идентификатора для объекта, объем файла и инициализатор, в объявление-Это внешнее определение идентификатора.

2 объявление идентификатора для объекта, который имеет область файла без инициализатора, и без спецификатора класса хранения или с помощью спецификатор класса хранения статический, представляет собой предварительное определение. Если единица перевода содержит одно или несколько предварительных определений для идентификатор, и единица перевода не содержит внешнего определения для этого идентификатора, а затем поведение точно так же, как если бы единица перевода содержит объявление области файла этого идентификатор, с составным типом по состоянию на конец единицы перевода, с инициализатором равна 0.

два вышеуказанных предложения (из стандарта) гарантируйте, что файловые (глобальные) объекты всегда инициализируются.


нет, потому что GCC автоматически инициализирует все глобальные и статические переменные "0".