<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[int main;]]></title><description><![CDATA[<p>Wenn ich</p>
<pre><code class="language-cpp">int main;
</code></pre>
<p>in eine einzelne Datei schreibe, krieg ich keine Warnung oder nen Fehler vom g++. Das Programm startet und stürzt ab.</p>
<p>Warum ist das nicht verboten? Im Standard find' ich nix zur Verwendung von main als globale Variable. Da steht nur</p>
<p>C++ Standard 11 schrieb:</p>
<blockquote>
<p>The name main is not otherwise reserved. [Example: member functions, classes, and enumerations<br />
can be called main, as can entities in other namespaces. —end example]</p>
</blockquote>
<p>Aber das erklärt alles irgendwie nicht, dass das Programm startet, denn main muss ja ne Funktion sein.<br />
Ich checks nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/302868/int-main</link><generator>RSS for Node</generator><lastBuildDate>Mon, 10 Aug 2026 22:04:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/302868.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 29 Apr 2012 14:15:08 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to int main; on Sun, 29 Apr 2012 14:15:08 GMT]]></title><description><![CDATA[<p>Wenn ich</p>
<pre><code class="language-cpp">int main;
</code></pre>
<p>in eine einzelne Datei schreibe, krieg ich keine Warnung oder nen Fehler vom g++. Das Programm startet und stürzt ab.</p>
<p>Warum ist das nicht verboten? Im Standard find' ich nix zur Verwendung von main als globale Variable. Da steht nur</p>
<p>C++ Standard 11 schrieb:</p>
<blockquote>
<p>The name main is not otherwise reserved. [Example: member functions, classes, and enumerations<br />
can be called main, as can entities in other namespaces. —end example]</p>
</blockquote>
<p>Aber das erklärt alles irgendwie nicht, dass das Programm startet, denn main muss ja ne Funktion sein.<br />
Ich checks nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2206651</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2206651</guid><dc:creator><![CDATA[Incocnito]]></dc:creator><pubDate>Sun, 29 Apr 2012 14:15:08 GMT</pubDate></item><item><title><![CDATA[Reply to int main; on Sun, 29 Apr 2012 14:19:38 GMT]]></title><description><![CDATA[<p>Das ist in der Tat lustig. Ich würde mal auf Bug tippen. VS11:</p>
<blockquote>
<p>unresolved external symbol _main referenced in function ___tmainCRTStartup</p>
</blockquote>
<p>So, wie es wohl sein sollte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2206653</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2206653</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sun, 29 Apr 2012 14:19:38 GMT</pubDate></item><item><title><![CDATA[Reply to int main; on Sun, 29 Apr 2012 14:19:58 GMT]]></title><description><![CDATA[<p>Gute Frage.^^ Vielleicht interpretiert es dein Compiler als</p>
<pre><code class="language-cpp">int main(){}
</code></pre>
<p>,<br />
so wie man leere Schleifen mit</p>
<pre><code class="language-cpp">while(true);
</code></pre>
<p>schreiben kann?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2206655</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2206655</guid><dc:creator><![CDATA[Thuruk]]></dc:creator><pubDate>Sun, 29 Apr 2012 14:19:58 GMT</pubDate></item><item><title><![CDATA[Reply to int main; on Sun, 29 Apr 2012 14:25:33 GMT]]></title><description><![CDATA[<p>while(true); kann man schreiben, weil die geschweiften Klammern hinter diesen Kontrollstrukturen optional sind (zb. if, for, do-while usw.), das ganze gilt dann halt einfach nur eine Zeile (bis zum ;). Ausgeführt wird dann halt nur diese Leere Anweisung ;. Da werden keine Klammern hinzugefügt.<br />
Das kanns nicht sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2206658</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2206658</guid><dc:creator><![CDATA[Incocnito]]></dc:creator><pubDate>Sun, 29 Apr 2012 14:25:33 GMT</pubDate></item><item><title><![CDATA[Reply to int main; on Sun, 29 Apr 2012 14:28:11 GMT]]></title><description><![CDATA[<p>Wie du schon festgestellt hast, ist das erst einmal gültiger Code, d.h. der Compiler macht darauf erst einmal Objektcode, der dann ein Symbol <code>main</code> enthält. Der Linker bekommt dann beim Erstellen einer ausführbaren Datei diesen Objektcode und den Auftrag, darin ein Symbol main zu suchen, welches wiedrum vom Startupcode aufgerufen wird. Dabei ist der GCC recht liberal, was alles durchgeht und was nicht. Man will ja alte Hasen mit irgendwelchen tollen Programmiertricks nicht aussperren. Hauptsache es ist irgendwie anspringbar und das ist deine Variable. Da du aber keine tollen Tricks benutzt hast, sondern an der Stelle einfach nur irgendwelcher Unsinn steht, stürzt ein so erstelltes Programm sofort ab.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2206659</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2206659</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 29 Apr 2012 14:28:11 GMT</pubDate></item><item><title><![CDATA[Reply to int main; on Sun, 29 Apr 2012 14:29:22 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Wie du schon festgestellt hast, ist das erst einmal gültiger Code,</p>
</blockquote>
<p>Dann ist es definitiv ein Bug. Ansonsten könnte man ja einfach mal behaupten, dass main einen ungültigen Typ hat und der Compiler deshalb machen darf was er will.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2206660</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2206660</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sun, 29 Apr 2012 14:29:22 GMT</pubDate></item><item><title><![CDATA[Reply to int main; on Sun, 29 Apr 2012 14:39:02 GMT]]></title><description><![CDATA[<p>cooky451 schrieb:</p>
<blockquote>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Wie du schon festgestellt hast, ist das erst einmal gültiger Code,</p>
</blockquote>
<p>Dann ist es definitiv ein Bug. Ansonsten könnte man ja einfach mal behaupten, dass main einen ungültigen Typ hat und der Compiler deshalb machen darf was er will.</p>
</blockquote>
<p>Nein, das ist definitiv ein Feature. Kein portables natürlich. Aber das ist sicher so gewollt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2206665</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2206665</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 29 Apr 2012 14:39:02 GMT</pubDate></item><item><title><![CDATA[Reply to int main; on Sun, 29 Apr 2012 14:47:12 GMT]]></title><description><![CDATA[<p>Mit Bug meinte ich jetzt Verstoß gegen den Standard. Das dürfte es doch sein, wenn man den Code als korrekt ansieht, (also nicht das Argument mit dem falschen Typen bringt), oder? Mir würde da jetzt kein Fluchtweg mehr einfallen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2206668</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2206668</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sun, 29 Apr 2012 14:47:12 GMT</pubDate></item><item><title><![CDATA[Reply to int main; on Sun, 29 Apr 2012 15:01:19 GMT]]></title><description><![CDATA[<p>cooky451 schrieb:</p>
<blockquote>
<p>Mit Bug meinte ich jetzt Verstoß gegen den Standard. Das dürfte es doch sein, wenn man den Code als korrekt ansieht, (also nicht das Argument mit dem falschen Typen bringt), oder? Mir würde da jetzt kein Fluchtweg mehr einfallen.</p>
</blockquote>
<p>Ich sehe nicht, wo das gegen den Standard verstoßen würde. Die Signatur von main muss nicht <code>int main()</code> oder <code>int mein(int, char**)</code> sein, diese beiden Signaturen sind bloß diejenigen die unterstützt werden müssen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2206672</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2206672</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 29 Apr 2012 15:01:19 GMT</pubDate></item><item><title><![CDATA[Reply to int main; on Sun, 29 Apr 2012 16:04:07 GMT]]></title><description><![CDATA[<p>Incocnito schrieb:</p>
<blockquote>
<p>C++ Standard 11 schrieb:</p>
<blockquote>
<p>The name main is not otherwise reserved. [Example: member functions, classes, and enumerations<br />
can be called main, as can <strong>entities in other namespaces</strong>. —end example]</p>
</blockquote>
</blockquote>
<p>C++11 Standard schrieb:</p>
<blockquote>
<p>A program <em>shall</em> contain a <strong>global function called main</strong>, which is the designated start of the program.</p>
</blockquote>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Ich sehe nicht, wo [eine globale Variable <code>int main;</code> ] [...] gegen den Standard verstoßen würde</p>
</blockquote>
<p>Ich verstehe nicht, was am Standard missverständlich ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2206694</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2206694</guid><dc:creator><![CDATA[idontgotit]]></dc:creator><pubDate>Sun, 29 Apr 2012 16:04:07 GMT</pubDate></item><item><title><![CDATA[Reply to int main; on Sun, 29 Apr 2012 16:41:05 GMT]]></title><description><![CDATA[<p>idontgotit schrieb:</p>
<blockquote>
<p>Incocnito schrieb:</p>
<blockquote>
<p>C++ Standard 11 schrieb:</p>
<blockquote>
<p>The name main is not otherwise reserved. [Example: member functions, classes, and enumerations<br />
can be called main, as can <strong>entities in other namespaces</strong>. —end example]</p>
</blockquote>
</blockquote>
<p>C++11 Standard schrieb:</p>
<blockquote>
<p>A program <em>shall</em> contain a <strong>global function called main</strong>, which is the designated start of the program.</p>
</blockquote>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Ich sehe nicht, wo [eine globale Variable <code>int main;</code> ] [...] gegen den Standard verstoßen würde</p>
</blockquote>
<p>Ich verstehe nicht, was am Standard missverständlich ist.</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> Ebendrum ist es doch erlaubt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2206707</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2206707</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 29 Apr 2012 16:41:05 GMT</pubDate></item><item><title><![CDATA[Reply to int main; on Sun, 29 Apr 2012 16:48:18 GMT]]></title><description><![CDATA[<p><code>int main;</code> ist doch keine Funktion.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2206710</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2206710</guid><dc:creator><![CDATA[idontgotit]]></dc:creator><pubDate>Sun, 29 Apr 2012 16:48:18 GMT</pubDate></item><item><title><![CDATA[Reply to int main; on Sun, 29 Apr 2012 16:52:02 GMT]]></title><description><![CDATA[<p>idontgotit schrieb:</p>
<blockquote>
<p><code>int main;</code> ist doch keine Funktion.</p>
</blockquote>
<p>main muss eine Funktion sein, damit es ein gültiges, portables Programm ist. Da steht aber nicht, dass es keine anderen Formen von main geben darf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2206713</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2206713</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 29 Apr 2012 16:52:02 GMT</pubDate></item><item><title><![CDATA[Reply to int main; on Sun, 29 Apr 2012 17:07:59 GMT]]></title><description><![CDATA[<p>Aber da steht doch, dass jedes C++ Programm eine main-Funktion haben soll. Die Quelldatei</p>
<p>X.cpp</p>
<pre><code class="language-cpp">int main;
</code></pre>
<p>enthält aber keine Funktion main, deshalb darf das doch gar nicht kompilieren..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2206714</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2206714</guid><dc:creator><![CDATA[Incocnito]]></dc:creator><pubDate>Sun, 29 Apr 2012 17:07:59 GMT</pubDate></item><item><title><![CDATA[Reply to int main; on Sun, 29 Apr 2012 17:08:57 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>main muss eine Funktion sein, damit es ein gültiges, portables Programm ist. Da steht aber nicht, dass es keine anderen Formen von main geben darf.</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Es steht, dass main eine Funktion ist, die <code>int</code> zurückgibt. Den einzigen Freiraum, den der Standard lässt, sind die Parameter.</p>
<p><code>int main;</code> ist eine Variable (d.h. keine Funktion) und folglich gibt es auch keinen int zurück.</p>
<p>Da der Name mit einer standardkonformen Funktion int main() kollidiert, hat das Programm keine Funktion main(). Da es diese aber haben muss, ist es verboten, keine zu haben, ist es verboten eine Variable ::main zu definieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2206715</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2206715</guid><dc:creator><![CDATA[idontgotit]]></dc:creator><pubDate>Sun, 29 Apr 2012 17:08:57 GMT</pubDate></item><item><title><![CDATA[Reply to int main; on Sun, 29 Apr 2012 17:24:18 GMT]]></title><description><![CDATA[<p>Incocnito schrieb:</p>
<blockquote>
<p>Aber da steht doch, dass jedes C++ Programm eine main-Funktion haben soll. Die Quelldatei</p>
<p>X.cpp</p>
<pre><code class="language-cpp">int main;
</code></pre>
<p>enthält aber keine Funktion main, deshalb darf das doch gar nicht kompilieren..</p>
</blockquote>
<p>Hast du noch nie ein Programm mit mehreren Modulen compiliert? Die enthalten in der Regel alle kein main.</p>
<p>idontgotit schrieb:</p>
<blockquote>
<p>SeppJ schrieb:</p>
<blockquote>
<p>main muss eine Funktion sein, damit es ein gültiges, portables Programm ist. Da steht aber nicht, dass es keine anderen Formen von main geben darf.</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Es steht, dass main eine Funktion ist, die <code>int</code> zurückgibt. Den einzigen Freiraum, den der Standard lässt, sind die Parameter.</p>
<p><code>int main;</code> ist eine Variable (d.h. keine Funktion) und folglich gibt es auch keinen int zurück.</p>
<p>Da der Name mit einer standardkonformen Funktion int main() kollidiert, hat das Programm keine Funktion main(). Da es diese aber haben muss, ist es verboten, keine zu haben, ist es verboten eine Variable ::main zu definieren.</p>
</blockquote>
<p>Nö, heißt es nicht. Es heißt nur, dass du, wenn du eine main Funktion mit den genannten Parametern hast, dann kann man daraus ein gültiges Programm erstellen. Du darfst andere mains definieren wie du lustig bist. Leute, könnt ihr alle nicht mehr zwischen Compiler und Linker unterscheiden? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2206716</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2206716</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 29 Apr 2012 17:24:18 GMT</pubDate></item><item><title><![CDATA[Reply to int main; on Sun, 29 Apr 2012 17:27:02 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Du darfst andere mains definieren wie du lustig bist. Leute, könnt ihr alle nicht mehr zwischen Compiler und Linker unterscheiden? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
</blockquote>
<p>Sorry ich schreib mein Compiler in Java <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2206717</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2206717</guid><dc:creator><![CDATA[Zeus]]></dc:creator><pubDate>Sun, 29 Apr 2012 17:27:02 GMT</pubDate></item><item><title><![CDATA[Reply to int main; on Sun, 29 Apr 2012 18:11:21 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Leute, könnt ihr alle nicht mehr zwischen Compiler und Linker unterscheiden? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
</blockquote>
<p>Wenn ich Programm schreibe, dann meine ich das, was der C++-Standard darunter versteht (keine Ahnung, wie du plötzlich auf Compiler kommst):</p>
<p>C++ Standard schrieb:</p>
<blockquote>
<p>A program consists of one or more translation units (Clause 2) linked together.</p>
</blockquote>
<p>Wenn im Ursprungspost von &quot;das Programm startet und stürzt ab&quot; die Rede ist, dann ist das wohl die einzig sinnvolle Interpretation.</p>
<p>Mods, könnt ihr alle nicht mehr zwischen Programm und Übersetzungseinheit unterscheiden?</p>
<p>C++ Standard schrieb:</p>
<blockquote>
<p>If there is more than one [..] matching entity, the program is ill-formed.</p>
</blockquote>
<p>Wenn jemand eine globale Variable <code>int main;</code> definiert, dann ist das Programm(!) ill-formed, da es entweder (a) mehrere Symbole &quot;main&quot; enthält oder (b) keine Funktion &quot;main&quot; besitzt.</p>
<p>Was du vorher schriebst, dürfte damit widerlegt sein.</p>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Es heißt nur, dass du, wenn du eine main Funktion mit den genannten Parametern hast, dann kann man daraus ein gültiges Programm erstellen. Du darfst andere mains definieren wie du lustig bist.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2206732</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2206732</guid><dc:creator><![CDATA[idontgotit]]></dc:creator><pubDate>Sun, 29 Apr 2012 18:11:21 GMT</pubDate></item><item><title><![CDATA[Reply to int main; on Sun, 29 Apr 2012 18:31:09 GMT]]></title><description><![CDATA[<p>@idontgotit<br />
Du schießt fast immer daneben, aber mit ill-formed hast ein bisschen getroffen.</p>
<pre><code class="language-cpp">// a non-ill-formed program
int main;

int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{....}
</code></pre>
<p>Deswegen sind die Satze bezüglich den Namen main eigentlich auch nur Empfehlungen/Ratschläge/Verpflichtungen, aber keine harte Einschräkung/Gesetzt/Regeln. Daraus folgt, dass ein Compiler auch nicht harte Fehler melden muss.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2206740</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2206740</guid><dc:creator><![CDATA[Zeus]]></dc:creator><pubDate>Sun, 29 Apr 2012 18:31:09 GMT</pubDate></item><item><title><![CDATA[Reply to int main; on Sun, 29 Apr 2012 18:33:36 GMT]]></title><description><![CDATA[<p>idontgotit schrieb:</p>
<blockquote>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Leute, könnt ihr alle nicht mehr zwischen Compiler und Linker unterscheiden? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
</blockquote>
<p>Wenn ich Programm schreibe, dann meine ich das, was der C++-Standard darunter versteht (keine Ahnung, wie du plötzlich auf Compiler kommst):</p>
</blockquote>
<p>Weil das das Problem ist! Du darfst mains definieren wie du lustig bist. Bloß wenn du anfängst, die falschen mains zu einem Programm zusammenzulinken, dann ist dir nicht mehr garantiert, dass ein lauffähiges Programm rauskommt. Es darf aber selbstverständlich ein lauffähiges Programm rauskommen, das Definieren anderer mains ist nicht verboten und es ist mir immer noch nicht klar, wo du dieses Verbot siehst. Der Standard erwähnt sogar explizit, dass andere Arten ein gültiges Programm zu erhalten erlaubt sind (im Teil über Startup and Termination und über hosted und freestanding evironments [aus dem Gedächtnis zitiert]).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2206741</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2206741</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 29 Apr 2012 18:33:36 GMT</pubDate></item><item><title><![CDATA[Reply to int main; on Sun, 29 Apr 2012 18:46:21 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Es darf aber selbstverständlich ein lauffähiges Programm rauskommen, das Definieren anderer mains ist nicht verboten und es ist mir immer noch nicht klar, wo du dieses Verbot siehst.</p>
</blockquote>
<p>Das Definieren an sich ist nicht an sich verboten, nur kann man damit später nie ein gültiges Programm erstellen. Das habe ich so deutlich geschrieben.</p>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Der Standard erwähnt sogar explizit, dass andere Arten ein gültiges Programm zu erhalten erlaubt sind (im Teil über Startup and Termination und über hosted und freestanding evironments [aus dem Gedächtnis zitiert]).</p>
</blockquote>
<p>Es steht nur, dass die freestanding environments auf main verzichten dürfen, ist es hosted (wovon wohl die Rede ist), ist eine globale Funktion main, die als Einstiegspunkt genutzt wird, Pflicht.</p>
<p>Zeus  schrieb:</p>
<blockquote>
<pre><code class="language-cpp">// a non-ill-formed program
int main;

int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{....}
</code></pre>
</blockquote>
<p>Was soll daran legal sein? Nur weil es der (sowieso nicht standardgetreue) MSVC akzeptiert, heisst das noch lange nicht, dass es nicht ill-formed wäre.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2206748</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2206748</guid><dc:creator><![CDATA[idontgotit]]></dc:creator><pubDate>Sun, 29 Apr 2012 18:46:21 GMT</pubDate></item><item><title><![CDATA[Reply to int main; on Sun, 29 Apr 2012 18:53:33 GMT]]></title><description><![CDATA[<p>idontgotit schrieb:</p>
<blockquote>
<p>Zeus  schrieb:</p>
<blockquote>
<pre><code class="language-cpp">// a non-ill-formed program
int main;

int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{....}
</code></pre>
</blockquote>
<p>Was soll daran legal sein? Nur weil es der (sowieso nicht standardgetreue) MSVC akzeptiert, heisst das noch lange nicht, dass es nicht ill-formed wäre.</p>
</blockquote>
<p>Willst du nur trollen, soll ich jetzt deine eigene Kommentare zitieren, warum das Programm nicht ill-formed ist?</p>
<blockquote>
<p>If there <strong>is more than one [..] matching entity</strong>, the program is ill-formed.</p>
</blockquote>
<p>Ein Win32-API-Programm hat keine Main Funktion als Einstiegspunkt. Daher gibst auch durch die Deklaration von int main auch nur eine Entity.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2206749</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2206749</guid><dc:creator><![CDATA[Zeus]]></dc:creator><pubDate>Sun, 29 Apr 2012 18:53:33 GMT</pubDate></item><item><title><![CDATA[Reply to int main; on Sun, 29 Apr 2012 19:04:22 GMT]]></title><description><![CDATA[<p>Zeus schrieb:</p>
<blockquote>
<p>Willst du nur trollen</p>
</blockquote>
<p>Nichts liegt mir ferner.</p>
<p>Zeus schrieb:</p>
<blockquote>
<p>Ein Win32-API-Programm hat keine Main Funktion als Einstiegspunkt.</p>
</blockquote>
<p>Die muss es aber haben, sonst ist es kein C++.</p>
<p>C++ Standard schrieb:</p>
<blockquote>
<p>A program shall contain a global function called main, which is the designated start of the program. It is implementation-defined whether a program in a freestanding environment is required to define a main function.</p>
</blockquote>
<p>Für dein Beispiel wichtig: &quot;designated start of the program&quot;<br />
Für SeppJ wichtig: &quot;It is implementation-defined [...] in a freestanding environment&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2206753</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2206753</guid><dc:creator><![CDATA[idontgotit]]></dc:creator><pubDate>Sun, 29 Apr 2012 19:04:22 GMT</pubDate></item><item><title><![CDATA[Reply to int main; on Sun, 29 Apr 2012 19:16:18 GMT]]></title><description><![CDATA[<p>Ist dir der Unterschied nicht klar, zwischen <em>müssen</em> und <em>dürfen</em>? Ja, ein Programm ohne int main() oder int main(int char**) muss nicht funktionieren. Es darf aber funktionieren, wenn es andere mains gibt! Möchtest du denn verbieten, dass ich in meinem freestanding environment eine globale Variable namens main definiere? Das <strong>muss</strong> der Compiler fressen. Bloß wenn ich hinterher versuche, diese Variable wie eine main-Funktion zu linken, dann darf ich nicht erwarten (außer ich habe ganz schlaue Tricks angestellt), dass ein gültiges Programm rauskommt. Tut es ja auch nicht! Darum darf ich trotzdem eine Variable haben, die so heißt. Was ist daran so schwer zu kapieren?</p>
<p>Da ich das inzwischen dreimal geschrieben habe und als Antwort immer Stellen aus dem Standard vorgesetzt bekommen haben, <strong>die mich bestätigen</strong>, sehe ich keine Grund noch ein viertes Mal diese Antwort zu geben, wenn nichts neues kommt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2206754</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2206754</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 29 Apr 2012 19:16:18 GMT</pubDate></item><item><title><![CDATA[Reply to int main; on Sun, 29 Apr 2012 19:51:26 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Da ich das inzwischen dreimal geschrieben habe und als Antwort immer Stellen aus dem Standard vorgesetzt bekommen haben, <strong>die mich bestätigen</strong>, sehe ich keine Grund noch ein viertes Mal diese Antwort zu geben, wenn nichts neues kommt.</p>
</blockquote>
<p>Gut, sehe es so, dass ich es nicht schaffe, den Standard richtig zu interpretieren und du mir zeigst, wie es geht. Kapiert habe ich ihn immer noch nicht.</p>
<blockquote>
<p>Möchtest du denn verbieten, dass ich in meinem freestanding environment eine globale Variable namens main definiere?</p>
</blockquote>
<p>Bitte lass das freestanding environment weg, da ist <s>alles</s> vieles erlaubt und es kommt selten vor. (Btw: Wenn eine Win32-Anwendung als freestanding gilt, hat Zeus natürlich recht)</p>
<p>In meinen Augen steht</p>
<blockquote>
<p>Ja, ein Programm ohne int main() oder int main(int char**) muss nicht funktionieren</p>
</blockquote>
<p>(in hosted environments) in direkten Gegensatz zu</p>
<blockquote>
<p>A program shall contain a global function called main, which is the designated start of the program.</p>
</blockquote>
<p>da jedes (gehostete) Programm eine Funktion haben muss (== &quot;shall&quot; und &quot;shall&quot; != &quot;darf&quot;), die &quot;main&quot; heisst und &quot;int&quot; zurückgibt.</p>
<p>Was meinst du damit:</p>
<blockquote>
<p>Es darf aber funktionieren, wenn es andere mains gibt!</p>
</blockquote>
<p>Gloable Funktionen, die &quot;main&quot; heissen und &quot;int&quot; zurückgeben oder etwas anderes?<br />
Letzteres ist in meinem Verständnis unmöglich, da ein (gehostetes) Programm ein &quot;int main(irgendwas)&quot; haben <strong>muss</strong> (was als Einstiegspunkt genutzt wird).</p>
<blockquote>
<p>Bloß wenn ich hinterher versuche, diese Variable wie eine main-Funktion zu linken, dann darf ich nicht erwarten (außer ich habe ganz schlaue Tricks angestellt), dass ein gültiges Programm rauskommt.</p>
</blockquote>
<p>Sind diese schlauen Tricks mit dem Standard verträglich?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2206768</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2206768</guid><dc:creator><![CDATA[idontgotit]]></dc:creator><pubDate>Sun, 29 Apr 2012 19:51:26 GMT</pubDate></item><item><title><![CDATA[Reply to int main; on Sun, 29 Apr 2012 20:47:20 GMT]]></title><description><![CDATA[<p>idontgotit schrieb:</p>
<blockquote>
<p>Was meinst du damit:</p>
<blockquote>
<p>Es darf aber funktionieren, wenn es andere mains gibt!</p>
</blockquote>
<p>Gloable Funktionen, die &quot;main&quot; heissen und &quot;int&quot; zurückgeben oder etwas anderes?<br />
Letzteres ist in meinem Verständnis unmöglich, da ein (gehostetes) Programm ein &quot;int main(irgendwas)&quot; haben <strong>muss</strong> (was als Einstiegspunkt genutzt wird).</p>
</blockquote>
<p>Das Programm des Threaderstellers funktioniert ja auch nicht! Denn es hat keine gültige main-Funktion! Aber der Compiler muss ein <code>int main;</code> schlucken, denn er kann ja nicht wissen, was ich später damit anstelle. Vielleicht will ich ja kein lauffähiges Programm. Vielleicht will ich das später als Variable in einer freestanding-Implementierung benutzen. Vielleicht will ich das hinterher mit einem wilden Fortran-Code linken, indem die Startfunktion ganz anders heißt. Vielleicht will ich einen Editor für Objektdateien testen. Wenn ich <code>int main;</code> schreibe, dann soll mir einfach nur eine Objektdatei erstellt werden, in der ein Symbol namens <code>main</code> existiert, das Speicherplatz für einen Integer ist. Was ich mit dem Symbol später anstelle, das hat den Compiler erst einmal gar nichts anzugehen. main ist für den Compiler nichts besonderes<sup>*</sup>, interessant wird es erst, wenn ein fertiges Programm erstellt wird. Dann sollte die main eine Funktion mit passender Signatur sein.</p>
<blockquote>
<blockquote>
<p>Bloß wenn ich hinterher versuche, diese Variable wie eine main-Funktion zu linken, dann darf ich nicht erwarten (außer ich habe ganz schlaue Tricks angestellt), dass ein gültiges Programm rauskommt.</p>
</blockquote>
<p>Sind diese schlauen Tricks mit dem Standard verträglich?</p>
</blockquote>
<p>Bestimmt nicht. Ich weiß nicht mal, ob so etwas möglich ist, Jedenfalls ist es vorstellbar.</p>
<p><sup>*</sup>: Außer der Sonderregelung, dass in einer Funktion namens main ein return 0 implizit ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2206782</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2206782</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 29 Apr 2012 20:47:20 GMT</pubDate></item></channel></rss>