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