005
06.06.2022, 17:24 Uhr
ao
(Operator)
|
Zitat von FloSoft: |
hier weist du z die adresse 5 zu. Das ist etwas was ein aktueller compiler so nicht zulässt. (Direkte adressierung ist zu fehleranfällig und auch durch die Speichermodelle der Betriebsysteme so gar nicht sinnvoll nutzbar - an der Stelle 5 muss ja kein bereitgestellter Speicher liegen)
|
Das ist nicht der Grund.
Erstens ist es nicht Sache des Compilers, zu bewerten, wie fehleranfällig ein Ansatz ist. Der Compiler hat den größten Blödsinn klaglos zu übersetzen, wenn es syntaktisch richtig formulierter Blödsinn ist. Mit einem reinterpret_cast kriegt man das hier hin: int *z = reinterpret_cast<int*>(5);
Zweitens ist dem Compiler das Speichermodell des Betriebssystems ziemlich schnuppe - der weiß doch gar nicht, ob es überhaupt ein Betriebssystem mit Speichermodell gibt. Wenn das Programm bare-metal auf einem Mikrocontroller läuft, kann sowas wie "biege einen Int-Pointer auf die Adresse 5" ein sinnvoller Befehl sein.
Der Grund ist schlicht und einfach, dass int *z = 5; kein gültiges C++ ist, weil eine implizite Umwandlung von int zu int* illegal ist. In C wäre es legal. Dieser Post wurde am 06.06.2022 um 17:27 Uhr von ao editiert. |