Forum: PC-Programmierung unused variable 'data'


von Kaiser K. (kingkong_18)


Lesenswert?

Hallo,
ich möchte mit diesen programm den Inhalt von data jenach der variable z 
ändern. Dabei habe ich zwei Methoden (auf case 1 und case 2)versucht und 
bekomme aber immer die Meldung "unused variable data" .

hätte einer eine Idee wie ich die Meldung behoben könnte?

danke im Voraus.

void *DataStream(int x, unsigned char *y, int z)
{
  //const char *data[10];

  switch(z)
  {
  case 1:
    ;
    const char* data[] = {"a","b","c","d","e","f"}; // an diese Stelle 
kommt die meldung
    break;

  case 2:
  {
    const char* data[] = {"a","b","c"};// an diese Stelle kommt die 
meldung
    break;
  }

  default:
  {
    const char* data[] = {"a","b","c","d","e","f"};// an diese Stelle 
kommt die meldung
    break;
  }

  }

  const unsigned char Parameter[10];
  int unit = 0;
  int unitID = SetUnit(unit);
  uint8_t crc;

  while(1)
  {
    debut:
    for(int i = 0; i < 6; i++)
    {
      sprintf((char *)Parameter,"%s", data[i]);
      Sleep(10);
      crc = CalculateCRC(Parameter);
      SendViaRS232WithCRC(x,Parameter, crc);
      Sleep(10);
      ReadData(x,y,Parameter, unitID);
    }
    printf("\n\n");
    goto debut;
  }
}

von (prx) A. K. (prx)


Lesenswert?

Das sind zwei verschiedene Variablen gleichen Namens. Die zweite 
verdeckt temporär die erste, geht aber mit der geschlossenen Klammer 
verloren.
1
  const char *data[10]; //-1-
2
  {
3
    const char* data[] = {"a","b","c","d","e","f"}; //-2-
4
  }
5
  ... data ... //-1-

: Bearbeitet durch User
von Kaiser K. (kingkong_18)


Lesenswert?

A. K. schrieb:
> Das sind zwei verschiedene Variablen:
>
>
1
>   const char *data[10]; //-1-
2
>

ich habe diese Line aber kommentiert "//const char *data[10];". sie hat 
keine wirkung

von Dr. Sommer (Gast)


Lesenswert?

Wie viel Zeit hast du jetzt eigentlich schon verschwendet, um dieses 
Projekt durch Try-And-Error & Forenhilfe umzusetzen? Wäre es nicht 
deutlich schneller gegangen, einmal ein Buch über C zu lesen und es dann 
fix umzusetzen?

von (prx) A. K. (prx)


Lesenswert?

Die Meldung bezieht sich auf
1
{
2
    const char* data[] = {"a","b","c","d","e","f"}; //-2-
3
}
und diese Variable wird zwar definiert, aber nirgends verwendet. Die 
Verwendung weiter unten bezieht sich nicht auf diese Variable.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Das geht so einfach nicht.

Dein "const" erzwingt, dass die Variable auch in der Deklaration direkt 
initialisiert wird, denn später darf man eine const-Variable nicht mehr 
ändern.  Die Initialwerte stehen aber an der Stelle, wo du sie 
deklarieren musst (damit sie in allen switch/case-Zweigen verfügbar ist) 
noch gar nicht fest.

von Rolf M. (rmagnus)


Lesenswert?

Das sieht mir aus, als hättest du nach Trial&Error das irgendwie zum 
Compilieren gebracht. Es kann so aber nicht funktioniere.

Kaiser K. schrieb:

> void *DataStream(int x, unsigned char *y, int z)
> {
>   //const char *data[10];
>
>   switch(z)
>   {
>   case 1:
>     ;
>     const char* data[] = {"a","b","c","d","e","f"}; // an diese Stelle
> kommt die meldung
>     break;

Hier wird eine Variable names "data" definiert und nur dann 
initialisiert, wenn du im case 1 landest.

>   case 2:
>   {
>     const char* data[] = {"a","b","c"};// an diese Stelle kommt die
> meldung
>     break;
>   }

Hier wird aufgrund der geschweiften Klammern ein neuer Scope aufgemacht, 
d.h. dass man da drin Variablen unabhängig von schon vorher definierten 
Variablen außerhalb definieren und benutzen kann. Alle Variablen, die da 
drin definiert sind, hören mit der schließenden Klammer auf zu 
existieren.
Du erzeugst also dort eine zweite Variable mit Namen data, die nur 
zwischen den geschweiften Klammern sichtbar ist und die genau mit der 
schließenden Klammer nach dem break wieder verschwindet. Da sie während 
ihrer Existenzdauer niemals benutzt wird, bringt der Compiler die 
besagte Warnung.

Jörg W. schrieb:
> Das geht so einfach nicht.
>
> Dein "const" erzwingt, dass die Variable auch in der Deklaration direkt
> initialisiert wird, denn später darf man eine const-Variable nicht mehr
> ändern.

Es ist keine const-Variable.

: Bearbeitet durch User
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.