Johann L. schrieb:
> Nop schrieb:
>> Johann L. schrieb:
>>
>>> Muss nicht aber kann.
.
>> Sollte, weil zwar die übergebene Adresse in beiden Fällen dieselbe ist,
>> aber nicht der assoziierte Typ.
.
> Wenn ich mit gcc folgendes übersetzetypedef struct { char a[3]; }
> __attribute((packed)) S;
>
> S g[7];
>
> #define T(x,y) _Generic((x), __typeof(y):1, default:0)
>
> int main()
> {
> static char volatile v;
> v = T (g, g);
> v = T (g, &g[0]);
> __typeof(g) b;
> v = sizeof (g);
> v = sizeof (b);
> }
> dann werden nacheinander folgende Werte in v gespeichert: 0, 1, 21, 21.
>
> Die beiden letzten Werte sind klar, aber warum hat g nicht den Typ von g
> sondern den von &g[0]?
>
> Verwirrt ich bin. Oder ist das ein Bug?
Wenn (x) als Parameter der "Funktion" _Generic() angesehen wird,
__typeof() aber den "echten" Typ ermittelt, dann würde es passen.
Wenn auch etwas strange.