строку при ненулевых данных?
char* My_EEPROM::get_string(int addr1, int len) {
char res[len];
for (int i=0; i<len; i++) {
char c = EEPROM.read(addr1+i);
if (c != 0) res[i]=c;
}
return res;
}
Это даже компилироваться не должно, потому что тут vla
Компилирует, ибо это Arduino
Скомпилировало. Аргумент?
интересно как жить без вла в системах без динамической памяти
Но это не с++
Динамическая память там есть, но использовать её крайне нежелательно. Это же МК, там каждый байт на счету
что шаблоны? int arr_size = readregister(0xDEAD); int data[arr_size]
Ну пишите template<size_t len > И живите спокойно, это не vla
куда писать то? Как пример выше переделать на шаблоны
Открою секрет: на Ардуино не чистый C++
len сделать шаблонным параметром?
компилятор теперь умеет из регистра читать?
* шутка про variant<int[1],int[2], ... int[1024]> *
template <typename T> struct make {}; template <std::size_t... Is> struct make<std::index_sequence<Is...>> { using type = std::variant<int[Is]...>; }; using vector = make<std::make_index_sequence<N>>::type;
Там оно ж всегда будет sizeof(int[1024])...
Ну так не интересно, использование стека-то будет по верхней границе; нужно template <size_t N> void WithVla() { int pseudovla[N]; } void EmulateVla0(size_t n) { if (n & 1) { return EmulateVla1<1>(n / 2); } else { return EmulateVla1<0>(n / 2); } } // Повторить раз 30, чтоб точно хватило!
Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!
Обсуждают сегодня