Einfache Frage zu C: Zweimal gleiche Variable bei Funktionsuafruf

Gast #2136581
Lesenswert?

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?
Gast #2136590
Lesenswert?

Wie ist das denn beim Aufruf einer anderen Funktion?
1
uint8_t funktion1 (void)
2
{
3
  uint8_t return_wert;
4

5
  return_wert = funktion2();
6

7
  return return_wert;
8
}
9

10
uint8_t funktion2 (void)
11
{
12
  uint8_t return_wert
13

14
  ...
15
  return return_wert;
16
}

Kriegen die sich da auch in die Wolle?
Gast #2136595
Lesenswert?

> 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;):
1
$ cat main.c 
2
#include <stdio.h>
3

4
int main()
5
{
6
        int i;
7

8
        for (i = 0; i < 10; i++)
9
        {
10
                int i;
11
                for (i = 0; i < 10; i++)
12
                {
13
                        printf(".");
14
                }
15
        }
16

17
        printf("\n");
18
        return 0;
19
}
20
$ gcc -Wall -std=c99 -o main main.c
21
$ ./main
22
....................................................................................................

Man nennt das übrigens auch Verschattung. Schön isses trotzdem nicht.

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