这是alglib库的样本函数(C ++),用于相等的检查:
ae_bool ae_fp_eq(double v1, double v2) {
/* IEEE-strict floating point comparison */
volatile double x = v1;
volatile double y = v2;
return x==y;
}
在此代码中使用volatile
的原因是什么?
如果删除它怎么了?
为了简单起见,请考虑以下两个不同的简单声明:
int a; // first
volatile int a; // second
如果变量a
在整个程序中未使用,或者如果a
中存储的值未使用,或者是a是全局变量,其值由中断服务程序更新,则编译器将不会计算[ C0](即,它将忽略整个代码)。通过指定关键字volatile,我们确保编译器不会对变量执行这些优化。
如果您指定编译器的优化标志a
,则可以看到volatile的差异,它将删除所有不需要的变量。]>
就是这样。