_LM_ Napisano Marzec 29, 2022 Udostępnij Napisano Marzec 29, 2022 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ć? Link do komentarza Share on other sites More sharing options...
ethanak Marzec 29, 2022 Udostępnij Marzec 29, 2022 (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 Marzec 29, 2022 przez ethanak 1 Link do komentarza Share on other sites More sharing options...
_LM_ Marzec 29, 2022 Autor tematu Udostępnij Marzec 29, 2022 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. Link do komentarza Share on other sites More sharing options...
Elvis Marzec 29, 2022 Udostępnij Marzec 29, 2022 Nie, to nie jest błąd kompilatora 🙂 Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. 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
_LM_ Marzec 29, 2022 Autor tematu Udostępnij Marzec 29, 2022 (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 Marzec 29, 2022 przez _LM_ Link do komentarza Share on other sites More sharing options...
Elvis Marzec 29, 2022 Udostępnij Marzec 29, 2022 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. 1 Link do komentarza Share on other sites More sharing options...
_LM_ Marzec 29, 2022 Autor tematu Udostępnij Marzec 29, 2022 (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 Marzec 29, 2022 przez _LM_ Link do komentarza Share on other sites More sharing options...
Elvis Marzec 29, 2022 Udostępnij Marzec 29, 2022 Ja bym obstawiał, że poprzenia wersja to nie do końca była tablica wskaźników. Tzn. była, ale niepoprawnie użyta - nawet gdyby typy się zgadzały. C99 ma dość ciekawą opcję: https://en.wikipedia.org/wiki/Flexible_array_member Moim zdaniem wyszło coś takiego, chociaż chyba nie o to chodziło. Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »