static char buf[8];
void foo(){
const char* ptr = buf;
/* ... */
char* q = (char*)ptr;
}
Powyższy fragment kodu będzie generować "warning: cast discards ‘__attribute__((const))’ qualifier from pointer target type [-Wcast-qual]"
. Lubię -Wcast-qual
, ponieważ może mi pomóc od przypadkowego zapisu w pamięci, do której nie powinienem pisać.Explicit Zignoruj ostrzeżenia od -Wcast-qual: „__attribute __ ((const))” CAST odrzutów kwalifikator od rodzaju docelowej wskaźnik
Ale teraz chcę odrzucić const tylko dla jednego wystąpienia (nie dla całego pliku lub projektu). Pamięć, na którą wskazuje, jest zapisywalna (tak jak powyżej: buf
). Wolałbym nie upuszczać const z ptr
, ponieważ jest on używany gdzie indziej, a trzymanie się wskaźników (jednej stałej i jednej stałej) wydaje się gorszym pomysłem.
Dlaczego nie tylko "char * q = buf;'? –
Sądzę, że to niejasne z urywków, wykonuję arytmetykę na ptr przed obsadą. – ext
Lepiej byłoby użyć indeksu do buffa niż do manipulowania wskaźnikami i przekazać np. 'i buff [i]' zamiast wskaźnika? –