2012-04-24 25 views
5

mam deklarowania struct w IDE (Netbeans) tak:Deklaracja strukturalna: Prawidłowy inicjator w deklaracji?

struct foo { size_t var = 1; }

I IDE mówi jego prawnym. Kompiluję projekt (jego statyczna lib ..) i kompilator mówi, że jest legalny (nie jęczy ani nie rzuca).

Teraz ponieważ jestem tylko testowanie składni w tym momencie muszę zapytać kogoś, kto może wiedzieć, czy to rzeczywiście działa, gdy idę do deklarowania struct tego tagu w moich procedurach tak:

struct foo myfoo;

Pytanie brzmi: czy to jest prawidłowy initalizer? (size_t var = 1) lub jest kompilator po prostu głaszcząc moje ego tutaj? Nie znalazłem nic na google ani w dokumentacji takiej jak ta, więc domyślam się, że nie działa tak, jak mam nadzieję.

* edytuj So me and the Good "chłopcy tutaj", doszli do wniosku, że skompiluje się on w konfiguracji debugowania, ale nie w konfiguracji wydania. Kto powiedział, że jedna głowa jest lepsza niż kilka tysięcy? : D

+1

zobaczyć powiązane pytanie http://stackoverflow.com/questions/330793/how- to-initialize-a-struct-in-ansi-c – TJD

+0

@TJD Teraz to było szybkie i niesamowite! Dzięki. Ale wciąż nie rozumiem, dlaczego GCC i IDE puścili to bez jęku. Właśnie ostrzeliwałem ostrzeżenia w górę ... I wciąż słyszę świerszcze. lol. –

+1

Jakiej wersji gcc używasz? Po prostu próbowałem z 4.4.3 i otrzymałem błąd "oczekiwano": ",", ",", "}" lub "__attribute__" przed "=" tokenem " –

Odpowiedz

4

Nie sądzę, że to dozwolone. Trzeba określić wartość zmiennej, a nie struct:

struct foo { size_t var; }; 

struct foo myfoo = { 1 }; 

chodzi o IDE pozwalając go, oczywistym możliwością byłoby, że kod jest naprawdę trochę inaczej, takie jak:

struct foo { static const size_t var = 1; } 

... i IDE jest kompilowanie go jako C++ zamiast C

+0

Cokolwiek dzieje się z ciekawości. Może to moje następne pytanie. "Dlaczego to nie oznacza ostrzeżenia kompilacji?" –

+0

Dzięki za pomoc Pozdrawiam! –

+1

@ TristonJ.Taylor Nie chcesz nam powiedzieć, co było przyczyną? Czy używasz IDE w C++? –

1

odpowiedź jest prosta: nie można zainicjować wewnątrz definicji struct, więc jeśli kompilator jest pozwalając ci robić, że dzieje się coś dziwnego.

Aby zainicjować musisz utworzyć instancję tej struktury w var (lub obiekcie, jeśli to jest to, czego szukasz) i zainicjować ten var.

Więc dla struct:

struct foo { 
    size_t var = 1; 
} 


Można by initiazlize jak:

type function_name(...params...) { 
    struct foo myFooVar; 
    myFooVar.var = 1; 
    .... 
    return <type>; 
} 
+0

Dzięki za odpowiedź! "Jest coś dziwnego ..." DeJa Vu .. lol Innymi słowy: Moje uczucia dokładnie ... –

+0

Czy możesz potwierdzić błąd? 'gcc (GCC) 4.7.0 20120407 (prerelease)' –

+0

Znalazłem: konfiguracja debugowania dla projektu pozwoli temu slajdowi, tryb zwolnienia rzuci ogień smoków ze środkowej ziemi ... lub coś w tym stylu. –