Grundlagen Frage

Gast #6049528
Lesenswert?

Mit #define ersetzt der Compiler den Wert den du definiert hast. z.B.:
[c]
#define x 42
printf(x);
[c]

Mit einer Variable bleibt der Wert in der Variable stehen und diese wird 
ausgeben.
[c]
int x = 42;
printf(x);
[c]

Eine Variable kannst du verändern eine Definition (#define) kann man 
nicht verändern.
Gast #6049541
Lesenswert?

#define definiert Textersetzungen.

Eine int Variable belegt hingegen irgendwo zwei oder vier Bytes Speicher 
- je nach CPU.
1
#define pi 3.14159
2

3
float umfang=durchmesser*pi;
4

5
#define forever while(1)
6

7
forever
8
{
9
  dosomething();
10
}
11

12
#define LED_AN PORTB |= (1<<PD3)
13

14
void loop()
15
{
16
    LED_AN;
17
}
Gast #6049560
Lesenswert?

Mit defines kann man total bescheuerte Sachen machen:
1
#include <stdio.h>
2
#define hauptprogramm int main()
3
#define anfang {
4
#define ende }
5
#define von for (int a=
6
#define bis ; a<
7
#define tue ; a++)
8
#define zeige(was) printf("%i\n",was);
9

10
hauptprogramm
11
anfang
12
von 1 bis 100 tue
13
    zeige(a)
14
ende
#6049682
Lesenswert?

Matthias L. schrieb:
> Stefan F. schrieb:
>> Mit defines kann man total bescheuerte Sachen machen:
>
> Ja. oder sowas:
> #define  1  0
> #define  0  1

Na das nicht ganz. Es muss schon ein Identifier sein, den man definiert. 
Also
1
#define eins 0
2
#define null 1

Aber das ginge auch mit einer Variablen.

> #define  TRUE  0
> #define  FALSE 1

Das würde gehen, wäre aber ebenfalls mit einer Variablen genauso 
möglich.
Gast #6050220
Lesenswert?

Die Frage bezog sich auf die Zeile 8 und die Variable |a| steht in Zeile 
5.
1
#include <stdio.h>
2
#define hauptprogramm int main()
3
#define anfang {
4
#define ende }
5
#define von for (int a=
6
#define bis ; a<
7
#define tue ; a++)
8
#define zeige(was) printf("%i\n",was);
9

10
hauptprogramm
11
anfang
12
von 1 bis 100 tue
13
    zeige(a)
14
ende
#6050244
Lesenswert?

Na, dann wäre
1
#include <stdio.h>
2
#define hauptprogramm int main()
3
#define anfang {
4
#define ende }
5
#define von for (int a=
6
#define bis ; a<
7
#define tue ; a++)
8
#define zeige_zahl printf("%i\n",a);
9

10
hauptprogramm
11
anfang
12
von 1 bis 100 tue
13
    zeige_zahl
14
ende
für mich aber sinnvoller gewesen %-|
Gast #6050253
Lesenswert?

Hugo H. schrieb:
> hauptprogramm
> anfang
> von 1 bis 100 tue
>     zeige_zahl
> ende
> für mich aber sinnvoller gewesen %-|

Mag ja sein, und das wäre für sich alleine auch ok.

Nur hier ist der gesamte Code als Beispiel für Defines mit 
Makrofunktionalität zu sehen und somit abgeschlossen.
Gast #6050293
Lesenswert?

Hugo H. schrieb:
> Na, dann wäre...für mich aber sinnvoller gewesen

Hugo H. schrieb:
> Und aus meiner Sicht unlogisch - ich verstecke eine Variable doch nicht
> in 3 Defines und gebe sie dann als Argument völlig zusammenhanglos aus.

Ja. Aber genau das habe ich irgendwo im Arduino Umfeld schon einmal 
gesehen.

Ich habe das Beispiel mit Absicht so geschrieben, weil es unter anderem 
diesen Sch**** offenbaren sollte.
Gast #6050446
Lesenswert?

Auch wenn dir das etwas seltsam erscheint,...
Ich bin nicht für deine Woche verantwortlich, aber du für dein 
Verhalten.

Und gerne, wenn deine Selbstkontrolle wieder versagt, dann gibts von mir 
auch ein Sprüchlein dazu.

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