Ich bin in eine Diskussion mit einem Kollegen von mir involviert, der sagt, dass es möglich ist, ein Programm in C und C ++ ohne main auszuführen und das auch in einer gehosteten Umgebung. Ich sagte, das sei völlig inkorrekt gemäß den Standards. Er bat mich dann, diesen Link zu sehen, der
erwähntIn einigen Jahren wurde ein Eintrag eingereicht, der so offensichtlich absurd war, dass er eine neue Definition einiger Regeln für das nächste Jahr erforderte. Dies wird als eine hohe Ehre angesehen. Ein Beispiel ist das kürzeste selbstreproduzierende Programm der Welt. Der Eintrag war ein Programm Null Byte Länge, die, wenn ausgeführt, null Bytes auf den Bildschirm gedruckt (einfach eine leere Datei).
Ich argumentierte, dass die Lösung gemäß C- und C ++ - Standards nicht korrekt wäre. Was denkst du darüber?
Sehen Sie sich auch den Link an.
Angeblich gab es einige Compiler, die ein Programm ohne main()
akzeptierten und ihr eigenes No-Op-Fallback main()
aus einer Bibliothek lieferten. Solche Programme sind jedoch nicht konform.
Die Häufigkeit, auf die Sie sich beziehen, war der Eintrag smr
des IOCCC 1994. Wie vom Wettbewerb veröffentlicht, wurde jedoch kein C-Compiler verwendet! Die Zeilengruppe Makefile
enthielt:
Also wurde es nicht kompiliert, sondern lediglich das leere .c
in ein leeres Shell-Skript kopiert.
Der Grund, warum dies von den Richtern nicht völlig sinnlos und off-topic verworfen wurde, muss sein, dass die leere Datei (zumindest traditionell) eine legale Kompilierungseinheit in C ist und zu einem kompiliert wird .o
ohne Probleme, wenn Sie wollen - es ist nicht genug, um ein komplettes Programm zu bilden.
main
ist sicherlich der Standard-Einstiegspunkt für C-Programme, aber es ist möglich, dass nicht standardmäßige C-Programme anderswo gestartet werden. Windows-GUI-Anwendungen beginnen beispielsweise stattdessen mit WinMain
oder der Linker hat ein /ENTRY
Direktive, so dass Sie den CRT vollständig umgehen und Ihre Anwendung mit einer benutzerdefinierten Funktion starten können.
Wenn ein Programm in einer gehosteten Umgebung kein Hauptverzeichnis hat, dann ist es nicht C oder C ++, gemäß den Standards.