Grundlagen Frage

Gast
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
#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
Genau genommen kennt der Compiler keine defines. Er kennt nur int var=5 
und legt eine Variable var an.

Das define macht der präprozessor vorher eigenständig.
Gast
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
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
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
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 6 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.