Forum: Mikrocontroller und Digitale Elektronik Frage zu #define


von Klausi (Gast)


Lesenswert?

Moin moin,

ne kurze frage. welcher der beiden schreibweise in einer header-datei 
ist richtig?

#define PUNKT  '.'

oder

#define PUNKT  .


danke,
klausi

von Marwin (Gast)


Lesenswert?

Bascom kennt kein #define

von Markus W. (Firma: guloshop.de) (m-w)


Lesenswert?

Klausi schrieb:
> #define PUNKT  '.'
>
> oder
>
> #define PUNKT  .

Warum nicht so?
  #define PUNKT "."

Kommt doch immer drauf an, was du vorhast.

von Timo (Gast)


Lesenswert?

Kommt drauf an welches Ergebnis zu haben willst.

Bei #define PUNKT  '.'

ersetzt der Präprozessor die folgende Anweisung :

char zeichen=PUNKT; mit char zeichen='.';


Bei #define PUNKT  .

ersetzt der Präprozessor die folgende Anweisung :
char zeichen=PUNKT; mit char zeichen=.;
was wahrscheinlich nicht erwünscht ist.

Ist halt nur eine Textuelle Ersetzung.

von Stefan (Gast)


Lesenswert?

Beide kann richtig sein. Es kommt drauf an, wo Du die Definition 
verwenden willst. Da der Punkt alleine nicht zur C Syntax gehört, 
wolltest Du warscheinlich '.' oder "." definieren.

Aber bei einem Plus Zeichen könnte es auch ohne Anführungszeichen Sinn 
machen:

#define PLUS +

int a= 3 PLUS 4;

von Tom M. (Gast)


Lesenswert?

Klausi schrieb:
> ne kurze frage. welcher der beiden schreibweise in einer header-datei
> ist richtig?

Beides sind gültige Definitionen. Was richtig ist, musst du (oder der 
Autor) des Programms wissen.

von sebastian (Gast)


Lesenswert?

Stefan schrieb:
> Da der Punkt alleine nicht zur C Syntax gehört,

stimmt nicht ganz...
1
#define PUNKT .
2
struct
3
{
4
    int x;
5
    int y;
6
} punkt;
7
8
int x(void)
9
{
10
    return punkt PUNKT x;
11
}

von Peter II (Gast)


Lesenswert?

sebastian schrieb:
> stimmt nicht ganz...

hatte ich auch gedacht, wird aber nicht gehen, das leerzeichen bekommt 
man nicht weg.

von Markus W. (Firma: guloshop.de) (m-w)


Lesenswert?

Peter II schrieb:
> hatte ich auch gedacht, wird aber nicht gehen, das leerzeichen bekommt
> man nicht weg.

Ich glaub, innerhalb von weiteren defines ist das schon möglich:
1
#define PUNKT .
2
#define xy(links,rechts) links##PUNKT##rechts
3
4
a= xy(struktur,element);  // ergibt: a= struktur.element;

(Habs aber grad nicht ausprobiert...)

von Stefan E. (sternst)


Lesenswert?

Peter II schrieb:
> sebastian schrieb:
>> stimmt nicht ganz...
>
> hatte ich auch gedacht, wird aber nicht gehen, das leerzeichen bekommt
> man nicht weg.

Die Leerzeichen stören höchstens dich bezüglich der Optik, aber nicht 
den Compiler bezüglich der Syntax.

von Stefan F. (sfrings)


Lesenswert?

Interessant, das wusste ich noch nicht. Man lernt immernoch dazu.

Also anstelle von punkt.x kann ich auch punkt . x schreiben?

von Stefan E. (sternst)


Lesenswert?

Stefan Frings schrieb:
> Also anstelle von punkt.x kann ich auch punkt . x schreiben?

Du könntest sogar
1
punkt
2
.
3
x
schreiben.

von Lästermaul (Gast)


Lesenswert?

Stimmt. Man kann es so schreiben.
http://www.ioccc.org/2000/robison.c

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
Noch kein Account? Hier anmelden.