typedef - malloc: Besser, schlechter oder wumpe ?
-
printf("%i %i\n", sizeof(MyStruct), sizeof(_MyStruct*));
-
Haach Mist, sorry...das zweite sollte heissen:
MyStruct *p = ( _MyStruct* ) malloc( sizeof( _MyStruct ) );
weil nämlich
printf( "%i %i ", sizeof(_MyStruct), sizeof(MyStruct) );
liefert mir den gleichen Wert.
Von daher tippe ich auf wumpe ?Wenn ich nicht caste, mecker der Compiler.
-
proggingmania schrieb:
Wenn ich nicht caste, mecker der Compiler.
Dann ist er kaputt.
-
Wenn der Compiler c++ - Syntax anwendet (*.cpp) oder ein cpp-Schalter, dann meckert er.
-
Ja, stimmt, hatte ausversehen eine *.cpp Datei kompiliert. Hätt ich mal so gelassen, wo vorhin 1 Fehler war, sind jetzt 45
-
Z.B. hat der vorher das hier
int const maxlen = 100; MyStruct myStruct[maxlen];
ohne meckern geschluckt aber jetzt kommt:
error C2057: expected constant expressionFalls gerade jemand Langeweile hat...lol.. naja muss ich wohl
MyStruct myStruct[100];
schreiben, nehm ich mal an.
-
Jetzt ist aber das malloc Problem wenigstens weg, kein Meckern mehr bei:
p = malloc( sizeof( MyStruct ) );
Dafür
error C2065: '_MyStruct' : undeclared identifier beip = malloc( sizeof( _MyStruct ) );
So langsam komm ich dahinter...johoooooo
-
SG1 schrieb:
* _Grossbuchstabe verwendet man nicht.
Was verwendet man dann und warum ?
-
proggingmania schrieb:
SG1 schrieb:
* _Grossbuchstabe verwendet man nicht.
Was verwendet man dann
Irgendwas anderes.
und warum ?
Weil alle Bezeichner, die mit _Grossbuchstabe anfangen, reserviert sind.
-
[quote="proggingmania"]
Dafür
error C2065: '_MyStruct' : undeclared identifier beip = malloc( sizeof( _MyStruct ) );
Der Identifier heißt ja auch struct _MyStruct
proggingmania schrieb:
Z.B. hat der vorher das hier
int const maxlen = 100; MyStruct myStruct[maxlen];
size_t const maxlen = 100;
aber wenn dein Compiler das nicht kann, dann nimm
enum { maxlen = 100 };
-
SG1 schrieb:
Weil alle Bezeichner, die mit _Grossbuchstabe anfangen, reserviert sind.
Komisch das der dann nicht meckert, der guteste
.
-
rüdiger schrieb:
aber wenn dein Compiler das nicht kann, dann nimm
enum { maxlen = 100 };
Supie das klappt, gefällt mir auch gleich viel besser, als so ne 'festgebrannte' 100.
-
progginmania schrieb:
SG1 schrieb:
Weil alle Bezeichner, die mit _Grossbuchstabe anfangen, reserviert sind.
Komisch das der dann nicht meckert, der guteste
.
Nimmt dein Compiler vielleicht zufällig hin. Aber es ist nach meiner Meinung absolut keine gute Idee, sich an Fehler zu gewöhnen, nur weil zufällig die Version des von dir verwendeten Compilers auf dem Betriebssytem mit deiner Hardware zu einer bestimmten Uhrzeit den Fehler akzeptiert...
YMMV
(Wenn du nicht glaubst, das es ein Fehler ist, schau im ISO C-Standard Abschnitt 7.1 (hatten gerade erste einen Thread drüber))
-
progginmania schrieb:
SG1 schrieb:
Weil alle Bezeichner, die mit _Grossbuchstabe anfangen, reserviert sind.
Komisch das der dann nicht meckert, der guteste
.
Gerechnet auf alles, was man falsch machen kann, meckert er sowieso fast nie.
-
proggingmania schrieb:
printf( "%i %i ", sizeof(_MyStruct), sizeof(MyStruct) );
Das hier geht im übrigen auch nur mit einem C++-Compiler.
-
rüdiger schrieb:
(Wenn du nicht glaubst, das es ein Fehler ist, schau im ISO C-Standard Abschnitt 7.1 (hatten gerade erste einen Thread drüber))
Neee, nicht weil ich es nicht glaube, sondern weil ich es so in relativ großen Projekten gesehen hab.
Naja, ist ok, ich danke euch allen.
Gruß,
p.
-
Du musst entweder
MyStruct *p = malloc(sizeof(MyStruct));
oder
MyStruct *p = malloc(sizeof(struct _MyStruct));
schreiben
edit:
Mist, hab nicht gesehen, dass es eine 2. Seite gibt
die Lösung war ja schon oben.
-
proggingmania schrieb:
rüdiger schrieb:
(Wenn du nicht glaubst, das es ein Fehler ist, schau im ISO C-Standard Abschnitt 7.1 (hatten gerade erste einen Thread drüber))
Neee, nicht weil ich es nicht glaube, sondern weil ich es so in relativ großen Projekten gesehen hab.
Da siehst du: Auch Profis machen Fehler...
-
rüdiger schrieb:
Da siehst du: Auch Profis machen Fehler...
Könnt mir vorstellen, das die das wissen und entweder drauf pfeifen, oder ihre eigenen Standards machen.
-
proggingmania schrieb:
rüdiger schrieb:
(Wenn du nicht glaubst, das es ein Fehler ist, schau im ISO C-Standard Abschnitt 7.1 (hatten gerade erste einen Thread drüber))
Neee, nicht weil ich es nicht glaube, sondern weil ich es so in relativ großen Projekten gesehen hab.
Könnte mit ein Grund sein, warum relativ große Projekte manchmal scheitern...