Tak, mam ten kod:Jak znaleźć zmienne, które powinny być stałe w C?
uint8_t* pbytes = pkt->iov[0].iov_base;
który tworzy wskaźnik do początku pakietu ethernet w strukturze.
I proszę mojego przyjaciela, aby spojrzał na kod, a on mówi: "Nie modyfikujecie tego i byłoby naprawdę mylące, gdybyście to zrobili, więc niech to będzie stałe".
I to wydaje się dobrym pomysłem, więc:
const uint8_t* pbytes = pkt->iov[0].iov_base;
lub nawet:
const uint8_t * const pbytes = pkt->iov[0].iov_base;
A teraz myślę, założę istnieje mnóstwo innych miejsc, gdzie mogłem zrobić to i założę się, że kompilator lepiej będzie je znaleźć niż ja.
Jakieś pomysły, jak zadaję to pytanie? (preferowany gcc, ale bez problemów przy użyciu innego kompilatora lub narzędzia lintingowego, o ile będą działać w systemie Unix).
'const uint8_t * pbytes' nie jest stała. C nie ma stałych symbolicznych innych niż _enum-constants_ (które są zawsze 'int')! To nie jest C++. – Olaf
Nie mogę wymyślić żadnego łatwego sposobu zautomatyzowania tego. Możesz zadeklarować wszystko "const", a następnie usunąć je dla zmiennych, które powodują błędy. – Barmar
Druga 'const' musi być zgodna z' * '. 'const uint8_t * const pbytes = ...; 'definiuje' pbytes' jako wskaźnik const do const 'uint8_t'. –