Определения целочисленных массивов: длина
Я определяю переменную как целое число и хочу ее использовать
int specLength = 17;
int spec[specLength-1];
Когда я это делаю, я получаю следующее сообщение об ошибке:
TestProgram:34: error: array bound is not an integer constant before ']' token
int spec[specLength-1];
Но когда я настроил его как
int specLength = 17;
int spec[16];
все работает нормально.
В чем тут волшебство?
Большое спасибо
@milanybool, 👍0
1 ответ
Лучший ответ:
Вам необходимо использовать постоянное выражение, которое всегда возвращает одно и то же значение.
const int specLength = 17;
int spec[specLength - 1];
В противном случае компилятор не будет знать, сколько места зарезервировано для массива.
Проблема с C/C++ в том, что компилятор на самом деле не знает, была ли переменная где-то изменена или нет (например, через указатели ). Вам нужно сообщить компилятору, что что-то статично
, не меняется.
Вы также можете использовать #define для того же самого porpuse:
#define SPEC_LENGTH 17
int spec[SPEC_LENGTH]
Почему оба? const int val=17
означает, что val
имеет тип (int
). Использование #define
— это просто поиск и замена текста перед компиляцией. Так что SPEC_LENGTH вообще не имеет типа. При необходимости вам придется использовать приведение, например (int) SPEC_LENGTH
.
- Как я могу прервать задержку() при нажатии кнопки?
- Код студента: функция карты не работает
- Считывание данных нескольких датчиков из текстового файла, расположенного на SD-карте в Arduino/ESP32
- Проблемы с IP-адресом esp8266
- Проблемы с Serial.read()
- Arduino ждет, пока кнопка не будет отпущена для активации
- Int массив, переданный через функцию, имеет неправильные значения только после нескольких проходов
- Симулятор стоп-сигнала - белый светодиод не включается при нажатии кнопки