2013-01-18 16 views
5

Próbuję zrozumieć, w jaki sposób należy użyć const w kodzie C. Po pierwsze naprawdę nie przeszkadzało mi to używać, ale potem zobaczyłem całkiem sporo przykładów, z których korzystałem w całym tekście: const. Czy powinienem podjąć wysiłek i wrócić i religijnie stworzyć odpowiednie zmienne const? Czy po prostu będę tracił czas?Jak najlepiej używać słowa kluczowego const w C?

Przypuszczam, że ułatwia to odczytanie zmiennych, które mają ulec zmianie, szczególnie w wywołaniach funkcji, zarówno dla ludzi, jak i kompilatora. Czy brakuje mi innych ważnych punktów?

+1

wszystko jest zmienne w każdym razie. const jest, jak sam mówisz, wskazówką, że przypisana wartość nie powinna zostać zmieniona. ale możesz manipulować wskaźnikami i cokolwiek zmienić tę wartość za plecami kompilatora: http://stackoverflow.com/questions/3801557/can-we-change-the-value--constant-throughpointpoint –

+0

Podobne : [Sprzedaj mi o stałej poprawności] (http://stackoverflow.com/questions/136880/sell-me-on-const-correctness) (jest to C++, ale jest również istotne dla C). – netcoder

+0

Nie zawracałbym sobie głowy odtwarzaniem aplikacji, które działają i gotowe. Jeśli masz biblioteki, nie byłoby źle, gdyby użyły one 'const'. W niektórych punktach musiałbyś jednak zrezygnować. Na przykład tablice 'const' i wielowymiarowe działają naprawdę razem. – Shahbaz

Odpowiedz

5

const to typowane, makra nie są.

const jest określany przez blok C, #define dotyczy pliku.

const jest najbardziej przydatna przy przekazywaniu parametrów. Jeśli widzisz const używany na prototypie ze wskaźnikami, wiesz, że możesz bezpiecznie przekazać tablicę lub strukturę, ponieważ funkcja nie zmieni tego. No const i może.

Przyjrzyj się definicji takiej jak strcpy(), a zobaczysz, co mam na myśli. Zastosuj "const-ness" do funkcji prototypów na początku. Retro-dopasowanie const nie jest tak trudne, jak "dużo pracy" (ale OK, jeśli zarabiasz za godzinę).

rozważyć także:

const char *s = "Hello World"; 
char *s = "Hello World"; 

co jest prawidłowe, a dlaczego?

+0

W twoim przykładzie zakładam, że nie mogę zmienić części "Hello World" w pierwszym wierszu (ale mogę uczynić punkt 's' innym łańcuchem), czy to prawda? Widziałem tę notację tu i tam, czy to w jaki sposób łańcuchy znaków (to znaczy tablice "char") powinny być natychmiastowe? – c00kiemonster

+0

@ c00kiemonster: Jeśli zawartość można zmodyfikować, nie należy jej określać jako "const". Ale w powyższym przykładzie 's' * jest * stałą i dlatego nie można go modyfikować. –

+1

@ c00kiemonster: tak, pierwszy przykład z 'const' jest poprawny. Drugi przykład jest niepoprawny, ale niestety powszechny. Doprowadziłoby to do próby zmiany pamięci tylko do odczytu (awaria!). Dawno temu Visual Studio 5 to wszystko i dało "ciekawe" efekty. – cdarke

1

Korzystanie z const jest nie tylko dobrą praktyką, ale poprawia czytelność i zrozumiałość kodu, a także pomaga zapobiegać niektórym typowym błędom. Zdecydowanie w razie potrzeby używaj const.

6
How do I best use the const keyword in C? 

Zastosowanie const gdy chcesz zrobić to "tylko do odczytu". To proste :)

Powiązane problemy