Skocz do zawartości

gcc: warning: missing braces around initializer [-Wmissing-braces]


Pomocna odpowiedź

Niby już taki początkujący nie jestem, ale czasem życie ostro to weryfikuje 😉 dostaję warning taki jak w temacie wątku, szukałem troszkę jak to rozwiązać i okazuje się że jest to jakiś błąd kompilatora. Kod - mocno uproszczony - który mi go generuje:

.c

xx_t x[] =
{
		{.id = 1,.p = (void*)NULL},
		{.id = 2,.p = (void*)NULL},
};

prop_t props = {.idx = 0,.val = x};  // <---- w tej linii jest warning nie wiem o którą klamerkę się rzuca.

.h

typedef struct{
	uint8_t id;
	void * p;
}xx_t;

typedef struct{
	uint8_t idx;
	xx_t * val[];
}prop_t;

Drażni mnie ten warning, może ktoś mi wytłumaczyć jak się go pozbyć?

  • Lubię! 1
Link to post
Share on other sites
(edytowany)

Najpierw wytłumacz, dlaczego nie pokażesz całego komunikatu błędu razem z numerem linii i plikiem.

16 minut temu, _LM_ napisał:

okazuje się że jest to jakiś błąd kompilatora

Zmienić kompilator.

Nie dalej jak wczoraj dostałem jeszcze wredniejszy komunikat (z którego zresztą nic nie zrozumiałem). Okazało się, że to błąd w GCC 8. Rozwiązaniem okazało się downgrade esp32 dla Arduino z wersji 2.0.2 na 2.0.0

 

BTW. program skompilował się bez błędu po usunięciu problematycznych linijek (funkcja z AudioGeneratorMIDI nigdy nie była wywoływana), ale i tak nie działał.

 

Edytowano przez ethanak
  • Lubię! 1
Link to post
Share on other sites
3 minuty temu, ethanak napisał:

Najpierw wytłumacz, dlaczego nie pokażesz całego komunikatu błędu razem z numerem linii i plikiem.

Mówisz i masz 

arm-none-eabi-gcc "../Core/MNEULIB/menu_get_prop.c" -mcpu=cortex-m4 -std=gnu11 -DUSE_HAL_DRIVER -DSTM32L476xx -c -I../Core/Inc -I../Drivers/STM32L4xx_HAL_Driver/Inc -I../Drivers/STM32L4xx_HAL_Driver/Inc/Legacy -I../Drivers/CMSIS/Device/ST/STM32L4xx/Include -I../Drivers/CMSIS/Include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -MMD -MP -MF"Core/MNEULIB/menu_get_prop.d" -MT"Core/MNEULIB/menu_get_prop.o" --specs=nano.specs -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "Core/MNEULIB/menu_get_prop.o"
../Core/MNEULIB/menu_get_prop.c:50:16: warning: missing braces around initializer [-Wmissing-braces]
   50 | prop_t props = {
      |                ^
   51 |   .idx = 0,
   52 |   .val = x
      |          {
   53 | };
      | }

testowałem ten kod również na https://www.jdoodle.com/c-online-compiler/ z różnymi wersjami GCC i nie było problemu. 

  • Lubię! 1
Link to post
Share on other sites
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

(edytowany)

@Elvis w takim razie, czego ja znów nie zauważyłem? I dla czego kompilator online nie zwraca ostrzeżenia z tym samym kodem? 

Edytowano przez _LM_
Link to post
Share on other sites

Proponuję zacząć od zrozumienia co znaczy ten fragment:

29 minut temu, _LM_ napisał:

typedef struct{ uint8_t idx; xx_t * val[]; }prop_t;

Jakiego typu jest pole val i co ta konstrukcja znaczy. Ciekawe ćwiczenie BTW.

  • Pomogłeś! 1
Link to post
Share on other sites
(edytowany)

No tak, wg zapisu cytowanego przez ciebie, chciałem mieć tablicę wskaźników na typ xx_t, a w rzeczywistości potrzebuję samego wskaźnika typu xx_t na val. Dziękuję za pomoc. Wstawiam poprawiony kod, jakby ktoś również szukał

xx_t x[] =
{
		{.id = 1,.p = (void*)NULL},
		{.id = 2,.p = (void*)NULL},
};


prop_t props = {
		.idx = 0,
		.val = x
};

 

.h

typedef struct{
	uint8_t id;
	void * p;
}xx_t;

typedef struct{
	uint8_t idx;
	xx_t * val; // <----- tu zmiana
}prop_t;

Dziękuję

Edytowano przez _LM_
Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.