Forum: Compiler & IDEs Call by reference mit Enumeration möglich?


von C-Beginner (Gast)


Lesenswert?

Hallo Leute!

Ich beschäftige mich gerade mit Funktionen deren Werte unterschiedlich 
übergeben werden können. Das erste Beispiel wäre den Wert übergeben 
siehe dazu Fall 1). Das erste Beispiel funktioniert wunderbar. Aber wenn 
ichs versuche mit einem Zeiger zu übergeben (Fall 2), dann meckert der 
gcc compiler. Die Fehlermeldung sagt mir, dass "menue_liste" und "int" 
nicht kompatibel ist und ein "lvalue" sein muss, was es auch immer sein 
mag.

Könnte mir ein Erfahrener sagen, woran es hapern könnte? Muss die 
enumeration "menu_liste" ein Zeiger sein? Ich versuchte es auch mit 
einem Zeiger, aber er gibt mir immer die gleiche Meldung.
Ich bedanke mich für eure Antworten schon im voraus!

Fall 1) Funktioniert mit Übergabe
1
#include <stdio.h>
2
  typedef enum
3
    {
4
      menu1 = (int) 1,
5
      menu3 = (int) 3,
6
      menu5 = (int) 5,
7
    } menu_liste;
8
9
void menu_auswahl(menu_liste menux)
10
  {
11
    if (menux == 1)
12
      {
13
        printf("Menue 1 wurde gewaehlt!");
14
      }
15
  }
16
17
18
int main()
19
{
20
     menu_auswahl(menu1);
21
}

Fall 2) geht nicht (Zeiger)
1
#include <stdio.h>
2
  typedef enum
3
    {
4
      menu1 = (int) 1,
5
      menu3 = (int) 3,
6
      menu5 = (int) 5,
7
    } menu_liste;
8
9
void menu_auswahl(menu_liste *menux)
10
  {
11
    if (menux == 1)
12
      {
13
        printf("Menue 1 wurde gewaehlt!");
14
      }
15
  }
16
17
18
int main()
19
{
20
     menu_auswahl(&menu1);
21
}

von Andreas B. (Gast)


Lesenswert?

Du musst ja auch einen Zeiger auf eine Variable übergeben, Zeiger auf 
Literale gibts nicht.
1
int main()
2
{
3
     menu_liste m = menu1;
4
     menu_auswahl(&m);
5
}

von Markus (Gast)


Lesenswert?

Bei dem zweiten Beispiel liegt der Fehler darin, dass menu1 keine 
Variable ist. Also kannst du auch keinen Pointer davon erzeugen. was 
funktionieren würde:
1
menu_liste menuP = menu1;
2
menu_auswahl(&menuP);

von C-Beginner (Gast)


Lesenswert?

@ Andreas & Markus

Danke für eure Hinweise. Ich dachte die ganze Zeit, dass "menu1, menu_3 
und menu_5" Variablen mit einem konstatem Wert sind.
Eure Codezeilen konnte ich gleich testen und war gleich damit 
erfoglreich.

Thx ihr beiden!

von (prx) A. K. (prx)


Lesenswert?

C-Beginner schrieb:
1
>       menu1 = (int) 1,

Das (int) ist überflüssig, die Zahl 1 ist genau dies bereits.

Eine "lvalue" ist vom Begriff her etwas, dem man etwas zuweisen kann, 
also was links von einer Zuweisung stehen kann: "left value". Was in 
diesem Fall leider etwas unglücklich gewählt ist, weil es hier eher 
darum geht, davon eine Adresse ermitteln zu können.

von C-Beginner (Gast)


Lesenswert?

Hallo Leute,

ich habe einen interessanten Artikel über "Enumeration Constants vs. 
Constant Objects" gefunden. Für die Kenner ist er ganz bestimmt ein 
alter Hut. Ich denke halt, dass er für die C-Anfäger - wie mich - 
hilfreich sein kann.

MfG

Link 
http://www.eetimes.com/discussion/programming-pointers/4023879/Enumeration-Constants-vs-Constant-Objects

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.