Fragen zu Pointern

Gast #411909
Lesenswert?
• ▲
▼
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
Persönliche Seite #411910
Lesenswert?
• ▲
▼
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.
#411913
Lesenswert?
• ▲
▼
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.
Gast #411915
Lesenswert?
• ▲
▼
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
Gast #411918
Lesenswert?
• ▲
▼
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

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.