(связанный с этим вопросом Безопасно ли исключить изменчивость?, но не совсем то же самое, что и этот вопрос относится к конкретному экземпляру)
Есть ли случай, когда отбрасывание volatile
не считается опасной практикой?
(один конкретный пример: если есть объявленная функция
void foo(long *pl);
и я должен реализовать
void bar(volatile long *pl);
с частью моей реализации, требующей bar() для вызова foo (pl), тогда кажется, что я не могу заставить это работать так, как есть, потому что предположения, сделанные компиляцией foo() и компиляцией вызывающий bar() несовместимы.)
В качестве следствия, если у меня есть переменная volatile
v, и я хочу называть foo(&v)
с кем-то еще функцией void foo(long *pl)
, и этот человек говорит мне, что это безопасно, я могу просто наложить указатель перед вызовом, мой инстинкт заключается в том, чтобы сказать им, что они ошибаются, потому что нет способа гарантировать это, и что они должны изменить объявление на void foo(volatile long *pl)
, если они хотят поддерживать использование изменчивых переменных. Кто из нас прав?