36
Dobrze jest używać stałych w programie, ponieważ unikniemy wtedy przypadkowych pomyłek a kompilator może często zoptymalizować ich użycie (np. od razu podstawiając ich wartość do kodu).
const int WARTOSC.POCZATKOWA-5; int i«WART0SC_POCZĄTKOWĄ;
WART0SC_P0CZATK0WA=4; /1 tu kompilator zaprotestuje 1/
int j-WARTOSC.POCZATKOWA;
Przykład pokazuje dobry zwyczaj programistyczny, jakim jest zastępowanie umieszczonych na stale w kodzie liczb stałymi. W ten sposób będziemy mieli większą kontrolę nad kodem — stale umieszczone w jednym miejscu można łatwo modyfikować, zamiast szukać jk> całym kodzie liczb, które chcemy zmienić.
Nie marny jednak pełnej gwarancji, że stała będzie miała tę samą wartość przez cały czas wykonania programu. Możliwe jest dostanie się do wartości stałej pośrednio
za pomocą wskaźników. Można zatem dojść do wniosku, że słowo kluczowe const służy tylko do |>oinfonnownnia kompilatora, aby ten nie zezwala! na jawną zmianę wartości stałej. Z drugiej strony, zgodnie ze standardem, próba modyfikacji wartości stałej ma niezdefiniowane działanie (tzw. undefined behamour) i w związku z tym może się powieść lub nic. ale może też spowodować jakieś subtelne zmiany, które w efekcie spowodują, że program będzie źle działał.
Podobnie do zdefiniowania stałej możemy użyć dyrektywy preprocesora #define (opisanej w dalszej części podręcznika). Tak zdefiniowaną stałą nazywamy stałą symboliczną. W przeciwieństwie do stałej zadeklarowanej z użyciem słowa const stała zdefiniowana przy użyciu #defuie jest zastępowana daną wartością w każdym miejscu, gdzie występuje, dlatego też może być używana w miejscach, gdzie “normalna” stała nie mogłaby dobrze spełnić swej roli.
W przeciwieństwie do języka C++, w C stała to cały czas zmienna, której kompilator pilnuje, by nie zmieniła się. Z tego powodu w C nie można użyć stałej do określenia wielkości tablicy1 i należy się w takim wypadku odwołać do wcześniej wspomnianej dyrektywy ttdefine.
Każdy program w C operuje na zmiennych — wydzielonych w pamięci komputera obszarach, które mogą reprezentować obiekty nam znane, takie jak liczby, znaki, czy też bardziej złożone obiekty. Jednak dla komputera każdy obszar w pamięci jest taki sam to ciąg zer i jedynek, w takiej postaci zupełnie nieprzydatny dla programisty i użytkownika. Podczas pisania programu musimy wskazać, w jaki sposób ten ciąg ma być interpretowany.
Typ zmiennej wskazuje właśnie sposób, w jaki pamięć, w której znajduje się zmienna będzie wykorzystywana. Określając go przekazuje się kompilatorowi informację, ile pamięci trzelła zarezerwować dla zmiennej, a także w jaki sposób wykonywać na nim operacje.
Każda zmienna musi mieć określony swój typ w miejscu deklaracji i tego typu nie może już zmienić. Lecz co jeśli inamy zmienną jednego typu. ale potrzebujemy w pewnym miejscu programu innego typu danych? W takim wypadku stosujemy konwersję
Jest to możliwo w standardzie C99