Hallo, Ich verwende VMLAB, WINAVR mit avr-libc 1.4.3 In meinem C-Programm gibt es mehrere Arrays (ausserhalb jeder Funktion deklariert/definiert): volatile char anzbuffer[6]; volatile uint8_t dg_stat [3]; volatile uint8_t ebuffer [32]; const char modus_text[15][19]={"Anzeige","Einstellen" (... usw.) }; const char chan_text[23][11]={... }; //ähnlich wie modus_text Der Aufruf einer Funktion disp_frame_B_ls(ebuffer, modus_text, chan_text, anzbuffer); erzeugt Warnungen: a) ... passing arg1 of 'disp_frame_B_ls' discards qualifiers from pointer target b) ... passing arg2 of 'disp_frame_B_ls' from incompatible pointer type c) ... passing arg3 of 'disp_frame_B_ls' from incompatible pointer type d) ... passing arg4 of 'disp_frame_B_ls' discards qualifiers from pointer target Ändere ich den Aufruf in disp_frame_B_ls((uint8_t*)ebuffer, (char*)modus_text, char*)chan_text, (uint8_t*)anzbuffer); entfallen Warnungen a) und d). Meine Fragen: 1. Was bedeutet 'discards qualifiers' in diesem Kontext? 2. Die Zeiger weisen doch auf den richtigen Typ. Was ist falsch am ersten Funktionsaufruf? Meine 'Bücherei' zu C hilft mir hier auch nicht weiter. Daher: Für Hinweise bin ich sehr dankbar. Wolfgang
Den Prototyp Deiner Funktion "disp_frame_B_ls" solltest Du auch noch angeben ... sonst ist Raten angesagt. Nur so nebenbei, warum ist modus_text ein zweidimensionales Array und nicht ein Array von char-Pointern? Das würde in den meisten Fällen ausreichen, und Du müsstest Dir auch keine Gedanken um die Länge des längsten enthaltenen Strings machen - und Speicher spart's obendrein.
hier die Deklaration: void disp_frame_B_ls(uint8_t ebuffer[],char modus_text[][],char chan_text[][],char anzbuffer[]); Wolfgang
hallo, im aufruf disp_frame_B_ls(ebuffer, modus_text, chan_text, anzbuffer); für void disp_frame_B_ls(uint8_t ebuffer[],char modus_text[][],char chan_text[][],char anzbuffer[]); kickst du die von dir angegebenen qualifier weg: volatile char anzbuffer[6]; -ist ein feld von volatile char's, deine deklaration sagt nur 'char' volatile uint8_t dg_stat [3]; -dito volatile uint8_t ebuffer [32]; -dito const char modus_text[15][19]= -ist ein feld von konstanten char's. für die funktion spricht nichts dagegen, da werte reinzuwerfen. mit volatile bin ich nicht firm genug, um aussagen zu treffen, in wie weit das discarden 'böse' ist.
hallo kosmo, die Deklaration der Funktion um 'volatile' zu ergänzen bringt nichts; die übrigen angeführten Arrays sind entsprechend deklariert (siehe mein erstes posting). Weiterhin ist mir nicht klar, warum die Typumwandlung für arg3 der Funktion, nämlich (char*)modus_text, nicht akzeptiert wird. Ich bin also weiterhin auf Hinweise zu meinem Problem angewiesen und bitte um Hilfe. Mir scheint, das Arbeiten mit Pointern ist nicht ohne Grund so fehlerträchtig. Gruss Wolfgang
Schade, dass du nicht auf die gelinkte FAQ eingehst. IMHO stehen dort die Antworten auf deine Frage.
hallo Stefan, habe mir die Seiten heruntergeladen und muss sie nun studieren; scheinen sehr informativ. Danke Wolfgang
Stefan, ich habe die FAQ erstmal schnell gelesen: Sehr gut! Dein Hinweis ist eine grosse Hilfe zu meinen Fragen und zu Pointern allgemein. Dass sich die FAQ auf C90 bezieht, ist nicht so dramatisch. Bedauerlicherweise wird sie nicht weiter gepflegt; ich halte sie für didaktisch sehr gut aufgebaut. Nochmals Dank für Deine Hilfe. Wolfgang
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.