Hallo zusammen, ich verstehe den zweiten Teil dieser Codezeile nicht. könnt ihr mir sagen was die 0 da hinten bedeutet? Hab sowas noch nie gesehen. #define tskIDLE_PRIORITY ( ( unsigned portBASE_TYPE ) 0 ) Gruß und Danke Stefan
Gast
#901461
0 ist der Wert dieser "Konstanten"... und der wird lediglich nach "unsigned portBASE_TYPE" umgewandelt (ge-casted)
Gast
#901462
Die Null (0) wird auf den Datentyp unsigned portBASE_TYPE gecastet
die Zeile sagt dem Präprozessor, dass er jedes Vorkommen von "tskIDLE_PRIORITY" durch "( ( unsigned portBASE_TYPE ) 0 )" ersetzen soll. Der Teil in Klammern ist nichts anderes als ein simpler Cast, der dem Compiler sagt, als welchen Datentyp er die 0 interpretieren soll (char, int, ...). nehmen wir mal folgenden (aus der Luft gegriffenen und ziemlich sinnlosen) Code an:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
nach dem Durchlauf des Präprozessors sieht das ganze dann in etwa so aus:
1 | |
2 | |
3 | |
Wobei man die äuseren Klammern nach dem "=" auch weglassen könnte (im #define). Das ganze ist also nichts anderes als "Faulheit" des Programmieres, der nicht immer (...) schreiben möchte, sondern einfach tskIDLE_PRIORITY und dabei auch noch die Lesbarkeit des Codes deutlich erhöht. EDIT: Verdammt zu langsam oder zu viel geschrieben...
Kanzler Gorkon wrote:
> Die Null (0) wird auf den Datentyp unsigned portBASE_TYPE gecastet
Was aber nicht erlaubt ist.
Man darf keine standard Typbezeichner auf eigene Typbezeichner anwenden!
Das geht hier wohl nur deshalb gut, weil "portBASE_TYPE" kein echter
Typbezeichner ist sondern auch wieder nur ein Macro.
Das "unsigned" ist hier also Quatsch.
Peter
Ah vielen Dank euch allen! Jetzt isses klar. @Daniel: Warst zwar langsamer, aber hats mir nochmal sehr verdeutlicht! THNX!!! Gruß und noch nen schönen Abend! Stefan
Gast
#901482
Und warum machen wir den CAST? Wir sagen dem Compiler damit nur, dass wir genau wissen was wir tun. Dann präsentiert uns der Compiler keine Warnungen. Nur darum. Z.B.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
--> Compilerwarnung: in c passt weniger als in s.
s wird abgeschnitten.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
--> keine Warnung, denn wir haben dem Compiler gesagt:
Er soll doch bitte s wie einen char behandeln.
Wir wissen selber, dass in c weniger passt als in s.
Gast
#901491
@ Peter Danegger Das : #define tskIDLE_PRIORITY ( ( unsigned portBASE_TYPE ) 0 ) : kommt aus so einer Define-eritis, wo aus einem char ein BYTE (alternativ portBASE_TYPE) und daraus ein unsigned BYTE (oder auch unsigned portBASE_TYPE) wird, und zum Schluss kann das keiner mehr lesen. Ich jedenfalls krieg da immer gleich die Krätze am Auge, wenn ich sowas sehe ;-)
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.