Ist ein C- oder C ++ - Programm ohne main () gegen Standards?

8

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ähnt
  

In 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.

    
Prasoon Saurav 21.08.2011, 19:42
quelle

3 Antworten

11

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:

%Vor%

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.

    
Henning Makholm 21.08.2011 19:57
quelle
8

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.

    
Neil 21.08.2011 19:50
quelle
4

Wenn ein Programm in einer gehosteten Umgebung kein Hauptverzeichnis hat, dann ist es nicht C oder C ++, gemäß den Standards.

    
David Heffernan 21.08.2011 19:49
quelle

Tags und Links