Есть такой говнокод: Код (C++): volatile uint8_t data[n]; где-то определена функция Код (C++): uint8_t my_function (uint8_t *data) { здесь говнокод } так вот при вызове этой функции Код (C++): my_function (&data[x]); компилятор кидает предупреждение разумеется, что при добавлении volatile в эту функцию предупреждение исчезает, но проблема в том, что он ругается и на вложенные функции, в которые передаётся массив. Менять во вложенных функциях ничего не хочется, ибо они в файлах, которые таскаются между проектами (грубо говоря драйверы периферии). Вот как быть? Может, надо настроечки компилятора "подкрутить"? Или забить? Я не слишком сильно проскиллован в указателях( n и х вполне определенные числа, но здесь опущены.
Если не указывать, то функции будут скомпилированы с оптимизациями, которые volatile должен отменять. Тут вопрос в том, насколько и в какой функции это нужно.
Попробуй в my_function передавать через const_cast: Код (C++): my_function (const_cast<uint8_t*>(&data[x]));
Тем не менее, оно и так работает. Volatile из-за того, что один из элементов массива записывается в прерывании. Я так понимаю, что указатель на область памяти с массивом передаётся через РОН (так утверждает AN), соответственно - пусть компилятор оптимизирует всё внутри функции. Мне важно, чтобы мой массив был доступен из обработчика прерывания.
Значит и не нужно volatile там. Или пока везет. Но скорее не нужно, т.к. в большинстве случаев не нужно.