arum sind zusammengesetzte Literale in C modifizierba
One assoziiert normalerweise "nicht änderbar" mit dem Begriff "wörtlich"
char* str = "Hello World!";
*str = 'B'; // Bus Error!
Bei der Verwendung von zusammengesetzten Literalen stellte ich jedoch schnell fest, dass sie vollständig modifizierbar sind (und beim Sperren des generierten Maschinencodes werden sie auf den Stapel verschoben):
char* str = (char[]){"Hello World"};
*str = 'B'; // A-Okay!
Ich kompiliere mitclang-703.0.29
. Sollten diese beiden Beispiele nicht genau denselben Maschinencode generieren? Ist ein zusammengesetztes Literal wirklich ein Literal, wenn es änderbar ist?
EDIT: Ein noch kürzeres Beispiel wäre:
"Hello World"[0] = 'B'; // Bus Error!
(char[]){"Hello World"}[0] = 'B'; // Okay!