[BraLUG] Compiler-Warning vermeiden?

Markus Dahms mad at automagically.de
Mi Jul 23 18:01:54 CEST 2008


Hallo Rob, Uwe,

> Einen String weist man nicht mittels = zu. Dazu ist str(n)cpy da, alles  
> andere ist eine Zuweisung von Zeigern.

Das ist so m.M.n. nicht richtig. Du kannst ohne Probleme einer Variable
vom Typ "char *" oder so etwas zuweisen. Dann zeigt der Pointer auf den
statischen Speicherbereich, in dem "Bla blubb" steht. Was man allerdings
jetzt _nicht_ machen sollte, ist zu versuchen, die Variable freizugeben
(free() o.ae.) oder den Inhalt des Strings zu aendern.

Wenn das allerdings wieder fuer den AVR sein soll, dann wird es u.U.
wegen der Harvard-Architektur bzw. dem XIP (eXecute In-Place) krachen,
da der statische String nicht im RAM, sondern im Flash ist... (ungetestet,
mein AVR-Compiler geht gerade nicht, weil der meint, den x86-Assembler/
-Linker nehmen zu muessen :/) Vielleicht loest der avr-gcc das aber auch
irgendwie...

> Wenn du das mit = machen willst, dann gleich in der Initialisierung, wo  
> es erlaubt ist:
>
> unsigned char *t="teststring";

Wo die Initialisierung passiert, ist C egal. Nur fuer die Variablen-
deklaration gibt's laut Standard einen festen Platz.

> Leider ist das oft Praxis, in meinen Augen aber eine unnötige  
> Fehlerquelle, weil man nicht davon ausgehen kann, dass jedes  
> "Blit-Board" die selbe Adresse hat.

Sicher, wenn du ein zweites mal "Blit-Board" einem char-Pointer zuweist,
zeigt dieser Pointer auf einen anderen statischen String. Mit "==" ver-
glichen sind diese also nicht gleich. Zumindest theoretisch, denn so
wie es aussieht, wird das vom gcc wegoptimiert.

Wenn man einen String aber schon waehrend der Compile-Time kennt, macht
es m.M.n. keinen Sinn, mit strcpy eine dynamische Kopie zu erstellen,
dann hat man den naemlich zweimal im Speicher...

Schoene Gruesse,

	Markus

-- 
ubuntu is an ancient african word meaning "i can't install debian."
                                                         -- unknown



Mehr Informationen über die Mailingliste Bralug