"/" im C-Quellcode

Gast #5688760
Lesenswert?

Hallo,
kann mir jemand sagen, was diese Codezeilen funktionieren?
Ich habe das mit dem "/" im Quellcode noch nie gesehen.
Verwendet wird ein ATXMega324AU.

Das hier oben als "define"...

1
#define USART USARTE0
2

3
#define USART_Baudrate_Set(_usart, _bselValue, _bScaleFactor)  \
4
(_usart)->BAUDCTRLA(uint8_t)_bselValue;              \
5
(_usart)->BAUDCTRLB =(_bScaleFactor << USART_BSCALE0_bp)|(_bselValue >> 8)

Und dann der Aufruf im Programm...
1
USART_Baudrate_Set(&USART, 11 , -7);


Grüße
Gast #5688777
Lesenswert?

Das Ding '\' heisst übrigens Backslash.
Das im Deinem Titel gezeigte '/' ist ein Slash.
In Deinem Quellcode ist ein Backslash '\'.

Man darf das nicht verwechseln in C. Das eine '\' ist, wie oben schon 
gesagt, ein Zeichen, dass die Makroxexpansion auf der folgenden Zeile 
fortgesetzt wird. Das andere '/' ist der Divisions-Operator.
Moderator Persönliche Seite #5688831
Lesenswert?

Mac schrieb:
> in \ am Ende der Zeile setzt die Makrodefiniton aber auf der nächsten
> Zeile fort.

Das gilt übrigens nicht nur für Makrodefinitionen, sondern allgemein für 
C-Quellcode:
1
#include <stdio.h>
2

3
int main ()
4
{
5
    printf ("%s\n", "Das ist ein \
6
langer String");
7
    return 0;
8
}

Ohne Backslash gibt es einen Syntax-Error, mit Backslash kompiliert das 
Programm.

Außerdem sollte man beachten, dass dies nur für Backslashes *am Ende der 
Zeile* gilt. Ist da nur ein (unsichtbares) Leerzeichen dahinter, 
verliert der Backslash diese "Zeilenverbinderfunktion" und man wundert 
sich über merkwürdige Fehlermeldungen.
Moderator Persönliche Seite #5689008
Lesenswert?

Peter D. schrieb:
> Das sollte man lieber nicht machen, da man den Quellcode nicht mehr
> einrücken kann.

Ich wollte nur darstellen, was mit dem Backslash technisch möglich ist 
- mehr nicht.

Zum Beispiel geht auch das hier:
1
int main ()
2
{
3
    pri\
4
ntf ("%s\n", "Das ist ein langer String");
5
    ret\
6
urn 0;
7
}

Ob das sinnvoll ist, ist eine ganz andere Frage.

Der Hintergrund ist historisch zu sehen: In den 70er Jahren hatte man 
Terminals mit 24x80 Zeichen. Da waren überlange Zeilen schlecht möglich.

Und soviel ich weiß, gab es da noch nicht die Möglichkeit, einen langen 
String durch Hintereinanderschreiben von zwei Strings zu formulieren. 
Das war meiner Erinnerung nach in den 80ern zunächst eine 
gcc-Erweiterung, die dann irgendwann in den Standard übernommen wurde.

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