Hilfe zu C-Syntag benötigt

Gast #3487940
Lesenswert?

Hallo Leute,

hab hier einen Ausschnitt aus einem Code und verstehe diesen nicht 
richtig.

In einem Headerfile steht folgendes.
1
typedef unsigned char  *pu8;
2
volatile unsigned char DDRA          @0x02;
3

4
Jetzt kommts. In einem .C-file steht folgendes.
5

6
static const pu8 DataDirection [MAX] =
7
{#if ...
8
    (pu8)(&DDRA),
9
 #endif 
10
...}
Irgendwie verwirrt mich der Ausdruck "(pu8)(&DDRA)".
Kann mir das jmd kurz erklären?

Gruß
Gast #3487983
Lesenswert?

Vielen Dank erstmal.
Glaub ich steh aber noch immer auf der Leitung:

aber wieso ist dieser Typecast nötig? DDRA ist ja auch unsingned char 
variable.

warum reicht es nicht:

static const pu8 DataDirection [MAX] =
{#if ...
    &DDRA,
 #endif
...}
Gast #3488090
Lesenswert?

Peter Dannegger schrieb:
> Unknown schrieb:
>> hab hier einen Ausschnitt aus einem Code
>
> Ausschnitte sind immer ne ganz schlechte Idee.
> Laß die Deppen vom Forum doch ruhig raten, wozu das sein könnte, die
> haben ja sonst nichts besseres zu tun.


dass hier immer gleich schwache Kommentare kommen..
Es ging hier nur zum Verstehen der Syntax, da ist der gezeigte Code 
vollkommen ausreichend.
#3488102
Lesenswert?

Unknown schrieb:
> Peter Dannegger schrieb:
>> Unknown schrieb:
>>> hab hier einen Ausschnitt aus einem Code
>>
>> Ausschnitte sind immer ne ganz schlechte Idee.
>> Laß die Deppen vom Forum doch ruhig raten, wozu das sein könnte, die
>> haben ja sonst nichts besseres zu tun.
>
>
> dass hier immer gleich schwache Kommentare kommen..
> Es ging hier nur zum Verstehen der Syntax, da ist der gezeigte Code
> vollkommen ausreichend.

Dann muss ich dir attestieren, dass du ein C-Buch brauchst, wenn du 
einen Cast nicht erkennst, wenn du einen siehst.
Mehr lässt sich dann aus dieser Fragestellung nicht ableiten.

Syntax ist eine Sache. Aber Syntax ist nicht alles. Denn die 
tieferliegende Frage nach dem "Warum?" oder dem "Was wird bezweckt" 
lässt sich nicht beantworten.

Du fragst ja selber
> aber wieso ist dieser Typecast nötig?


der Cast wurde höchst wahrscheinlich eingeführt, um die Warnung vom 
Compiler zu unterdrücken, dass hier ein volatile implizit verloren geht. 
Durch den Cast sagt der Programmierer dem Compiler "Halts Maul"
Die eigentliche Frage ist aber: War das eine gute Idee? Wer von den 
beiden hat eigentlich recht? Der Programmierer oder der Compiler? Ist 
das wegcasten des volatile eine gute und harmlose Idee, oder hatte der 
Compiler recht, als er die Warnung ausgesprochen hat?
Ohne verwendenden Code lässt sich das nicht entscheiden. Im Zweifelsfall 
plädiere ich für "Der Compiler hatte recht und der Programmierer wird zu 
5 Stunden debuggen ohne Bewährung bei verschärften Optimizerbedingungen 
verurteilt".
Das wegcasten von 'const' oder 'volatile' ist selten eine gute Idee. 
Compiler warnen nicht ohne Grund vor derartigen impliziten Operationen. 
Dann gibt es eben 2 Möglichkeiten. Entweder man stellt den Compiler mit 
einem explizitem Cast und einem "Kusch, ich bin der Herr im Haus" ruhig. 
Oder die Sache ist schwerwiegender und ein paar Datentypen müssen 
angepasst werden.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren