Если я вызываю функцию с параметром volatile, и этот параметр не используется, должен ли компилятор создать параметр?
void consume( volatile int ) { }
...
consume( some_expr );
GCC выполняет это почетное, но я не уверен, что эта формулировка неустойчивой в стандартах требует этого. На мой взгляд, GCC делает правильные вещи - это логически назначение переменной volatile и поэтому не следует опускать (согласно 1.9-8 стандарта С++)
ПРИМЕЧАНИЕ. Целью этого является предотвращение удаления оптимизатором кода. То есть, он заставляет some_expr
оцениваться. Он позволяет оптимизировать выражение, но гарантирует его выполнение.
Я добавляю C и С++ как теги, так как ответ на меня интересует меня, если есть какие-то различия. Я не думаю, что будет.
ANSWER. Я выбрал первый, так как считаю, что это правильная практическая реализация стандарта. Однако философская точка зрения Стива очень интересна и может на самом деле означать, что стандарт неоднозначен.