Konstanter Ausdruck



  • Hallo,

    Folgender Code führt in Visual Studio 2010 zu Problemen:

    char zeichen1[] = "C programming is fun!\n";
    char zeichen2[] = "C is a powerful language!\n";
    char *zeichen_res = NULL;
    unsigned int i = 1;
    /* Wir erstellen ein weiteres Array und initialisieren es mit lauter '\0'en */
    char zeichen_ges[strlen(zeichen1) + strlen(zeichen2) +1];
    memset(zeichen_ges, '\0', sizeof(zeichen_ges));
    

    Fehlermeldung: error C2057: Konstanter Ausdruck erwartet
    error C2466: Zuordnung eines Arrays der konstanten Größe 0 nicht möglich.
    error C2133: 'zeichen_ges': Unbekannte Größe

    Ich hoffe ihr könnt mir weiterhelfen.



  • GCC kompiliert deinen Code.

    Wenn am Anfang schon die Länge der Strings bekannt sind, dann gibs direkt an. Ansonsten allokiere dynamisch.


  • Mod

    DaRe schrieb:

    GCC kompiliert deinen Code.

    Weil GCC C99 kann, MSVC kann das aber noch nicht und wird's wohl auch nie können. Moral für den Threadersteller: Auf Features wie VLAs musst du wohl verzichten und streng C89 konform programmieren.



  • Ich versteh dann den Sinn nicht, wieso unser Professor dann unbedingt auf das C90-Standard so sehr behaart, obwohl der C99-Standard viel viel besser ist und einiges an unnötigen Schwachsinn wie oben erspart.



  • Die Standards eines Compilers für die verwendete Programmiersprache sind dazu da, eingehalten zu werden - oder man muss einen anderen Compiler wählen. War schon immer so und wird so bleiben! 😮 Was nicht geht, schreibt man entsprechend der verfügbaren Standards um und fragt nicht weiter! 😞

    Der Prof behaart? 😕



  • Chex schrieb:

    Ich versteh dann den Sinn nicht, wieso unser Professor dann unbedingt auf das C90-Standard so sehr behaart, obwohl der C99-Standard viel viel besser ist und einiges an unnötigen Schwachsinn wie oben erspart.

    Ich glaube, dir fehlt die Erfahrung dies professionell beurteilen zu können.
    Was du als Schwachsinn bezeichnest ist ANSI C, der im Gegensatz zu C99 verbreiteter ist und bei strikter Einhaltung maximale Portabilität garantiert.
    Dass du VLA als angenehm empfindest, lässt eine weitere Schlussfolgerung auf deine Naivität und Unkenntnis zu, VLA haben nämlich auch unangenehme Nebenwirkungen, die du als Erstsemester nicht überblickst.

    Es heißt in diesem Zusammenhang beharrt und nicht behaart.



  • Um höchstmögliche Portabilität zu gewährleisten und zum Lernen nimmt man stets einen verlässlichen - machmal einen niedrigeren - Standard. Der Prof ist nicht doof und weiss sicher, was er von dir verlangt! 😞 Mit mehr Erfahrung kann man zu höherem greifen. Doch da bist du noch nicht angelangt! :p


Log in to reply