Tak więc chcę mieć definicję rozmiaru tablicy w strukturze znanej w czasie kompilacji. Chciałbym również, aby ta liczba była dostępna jako zmienna, aby ułatwić późniejszy użytek. Oto, co mam:Wielkość elementu tablicy struct w oparciu o const int w plikach
To działa dobrze. Jednakże, jeśli mam go w pliku .h, który jest zawarty w wielu miejscach, kompilator narzeka na redefinicję BANANA_ARRAY_SIZE (co ma sens). Muszę więc zadeklarować to jako element zewnętrzny, dzięki czemu wiele jednostek kompilacji może o tym wiedzieć.
Więc teraz mam
extern const int BANANA_ARRAY_SIZE;
typedef struct
{
//.. same as before
} banana_struct;
oraz w pliku wdrażania mam
const int BANANA_ARRAY_SIZE = 10;
Ale teraz kompilator nie pozwoli mi zdefiniować struct już ze skargami
fields must have a constant size: variable length array in structure
Czy istnieje sposób, w jaki mogę osiągnąć to, co chcę (mieć długość tablicy przechowywanej w zmiennej i użyć do zdefiniowania struct)?
Edit:
W odpowiedzi na sugestie, aby zamiast wykorzystywać #define
s, Wolałbym nie.
Moje pytanie dotyczy tego, jak zachować tę stałą wartość w zmiennej, a także do ustawienia długości tablicy w strukturze. Jeśli potrzebujesz dalszego uzasadnienia, załóżmy, że potrzebuję funkcji, która pobiera wskaźnik do int. Nie można odwołać się do # definicji.
Oczywiście można wykonać tylko ten rodzaj inicjowania w zasięgu lokalnym w zakresie C, a nie w zasięgu globalnym, który próbujesz. *** [ref] (http://stackoverflow.com/a/11541168/645128) *** iw tym samym poście: *** [ref2] (http://stackoverflow.com/a/11542474/645128) *** – ryyker
Proszę przeczytać mój zaktualizowany komentarz, ostatni komentarz do mojej odpowiedzi. To się nie zdarza dla mnie _gcc-5.1.0_. –
'#define BANANA_ARRAY_SIZE 10'' char bananas [BANANA_ARRAY_SIZE]; const size_t length = BANANA_ARRAY_SIZE; ' – chux