Hallo zusammen, ich habe eine Frage und zwar was der Unterschied wenn ich in C #define Valiable 5 und int variable =5; schriebe ? danke
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.
#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 | }
|
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.
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
|
Stefan F. schrieb: > Mit defines kann man total bescheuerte Sachen machen: Ja. oder sowas:
1 | #define 1 0
|
2 | #define 0 1
|
3 | |
4 | #define TRUE 0
|
5 | #define FALSE 1
|
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.
Arduino Fanboy D. schrieb: > #define Stromausfall false > > while(not Stromausfall) > { > // tuwas(); > } Da fehlt:
1 | #include <iso646.h> |
2 | #include <stdbool.h> |
Danke euch.
noch eine weiter Frage, gibt es einen Unterschied zwischen
void xx(void){
}
und void xx (){
}
Mark S. schrieb: > Danke euch. > > noch eine weiter Frage, gibt es einen Unterschied zwischen > > void xx(void){ > > } > > und void xx (){ > > } Ja, das steht in deinem C oder C++ Buch.
Hugo H. schrieb: > Stefan F. schrieb: >> was > > Wo ist das "was" definiert? "was" ist hier nur ein Platzhalter für die Variable |a|, diese wird innerhalb der FOR-Schleife deklariert und hat auch nur dort seine Sichtbarkeit.
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
|
Karl M. schrieb: > "was" ist hier nur ein Platzhalter für die Variable |a|, diese wird > innerhalb der FOR-Schleife deklariert und hat auch nur dort seine > Sichtbarkeit. Das ist mir klar - nur wo steht, das was = a sein soll? Also
1 | #define was a
|
vermisse ich.
Hugo H. schrieb: > wo steht, das was = a sein soll?
1 | #define zeige(was) printf("%i\n",was);
|
2 | zeige(a) |
In diesem Fall passiert etwas mehr, als nur dumme Textersetzung. "was" ist Platzhalter für ein Argument. https://gcc.gnu.org/onlinedocs/cpp/Macro-Arguments.html
Hugo H. schrieb: > Das ist mir klar - nur wo steht, das was = a sein soll? Hier: Karl M. schrieb: > zeige(a)
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 %-|
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.
Karl M. schrieb: > Nur hier ist der gesamte Code als Beispiel für Defines mit > Makrofunktionalität zu sehen und somit abgeschlossen. Und aus meiner Sicht unlogisch - ich verstecke eine Variable doch nicht in 3 Defines und gebe sie dann als Argument völlig zusammenhanglos aus.
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.
Stefan F. schrieb: > Aber genau das habe ich irgendwo im Arduino Umfeld schon einmal > gesehen. Da isser wieder... Der Heckenschütze...
Arduino Fanboy D. schrieb: > Da isser wieder... > Der Heckenschütze... Mein Fanboy, was würde ich bloß ohne dich machen? (Meine Schwester ärgern wäre eine Option)
Stefan F. schrieb: > was würde ich bloß ohne dich machen? Weiter, völlig unreflektiert, mit Schaiße werfen. Jetzt hast du die Gelegenheit dein Verhalten zu analysieren und danach absichtlich weiter mit Schaiße zu werfen.
Arduino Fanboy D. schrieb: > mit Schaiße zu werfen Ja gib's mir. ooooh ich will mehr davon. Bitte auch Natursekt. Nach einer anstrengenden Woche braucht man das.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.