"/" im C-Quellcode

Gast #5688760
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
> Ich habe das mit dem "/" im Quellcode noch nie gesehen.

In deinem Quellcode kommt gar kein / vor.


Schlag erst mal den Unterschied zwischen einen Slash (/) und einem 
Backslash (\) nach.

Erst danach kannst du dich dann auf weiterführende Fragestellungen 
konzentrieren.
Gast
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
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
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

Eine eigene Frage? Dieser Thread ist über 7 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.