Qual é o comportamento de uma variável não inicializada usada como seu próprio inicializado
Notei agora que o código a seguir pode ser compilado com clang / gcc / clang ++ / g ++, usandoc99
, c11
, c++11
padrões
int main(void) {
int i = i;
}
e mesmo com-Wall -Wextra
, nenhum dos compiladores relata aviso
Modificando o código paraint i = i + 1;
e com-Wall
, eles podem relatar:
why.c:2:13: warning: variable 'i' is uninitialized when used within its own initialization [-Wuninitialized]
int i = i + 1;
~ ^
1 warning generated.
Minhas perguntas
Por que isso é permitido pelos compiladores?O que os padrões C / C ++ dizem sobre isso? Especificamente, qual é o comportamento disso? UB ou implementação dependente?