Nie używaj const
zmiennych dla to! W języku C zmienna kwalifikowana jest stała w sensie stałej ekspresji, więc nie może być używana podczas inicjowania zmiennej statycznej/globalnej. Ma to poważne praktyczne konsekwencje; Na przykład, następujące nie będzie działać:
static const double powers_of_pi[] = { 1, PI, PI*PI, PI*PI*PI, PI*PI*PI*PI, };
Właściwym rozwiązaniem jest #define
. Najlepiej jest użyć przyrostka l
, aby miał typ long double
i zawierał wystarczająco dużo miejsc dziesiętnych, aby wartości były poprawne dla typów long double
do 128-bitów. Wtedy możesz ich użyć wszędzie tam, gdzie oczekuje się dowolnego typu zmiennoprzecinkowego; C w razie potrzeby zamieni je w cichy na mniejszą precyzję.
+1: C const to śmieci. Na przykład nie możesz tego zrobić: 'static const double pi = 3.1415926; static const double tau = 2 * pi; 'ponieważ w C const inicjalizatory zawsze muszą być kompilowanymi stałymi czasowymi, których pi nie jest. –
Dzięki za wsparcie wstrzyknięcie pewnego rozsądku w ten temat. Wygląda na to, że wszyscy inni wywodzą się z C++ i myślą, że to, co działa w C++ powinno działać w C ... :-( –
@Luther, nie powinno nazywać ich śmieciami.Mają one ograniczone zastosowanie, ale na pewno nie takie, które ktoś który wywodzi się z tła w C++. 'const' nie powinien nigdy zostać wybrany jako słowo kluczowe dla tego, co stoi,' unmutable' lub coś w tym stylu byłoby znacznie bezpieczniejsze, zarówno dla C, jak i C++. –