C言語でコンパイラの最適化によるキーワードの削除を防ぐ方法
C言語では揮発(volatile)というキーワードを使用して、コンパイラによるコードの最適化を防ぐことができます。volatileキーワードは、ある変数の値が外部から変更される可能性があることをコンパイラに伝えることができ、その変数を使用する際には、キャッシュされた値ではなく、常にメモリから最新の値を読み込むようになります。
コードの例を以下に示します。
#include <stdio.h>
int main() {
volatile int num = 10;
int result = 0;
while (num > 0) {
result += num;
num--;
}
printf("Result: %d\n", result);
return 0;
}
コード内のvolatile int numは、volatile変数のnumを宣言し、これによりコンパイラにnumを使用するたびにメモリから最新の値を読み込むよう指示します。このため、whileループ内の判断ステートメントnum > 0ではnumの値を毎回正しく判断できます。
揮発性キーワードを使用しても、同時アクセスにおけるスレッドセーフティは保証されないことに注意してください。スレッドセーフティを確保する場合は、ミューテックスなどの他の同期メカニズムを使用する必要があります。