ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
26 апреля
927111
Dingo (14.06.2019 06:24 - 06:33, просмотров: 2509)
Хочу по Си спросить: discard qualifier Есть функция вида bool ntp_ge( ntptime_t op1, ntptime_t op2) // operator >= При попытке переписать к виду bool ntp_ge( ntptime_t* op1, ntptime_t* op2) // operator >= выдаёт варнинги на discard qualifier, в моём случае volatile. И функция не работает, как ожидается при использовании для опроса в цикле, пока не будет достигнуто заданное время. wpoint = ntp_add( wpoint, SystemTime ); while( ntp_ge( wpoint, SystemTime) ) { __NOP(); } Я понимаю, что при передаче по значению будь там хоть константа, результат не изменится, потому как передаётся копия. Я не вполне понимаю, почему при работе с переменной volatile ntptime_t SystemTime; и передаче значения по ссылке оптимизатор( -Os ) забывает перечитать значение по ссылке в цикле, хотя переменная определена в этом же файле. Писать отдельно функцию для volatile-значений? "Не по фен-шую" это. Передавать как volatile ntptime_t* p_ntp пробовал - тоже не перечитывает на итерациях. Ну или как в Makefile задать отличный от других файлов уровень оптимизации для одного из файлов проекта?