foo.c
#include "main.h"
unsigned char currentBar;
struct foo myFoo[getNumBars()];
void initMyFoo(void)
{
currentBar=(getNumBars()-1);
for(i=0; i<(sizeof(myFoo)/sizeof(myFoo[0])); i++)
{
myFoo[i].we = 1;
myFoo[i].want = 0;
myFoo[i].your = 0;
myFoo[i].soul = 0;
}
}
main.c
#include "foo.h"
unsigned char getNumBars()
{
return getDipSwitchValues();
}
initMyFoo();
(структура foo объявлена в foo.h.)
Этот код должен выполняться без жесткого кодирования числа для баров, так как количество баров будет меняться в зависимости от того, что пользователь устанавливает свои DIP-переключатели. Сейчас я не могу инициализировать myFoo; Я получаю сообщение об ошибке «Ожидается постоянное выражение в инициализаторе». Должен ли я инициализировать его как:
struct foo myFoo[];
и поменять его позже? Если так, как мне сделать myFoo [] правильной длины? У меня очевидно нет постоянной доступной, которая соответствует желаемому размеру. Нужно ли динамически выделять это или что-то?
Я нашел этот похожий ответ, но он был не слишком полезен для меня - C ++ класс с массивом структур, не зная, какой массив мне нужен