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; } }
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
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
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?
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.