Qual é o código C ++ mais curto e bem formado que exibe comportamento indefinido?
code-challenge
c++
Luchian Grigore
fonte
fonte
Respostas:
Edit: isso é diagnosticável, então não UB.
Aqui
^L
está o caractere de feed de formulário, que faz parte do conjunto de caracteres básico. 4 caracteres (uma nova linha não é necessária por 2.2: 2). O comportamento indefinido é porfonte
Possui oito caracteres e comportamento indefinido, de acordo com o §2.2 / 1.
fonte
main
.main
. É difícil impor regras quando você solicita um programa que não tem nenhuma regra a seguir (é isso que UB significa!).main
, o que você tem é mal formado.§16.2 / 4:
fonte
Explicação:
C ++ 98 e C ++ 11 §5.8 / 1 afirmam que
fonte
int
normalmente não é de 32? mudando o RHS da mudança para-1
o mesmo número de caracteres e não dependerá de tamanhos inteirosSe alguém acreditar na wikipedia, aqui estão alguns:
Diz-se que modificar cadeias causa um comportamento indefinido. Sempre funcionou para mim.
Uma função não nula sem retorno causa valores de retorno indefinidos.
A divisão (de int?) Por zero é supostamente indefinida. Tudo o que sei é que ele trava.
fonte
int main(){}
no mínimo.char **
não deve serchar *
. Você está apenas modificando parte de um valor de ponteiro. De fato,argv
é garantido que seja modificável com segurança.char *argv[]
não terconst
qualificadores. Você pode falhar, escrevendo em um literal string comint main(){char *v="";*v=1;}
fonte