у вас есть новая версия GCC. Мой старше. Когда вы говорите «вероятный источник неопределенного поведения (если значение переменной используется позже)», это то же самое, что и использование его неинициализированным.

о сейчас я заметил, что следующий код можно скомпилировать с помощью clang / gcc / clang ++ / g ++, используяc99, c11, c++11 стандарты.

int main(void) {
    int i = i;
}

и даже с-Wall -WextraНи один из компиляторов даже не сообщает о предупреждениях.

Изменив код наint i = i + 1; и с-Wallони могут сообщить:

why.c:2:13: warning: variable 'i' is uninitialized when used within its own initialization [-Wuninitialized]
    int i = i + 1;
        ~   ^
1 warning generated.

Мои вопросы:

Почему это даже разрешено компиляторами?Что об этом говорят стандарты C / C ++? В частности, каково поведение этого? UB или зависит от реализации?

Ответы на вопрос(3)

Ваш ответ на вопрос