Я видел Сколько использования использует "volatile" ключевое слово имеет в функции С++, с точки зрения грамматики? об использовании ключевого слова volatile по функциям, но не было четкого объяснения того, что сделал случай 1 из этого вопроса. Только выражение одного из респондентов о том, что оно кажется бессмысленным/бесполезным.
Однако я не могу полностью согласиться с этим утверждением, поскольку реализация программного обеспечения AES для GNUC использовалась буквально в течение нескольких лет, и у них есть ряд функций, подобных этому:
INLINE volatile void functionname( /* ... */ ) {
/* ... */
asm( /* ... */ ) // embedded assembly statements
/* ... */
}
Должна быть причина такого использования. Может ли кто-нибудь:
А. скажите мне, какова первоначальная причина; и
В. как добиться желаемого эффекта сейчас?
Я использую Ubuntu и GCC 4.6.3.
Примечание. Ближайшим образом я пришел к объяснению, что до GCC 2.5 вы можете обмануть атрибут "noreturn", который был реализован в версии 2.5, следующим образом:
void fatal( /* ... */ ) { /* ... */ exit(1); }
typedef void voidfn ();
volatile voidfn fatal;
Это позволит компилятору признать, что "фатальный" не вернется.
Но этот сценарий, похоже, не применяется к коду AES. Прошло много времени с тех пор, как я сделал что-то в сборке, но я думаю, что узнаю прыжок или что-то в этом роде.