Forum: PC-Programmierung unused variable 'data'


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Kaiser K. (kingkong_18)


Bewertung
-1 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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)


Bewertung
-1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
2 lesenswert
nicht 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


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.