Was ist der kürzeste, wohlgeformte C ++ - Code, der undefiniertes Verhalten aufweist?
code-challenge
c++
Luchian Grigore
quelle
quelle
Antworten:
Bearbeiten: Dies ist diagnostizierbar, also nicht UB.
Hier
^L
ist das Formular-Feed-Zeichen, das Teil des Basiszeichensatzes ist. 4 Zeichen (pro 2.2: 2 ist kein Zeilenumbruch erforderlich). Undefiniertes Verhalten ist perquelle
Dies hat acht Zeichen und ein undefiniertes Verhalten gemäß §2.2 / 1.
quelle
main
.main
. Es ist schwierig, Regeln durchzusetzen, wenn Sie nach einem Programm fragen, dem keine Regeln folgen müssen (das bedeutet UB!).main
, was du hast, schlecht geformt.§ 16.2 / 4:
quelle
Erläuterung:
C ++ 98 und C ++ 11 §5.8 / 1 geben beide an, dass
quelle
int
typisch 32? Das Ändern der RHS der Verschiebung auf-1
ist die gleiche Anzahl von Zeichen und hängt nicht von ganzzahligen Größen abWenn man Wikipedia glauben will, hier ein paar:
Das Ändern von Zeichenfolgen soll undefiniertes Verhalten verursachen. Es hat immer für mich funktioniert.
Eine nicht ungültige Funktion ohne Rückgabe verursacht undefinierte Rückgabewerte.
Die Division (von int?) Durch Null ist angeblich undefiniert. Ich weiß nur, dass es abstürzt.
quelle
int main(){}
.char **
nicht seinchar *
. Sie ändern lediglich einen Teil eines Zeigerwerts. In der Tatargv
ist garantiert sicher modifizierbar.char *argv[]
, keineconst
Qualifikanten zu haben. Sie könnten abstürzen, indem Sie mitint main(){char *v="";*v=1;}
quelle