Hallo! Das kann mir bestimmt jemand direkt beantworten: Kann ich schreiben
1 | uint8_t i; |
2 | |
3 | for (i=0; i<10; i++) |
4 | {
|
5 | uint8_t i; |
6 | |
7 | for (i=0; i<10; i++) |
8 | {
|
9 | ...
|
10 | }
|
11 | }
|
ohne dass die "i"s sich beeinflussen?
|
|
Forum: Mikrocontroller und Digitale Elektronik Einfache Frage zu C: Zweimal gleiche Variable bei FunktionsuafrufHallo! Das kann mir bestimmt jemand direkt beantworten: Kann ich schreiben
ohne dass die "i"s sich beeinflussen? nenn das innere i halt j? mfg mf Ist ja nur ne Frage zum Verständnis...dass ich die anders benennen kann ist klar! nein, das haut dir dein compiler schon wegen der Redefinition von i um die Ohren - und wenn Du diese weglaesst, laeuft deine innere schleife genau einmal. Danach ist i naemlich = 10, und die aeussere Schleife wird verlassen. Warum nimmst Du nicht einfach eine zweite Variable? OK, danke! Wie gesagt, war nur ne generelle Frage. Einen Block bilden oder die innere Zählung in einer anderen Funktion auslagern? mfg mf Funktionsaufruf, wo? C99: ja, das müsste gehen, ev. sogar in K&R C. Variablen sind lokal im Block, in dem sie stehen. Aber: Schlechter Stil. Wie ist das denn beim Aufruf einer anderen Funktion?
Kriegen die sich da auch in die Wolle? Also erlaubt ist das schon. Zugriff Erfolg dabei immer zuerst auf die lokalere Variable, falls 2 gleichnamige/typige existieren. Allerdings ist es extrem mießer Stil. :-) Tom M. schrieb: > Funktionsaufruf, wo? Ja...ist mir auch aufgefallen, daher jetzt nachträglich der Aufruf. > nein, das haut dir dein compiler schon wegen der > Redefinition von i um die Ohren - Das i ist nicht redefiniert, weils in einem anderen scope steht. Ein gcc übersetzt das auch vollkommen richtig (s?uint8_t?int?g;):
Man nennt das übrigens auch Verschattung. Schön isses trotzdem nicht. Gero schrieb: > Kriegen die sich da auch in die Wolle? Wieso "auch"? Es gibt "auch" hier keinen Konflikt. Jetzt kram endlich (d)ein C Lehrbuch raus und lies mal über Variablen und Geltungsbereiche (Scope). :) 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.
|
|