In einem gehosteten System muss der Standard main
mit einem "deklarierten Rückgabetyp des Typs int
" definiert werden. Das "erklärt" gehört zu "abgeleiteten Rückgabetypen", so dass wir dieses Wort für die Zwecke dieser Frage ignorieren können. In C enthält der Standard explizit eine Fußnote, die besagt, dass typedef
für int
verwendet werden kann, aber dies fehlt im C++ - Standard. Ich gehe davon aus, die Absicht ist die gleiche wie die Sprache ist "Rückgabetyp des Typs int
" und "eine Funktion von() int
zurückgeben" und ein typedef
ist einfach ein Alias, kein anderer Typ. Daher würde dieses Programm als legal betrachtet werden:Wie legal ist diese Definition von `main`?
typedef int boobs;
boobs main() { }
Was, wenn wir das stattdessen tun?
#include <cstdint>
int32_t main() {}
Auf vielen Systemen diese als int32_t
kompiliert nur int
aber nicht alle Systeme. Meine Verwirrung rührt von der Tatsache her, dass int32_t
ein implementierungsdefinierter Wert ist, was bedeutet, dass der Kompilierungsfehler von der Implementierung abhängt.
Also, was ist die Rechtmäßigkeit dieser Situation? Ist das gesamte Programm schlecht aufgebaut, weil es manchmal kompilieren kann oder nicht? Oder ist es wohlgeformt, weil es auf einen implementierungsdefinierten Wert ankommt, der von der Standardbibliothek kommt?
'so können wir dieses Wort für die' ignorieren - lassen Sie mich aus diesem –
, was wäre der Nutzen von diesem? Ich meine, wenn es nur funktioniert, wenn 'int32_t' nur' int' ist, dann könntest du auch 'int' an erster Stelle verwenden – user463035818
" Kompilierungsfehler hängt von der Implementierung ab "--- ja, das kann passieren, es ist nichts Ungewöhnliches – Brian