Makro

Gast #316238
Lesenswert?

Hallo leute ich sitz hier auf der Arbeit und bin schon am verzweifeln

ich habe folgendes Makro definiert

#define SET_AQS_NOXWERT(v)

gtcan_0_user_msg_bfr_tx[0].GTCAN_Message_Byte[1].byte = (unsigned
char)(v & 0xFF),\

gtcan_0_user_msg_bfr_tx[0].GTCAN_Message_Byte[2].byte &= 0xF8,\
                      // Bit 0,1 löschen

gtcan_0_user_msg_bfr_tx[0].GTCAN_Message_Byte[2].byte |= (unsigned
char)((v & 0x0300)>>8),\    // Bit 0,1 maskieren,schiften und setzen

Das Problem ist: Der compiler erkennt die letzte Zeile nicht.
Die Zeilen habe ich durch ,\ getrennt.
Ich habe es ohne Komma mit \, mit Komma ohne \ ,ohne alles...
Nix geht... kann mir jemand helfen ?
Gast #316240
Lesenswert?

1/ Unbedingt das Argument im Makro klammern. Sonst suchst du dich
dämlich zur Operatorenrangfolge, wenn du mal sowas verwendest
SET_AQS_NOXWERT(v+1);

2/ #define SET_AQS_NOXWERT(v) \
gtcan_0_user_msg_bfr_tx[0].GTCAN_Message_Byte[1].byte = (unsigned
char)((v) & 0xFF), \
gtcan_0_user_msg_bfr_tx[0].GTCAN_Message_Byte[2].byte &= 0xF8, /* Bit
0,1 löschen */ \
gtcan_0_user_msg_bfr_tx[0].GTCAN_Message_Byte[2].byte |= (unsigned
char)(((v) & 0x0300)>>8), /* Bit 0,1 maskieren,schiften und setzen */

Wie geht es hier nach dem letzten , weiter? Bist du sicher mit dem ,
oder können es auch ; sein?

3/ Die Kommentare kann ich nicht mit den Bitoperationen in Einklang
bringen. Bei "Bit 0,1 löschen" und der Maske 0xF8 kräuseln sich mir
die Fußnägel ;-)
Gast #316242
Lesenswert?

Stell dir einfach vor, jeder \ entfernt nur den einen nachfolgenden
Zeilenvorschub (nicht 2 Zeilenvorschübe !), d.h. alles steht wirklich
in einer Zeile.


Dann wird Dir nämlich klar, daß ein //-Kommentar mit Zeilenverlängerung
Unfug ist.


Peter

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren