[VisualGDB]initializer element is not constan
- Antystatyczny
- Geek
- Posty: 1168
- Rejestracja: czwartek 03 wrz 2015, 22:02
Re: [VisualGDB]initializer element is not constan
To pewnie nie ma znaczenia (a właściwie nigdy się nad tym nie zastanawiałem), ale czy próbowałeś napisać const int NONE = -1;?
"The true sign of intelligence is not knowledge but imagination" Albert Einstein.
Re: [VisualGDB]initializer element is not constan
NONE to jak dla mnie zmienna. Co prawda nie można zmienić jej wartości w programie (przeważnie), albo nawet umieszczona we FLASH, ale istniejąca jako obiekt w (jakiejś) pamięci (sprawdź sobie w pliku .map czy ma przydzieloną pamięć i gdzie).
Stała to by było
albo
Stała to by było
Kod: Zaznacz cały
static int buffered_char = -1;
albo
Kod: Zaznacz cały
#define NONE -1
static int buffered_char = NONE;
- Antystatyczny
- Geek
- Posty: 1168
- Rejestracja: czwartek 03 wrz 2015, 22:02
Re: [VisualGDB]initializer element is not constan
xor pisze:Stała to by byłoKod: Zaznacz cały
static int buffered_char = -1;
alboKod: Zaznacz cały
#define NONE -1
static int buffered_char = NONE;
Przedyskutujmy to jeszcze. W mojej ocenie static int buffered_char = NONE; nadal jest zmienną, oczywiście jest zainicjalizowana wartością -1 i jest o widoczności wewnętrznej (zasięg jednego modułu). Gdybym chciał mieć faktyczną stałą, napisałbym tak:
Kod: Zaznacz cały
static const int buffered_char = -1;
A co do makra... Zaleca się ograniczanie ich ilości, a tutaj właśnie można z niego (makra) zrezygnować, ponieważ brałoby udział w inicjalizacji stałej. W dalszej części kodu posługujemy się już nazwą "buffered_char", czyli nie wprowadzamy do niego tzw. magicznych liczb (co również nie jest zalecane).
Oczywiście mogę się mylić. Być może stała NONE ma być wykorzystywana wielokrotnie, ale do analizy mam tylko dwie linijki kodu
"The true sign of intelligence is not knowledge but imagination" Albert Einstein.
Re: [VisualGDB]initializer element is not constan
Oczywiście mówiąc "Stala to by bylo" miałem na myśli NONE.
Zrobiłem ad hoc kilka prób, ale wyniki wyszły mi jakieś niejednoznaczne, a na razie nie mam głowy i chęci się wglębiać.
Czasem "int const NONE = -1" było widoczne w .map jako obiekt w sekcji text (wtedy inicjacja buffered_char=NONE wywalała błąd jak w temacie), a czasem nie była widoczna i błędu nie było (czyli tak jakby wyrażenie zostało zoptymalizowane do wartości stałej).
Zrobiłem ad hoc kilka prób, ale wyniki wyszły mi jakieś niejednoznaczne, a na razie nie mam głowy i chęci się wglębiać.
Czasem "int const NONE = -1" było widoczne w .map jako obiekt w sekcji text (wtedy inicjacja buffered_char=NONE wywalała błąd jak w temacie), a czasem nie była widoczna i błędu nie było (czyli tak jakby wyrażenie zostało zoptymalizowane do wartości stałej).
Wróć do „Pisanie programów w C”
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 2 gości