Portál AbcLinuxu, 4. května 2025 19:20

Dotaz: warning: dereferencing type-punned pointer will break strict-aliasing

31.7.2006 02:58 Tomas
warning: dereferencing type-punned pointer will break strict-aliasing
Přečteno: 305×
Odpovědět | Admin
Helo,

mam problem s prekladom programku na FreeBSD, gcc zahlasi "warning: dereferencing type-punned pointer will break strict-aliasing rules" a nikde na internete sa neviem dopatrat co to vlastne znamena. Inu, tu je kod co to sposobuje:
bbwrite(tfd3, iobuf3, (void **)&ciobp3, &ciobl3, sizeof(iobuf3), buf, (size_t)i);
problem je cast (void **). Dost tomu nerozumiem, lebo ciobp3 je pointer na char a bbwrite ocakava typ (void **). Cize malo by to byt v poriadku. Ajhla gcc si mysli nieco ine.

Ma niekto nejaky napad?

Diki moc

Tom.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

31.7.2006 13:01 petr_p
Rozbalit Rozbalit vše Re: warning: dereferencing type-punned pointer will break strict-alias
Odpovědět | | Sbalit | Link | Blokovat | Admin
Treba v tomto vlakne je to trochu popsane.

I kdyz nechapu, cemu tohle muze vadit pretypovani z char** na void**.
31.7.2006 13:21 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: warning: dereferencing type-punned pointer will break strict-alias
Přetypování char** na void** v podstatě znamená, že umožňujete skrytě přetypovat void* na char*. Je to podobné, jako že implicitně lze provádět konverzi T* na const T*, ale už ne T** na const T**.
31.7.2006 13:37 machr | skóre: 2 | blog: machr
Rozbalit Rozbalit vše Re: warning: dereferencing type-punned pointer will break strict-alias
moh by mi nekdo vysvetli, proc nejde implicitne pretypovat T** na const T**. Novej typ je omezenejsi, tak v cem je problem ???
(__) (oo) /-------\/ / | || * ||----|| ~~ ~~
31.7.2006 13:42 Sinuhet | skóre: 31
Rozbalit Rozbalit vše Re: warning: dereferencing type-punned pointer will break strict-alias
Staci hledat.
31.7.2006 13:54 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: warning: dereferencing type-punned pointer will break strict-alias
Protože by to umožnilo nevědomky obejít const pomocí aliasu:
  const T* cp = &ro_data;
  T* np = &rw_data;
  const T** pcp = &cp;
  T** pnp = &np;
  
  // tohle nemůžu:
  *cp = x;

  // tohle taky nemůžu
  np = cp; // nelze
  *np = x; // OK

  // ale tohle by byl o vlastně totéž
  pcp = pnp; // nelze
  *pcp = cp; // OK - jenže teď jsem vlastně provedl 'np = cp'
  *np = x; // OK
31.7.2006 14:42 machr | skóre: 2 | blog: machr
Rozbalit Rozbalit vše Re: warning: dereferencing type-punned pointer will break strict-alias
uz to chapu. diky. S timle problemem sem se jste nesetkal... (asi to bude tim, ze u me se pouzivani const omezuje na const char* a to jeste jenom, kdyz me je vnuti kompilator :-))
(__) (oo) /-------\/ / | || * ||----|| ~~ ~~

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.