weird main



  • int main[] = { /*** something ***/ };
    

    kompiliert bei mir einwandfrei (G++ 4.7.2), beim ausführen jedoch gibt es einen Segfault. Da ich im Internet nichts dazu finden konnte, frag ich mal hier: Was hat es mit dieser komischer main auf sich?



  • int main () {
    /*something*/
    return 0;
    }
    

    Einfach das = entfernen und die eckigen Klammern mit runden ersetzen.



  • Schön und gut, leider beantwortet es absolut nicht meine Frage.
    Nochmal besser formuliert: Hat int main[] = {}; überhaupt irgendeinen Sinn, oder ist es einfach so wie es ist, und ist absolut wegzudenken?



  • Ach so, du willst ein Array mit dem Namen main anlegen?
    So weit ich weiß klappt das nicht, weil main reserviert wird.
    Einfach einen anderen Namen nehmen.



  • Fischlinger schrieb:

    Ach so, du willst ein Array mit dem Namen main anlegen?
    So weit ich weiß klappt das nicht, weil main reserviert wird.
    Einfach einen anderen Namen nehmen.

    es geht doch darum, dass der gcc die eckigen klammern akzeptiert. 🙄



  • Nein, du hast die Frage immer noch nicht verstanden.
    Nochmal: Hier der gesamte Code:

    int main[] = {}; // oder int main[]{};
    

    Kompiliert einwandfrei => Ausführen => Segfault
    Nochmal die Frage: Was hat es mit dieser main überhaupt auf sich?



  • kopfkratz schrieb:

    Hat int main[] = {}; überhaupt irgendeinen Sinn

    Ja, ein int-Array mit Namen main. Leider intepretiert dein Linker main als Startfunktion/Einsprungadresse des Programms. Beim Start des Programms wird versucht von dieser Programmadresse aus, Code auszufuehren. Das schlaegt fehl, weil das eben kein Code ist. Es haengt vom Linkerskript/Compilereinstellung ab, was als Einstiegspunkt benutzt wird.



  • knivil schrieb:

    kopfkratz schrieb:

    Hat int main[] = {}; überhaupt irgendeinen Sinn

    Ja, ein int-Array mit Namen main. Leider intepretiert dein Linker main als Startfunktion/Einsprungadresse des Programms. Beim Start des Programms wird versucht von dieser Programmadresse aus, Code auszufuehren. Das schlaegt fehl, weil das eben kein Code ist. Es haengt vom Linkerskript/Compilereinstellung ab, was als Einstiegspunkt benutzt wird.

    Soso.
    Dankeschön.


Log in to reply