想见识见识volatile的魅力
就是想看看有volatile和无它的不同,就小试了一下:
不我更想看到的是这种的,让编译器给它优化掉,然后出错误,但是输出的还是6,5。以前看代码也看到有主动加volatile,但是记忆不深刻就想见识见识没有它,出错误的例子。
//hello.c
#include <stdio.h>
int a = 6;
int main()
{
//int a = 6;
printf("a = %d\n", a);
change_a();
printf("a = %d\n", a);
return 0;
}
//hello2.c
extern a;
void change_a(void)
{
int *p = &a;
*p = 5;
}
编译优化选项用的是-O2。这个只能意会不能看到效果吗?编译器要想很聪明,我骗不了它。 性能优化 编译器
[解决办法]
都没有多线程, 你怎么测试 volatile 的效果....
编译器的优化肯定是在不影响程序正确性的前提下进行的, 否则还得了.
[解决办法]
你貌似还没有领悟到volatile的魅力,设计一个关键字,就是为了在调试的时候能在调试器里看到值?你以为会这么简单?
[解决办法]
和register结合起来,有助于理解。
[解决办法]
别想太多了 这么编译器怎么优化 结果都只会是 6 5
如果编译器优化结果不是 6 5
那么你可以提交一个BUG了