Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Konstantenproblem

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
25.04.2010, 04:28 Uhr
Hans
Library Walker
(Operator)


Hi,

bei folgendem Code:

C++:
const int N = 624;
const int M = 397;
...
static unsigned y[N];
static int index = N+1;


beschwert sich der Compiler mit dieser Fehlermeldung:

Code:
Error! E1054: Expression must be constant


Muss ich also davon ausgehen, das diese Konstruktion so nur in C++ funktioniert, aber nicht in C, oder spinnt der Compiler?

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 25.04.2010 um 04:29 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
25.04.2010, 06:38 Uhr
~f.-th.
Gast


Hab die Fehlermeldung mal in die Suche im Netz geprüft.

Kannst du den Fehler in einem kompletten Miniquelltext fassen?

Auffällig bei der Suche war, das ein Compiler recht häufig bei der Fehlermeldung erwähnt wurde - Zufall wegen Auswahl der Suchbegriffe?

Ob das irgend einer Normkommission gefällt oder weniger kann ich dir nicht sagen.

MfG f.-th.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
25.04.2010, 06:51 Uhr
~f.-th.
Gast


Oh, westfälischer Genitiv

Der gcc 4.4.1 sagt bei folgendem Quelltext:

C++:
#include <stdio.h>

const int N = 624;
const int M = 397;
// ...
static unsigned y[N];
static int index = N+1;

int main()
{
    printf("test");
}



const.c:6: error: variably modified 'y' at file scope
const.c:7: error: initializer element is not constant

Einstellung:gcc -pedantic -Os -o const const.c -std=c99

Auch der bcc5.5 nörgelt bei Zeile 6.

Also gehe ich mal davon aus das dies nicht den C-Regeln entspricht.
Hast du das mit dem Watcom versucht?

MfG f.-th.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
25.04.2010, 10:15 Uhr
0xdeadbeef
Gott
(Operator)


C99 erlaubt das Array als Array variabler Länge.

Ansonsten unterscheidet C aber nicht zwischen Laufzeit- und Compilezeitkonstanten, also musst du davon ausgehen, das so etwas in C nicht geht. Dein N sieht für den Compiler genau so aus wie das N in folgendem Beispiel:

C++:
int main(int argc, char *argv[]) {
  int const N = argc;
  int a[N];

  /* ... */
}


Du kannst dir aber mit einer Enum helfen:

C++:
enum {
  N = 10;
};

unsigned y[N];


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
25.04.2010, 21:48 Uhr
Hans
Library Walker
(Operator)


Hi,

erst mal danke für die Antworten.

@f.-th.: Den kompletten Quelltext findest Du hier, und es ist der Watcom-Compiler, der sich so beschwert. - Welcher Compiler wurde denn bei Deiner Suche besonders oft genannt?

Und so, wie ich den Quelltext verstehe, sollten M und N eigentlich Konstanten sein, denn wie man an dem kompletten Quelltext sehen kann, hab ich da ja blos ein paar weitere Deklarationen weg gelassen. - Und sehr wahrscheinlich ist der gegebene Quelltext in C++ verfasst, obwohl C drüber steht...

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 25.04.2010 um 21:56 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
26.04.2010, 22:52 Uhr
~f.-th.
Gast


Hi Hans
Hier ist wohl der Link zum kompletten Quelltext:
www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/VERSIONS/C-LANG/980409/mt19937int.c

Der ältere gcc meiner alten Compiler-HDD compiliert den
Auch der Digital-Mars 8.47 (?) macht das ohne Fehler und Warnungen.
Der Open Watcom 1.8 gibt eine leicht zubehebende Warnung.
Der bcc5.5 gibt ein paar Warnungen mehr.

Die bevorzugte aufzählung eines Compilers lag in meinem Suchauftragbegründet

Hatte mir jetzt erst die Zeit genommen.

MfG f.-th.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
26.04.2010, 23:12 Uhr
~f.-th.
Gast


So und nun die aktuelle HDD mit dem gcc4.4.1
gibt die gleiche Warnung wie der Open Watcom.
Soll ja auch so sein

MfG f.-th.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
27.04.2010, 02:51 Uhr
Hans
Library Walker
(Operator)


Hi,

Zitat von ~f.-th.:
Hier ist wohl der Link zum kompletten Quelltext:
www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/VERSIONS/C-LANG/980409/mt19937int.c

ja okay, das ist die originale Quelle. Den übersetzt Open Watcom 1.8 bis auf die wirklich leicht zu behebende Warnung: W107: Missing return value for function 'main' auch ohne Probleme.
Ich hab vorgestern aber nur den Quelltext aus dem Wikipedia-artikel benutzt. Dabei hab ich die Variablendefinitionen, die da so mitten im Quelltext auftauchen einfach an den Anfang verschoben, und als C-Text übersetzen lassen. Das hat bis auf das Problem mit den Konstanten auch funktioniert.
Der Open Watcom frisst den jedoch anstandslos wenn man ihm sagt, er soll ihn als C++ interpretieren, wie ich jetzt heraus gefunden habe. Also muss das wohl an der Uhrzeit gelegen haben, das ich nur noch bedingt richtig arbeitete...

Übrigens: Du hast mir aber immer noch nicht verraten, welcher Compiler bei Deiner Suche besonders häufig auftauchte, - auch wenn es an den Suchkriterien lag.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 27.04.2010 um 02:51 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
27.04.2010, 09:08 Uhr
~f.-th.
Gast


Wenn man den Fehlercode mit Nummer in die Suche eingibt, sollte man halt überwiegend Antworten zu dem Compiler erhalten, der die Fehlernummer mit dem passenden Text ausgibt

Nachdem ich die hier diskutierten Quelltexte durch verschiedene Compiler geschickt habe, vermute ich das sogar die Fehler- oder/und Warnmeldungen ohne Nummer Rückschlüsse auf den genutzten Compiler zu lassen.

Warum hatte ich den Verdacht du nutzt den Watcom?

Kann leider nicht genug Zeit in absehbarer Zeit abzweigen. Der Open Watcom, 1.9 r4 ist glaube ich aktuell, wie weit ist der mit c99 und ähnlichem, da wollten die sich ja richtig reinknien um mindestens mit dem gcc gleich zu ziehen. Teile haben die ja schon umgesetzt. Jedenfalls mehr als die meisten Kommentare im Netz vermuten lassen.

MfG f.-th.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
27.04.2010, 18:03 Uhr
Hans
Library Walker
(Operator)


Hi,


Zitat von ~f.-th.:
Wenn man den Fehlercode mit Nummer in die Suche eingibt, sollte man halt überwiegend Antworten zu dem Compiler erhalten, der die Fehlernummer mit dem passenden Text ausgibt

Das werde ich dann gleich mal checken...


Zitat von ~f.-th.:
Nachdem ich die hier diskutierten Quelltexte durch verschiedene Compiler geschickt habe, vermute ich das sogar die Fehler- oder/und Warnmeldungen ohne Nummer Rückschlüsse auf den genutzten Compiler zu lassen.

Interessant. Ich was zwar (noch) nicht, was mir diese Erkenntnis bringt, so sie denn stimmt, aber sie ist interessant, oder wie Spock sagen würde: "Faszinierend."


Zitat von ~f.-th.:
Warum hatte ich den Verdacht du nutzt den Watcom?

Wenn Du es nicht aus der Fehlermeldung hergeleitet hast, warscheinlich daher, das ich hier vor längerer Zeit schon mal irgendwo geschrieben habe, das ich den nutze.


Zitat von ~f.-th.:
Der Open Watcom, 1.9 r4 ist glaube ich aktuell,

Stimmt, die sind zur Zeit mit der 1.9er Version dran. Aber die 1.8er ist ja auch erst ein Jahr und ein paar Wochen alt, also für mich noch kein Grund zum updaten.


Zitat von ~f.-th.:
wie weit ist der mit c99 und ähnlichem, da wollten die sich ja richtig reinknien um mindestens mit dem gcc gleich zu ziehen.

Da müssen die sich aber noch anstrengen. Denn soweit ich weis ist der C99-Standard beim gcc inzwischen komplett umgesetzt.


Zitat von ~f.-th.:
Teile haben die ja schon umgesetzt. Jedenfalls mehr als die meisten Kommentare im Netz vermuten lassen.

Um dazu genaueres zu erfahren guckst Du am besten auf der Open-Watcom-Seite, (link) wo sie schreiben, was sie umgesetzt haben.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: