Halllo, habe folgenden Ausdruck, den ich nicht ganz interpretieren kann, was passiert hier? CONST(A,B) C={1}; C ist eine Struktur mit mindestens einem Element.
Was da passiert, hängt voll und ganz davon ab, wie CONST, A und B definiert sind. Vermutlich handelt es sich um irgendwelche Makros. Du mußt schauen, in was die aufgelöst werden.
Mehr UMgebung. Was ist 'CONST'? Was ist 'A' Was ist 'B' Auf den ersten Blick sieht es so aus als ob das wohl ein Makro wäre, welches aus den Angaben 'A' und 'B' einen (const ?) Datentyp zusammenbaut. Von dem wird dann eine Variable definiert und gleichzeitig initialisiert. Aber: ist nur ein Schuss ins Blaue. Weitere Interpretationen sind möglich
Hallo Rolf, ja stimmt ist ein Makro, aber so ganz habe ich das noch nicht raus. Gibt es eigentlich Tools (IDEs) die einem das Lesen von Makro-Code helfen?
Beetme schrieb: > Hallo Rolf, > > ja stimmt ist ein Makro, aber so ganz habe ich das noch nicht raus. Gibt > es eigentlich Tools (IDEs) die einem das Lesen von Makro-Code helfen? Such dir das #define für 'CONST'. So viele werden es ja wohl nicht sein. Und dann machst du die Textersetzung. Da steht zb
1 | #define CONST(x,y) x struct y
|
Bei dir steht da im Original
1 | CONST(A,B) .... |
also ersetzt du den Text 'CONST' durch den Text der in der #define Zeile angegeben ist. GLeichzeitig bindest du beim Makro auch noch den Text 'A' an x und den Text 'B' an y. und zwar wegen
1 | #define CONST(x,y) ....
|
Im Ersatztext ersetzt du daher überall dort wo ein 'x' alleine vorkommt dieses mit 'A' und überall wo ein 'y' alleine vorkommt, ersetzt du es mit 'B'
1 | .... x struct y |
2 | ^ ^ |
3 | | | |
4 | | hier ersetzt du mit B |
5 | und hier ersetzt du mit A |
aus
1 | CONST (A,B) .... |
wird also
1 | A struct B ...... |
(Du setzt natürlich entsprechend dem, was du in deinem Code siehst, ein)
:
Bearbeitet durch User
Was die Makrozauberei tut, musst Du selbst im Quellcode herausfinden oder den Compiler fragen (bei gcc mit gcc -E meinfile.c -o meinfile.txt ). Zur Initialisierung von structs steht hier das nötigste https://en.wikipedia.org/wiki/Struct_(C_programming_language)#Struct_initialization Besonders der Satz >If an initializer is given [...], omitted elements are initialized to 0. könnte relevant sein.
Hallo Karl Heinz, wenn C eine STruktur-Datentyp ist, wie kann dann daruf der Zuweisungsoperator mit geschweiften Klammern folgen?
Beetme schrieb: > Hallo Karl Heinz, > > wenn C eine STruktur-Datentyp ist, wie kann dann daruf der > Zuweisungsoperator mit geschweiften Klammern folgen? Ehrlich: Lies ein C Buch. Das steht in jedem noch so grindigem C Buch drinnen. Du wirst ein Buch brauchen. Seine erste Programmiersprache kann man nicht durch Betrachten von fremdem Code lernen. Bei den weiteren gehts dann so lala, besonders wenn sie zur selben Sprachfamilie gehören. Aber bei der ersten steht man da wie der Ochs vorm Tor. Genau dafür gibt es Bücher. Und ja. Eine Initialisierung solle man erkennen, wenn man eine sieht.
:
Bearbeitet durch User
Beetme schrieb: > Gibt > es eigentlich Tools (IDEs) die einem das Lesen von Makro-Code helfen? Ja, die meisten vernünftigen IDEs können das. z.B. Eclipse: Da hältst Du einfach die Maus 2 Sekunden über das Makro und kannst es dann stufenweise expandieren. Oder Du Ctrl-Klickst drauf und springst zu der Position an der es deklariert ist. Und Du kannst die ganze Datei auch durch cpp jagen (mit den selben -D und -I optionen wie sie auch für den Compiler verwendet würden) und bekommst das Ergebnis des Präprozessors (das was dann der Compiler zu sehen bekäme) nach Auflösung aller Makros zu sehen. Das kann manchmal auch ganz hilfreich sein um z.B. einen undurchsichtigen Makro-Dschungel zu verstehen oder selbst einen solchen zu bauen und zu debuggen. Oder Du fügst die Option -E in den gcc Compileraufruf ein, dann stoppt er nach dem Präprozessor, das hat den selben Effekt. Siehe hier: http://stackoverflow.com/questions/277258/c-c-source-file-after-preprocessing
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.