对于一个程序的思考1(const与 volatile)

来源:互联网 发布:mac 16进制颜色取色器 编辑:程序博客网 时间:2024/04/28 08:52


#include<stdio.h>int main(){ const int i=0; int *j=(int *)&i; *j=1; printf("%d,%d\n",i,*j);    return 0;}

对于上边这个看似简单的程序却是深藏玄机

windows平台

1.在  .c 文件中输出是      1,1  ,深究原因是因为 const 在.c文件中定义的变量是只读的但是还是个变量 ,不可以显示更改如 i=1,但是可以通过地址间接进行更改  

2.在  .cpp 文件中 输出是 0,1  ,深究原因是因为 const 在.cpp文件中定义的变量在预编译时就已经用  0  把  i  替换,因为编译器优化了,认为所有符号 i 都是 0,虽然在编译时为变量分配内存,但是如何间接直接改变都不会影响输出结果

LINUX 平台  

与 WINDOWS平台结果一致


再看底下这个程序

#include<stdio.h>int main(){ volatile const int i=0; int *j=(int *)&i; *j=1; i=1; printf("%d,%d\n",i,*j);      return 0;}

windows平台

1.在  .c 文件中输出是      1,1   volatile 在.C基本只是让编译器减少优化,这里是消除const,值是在.c 文件里体现的不明显

2.在  .cpp 文件中 输出是 1,1 volatile 在.C基本只是让编译器减少优化,这里是消除const,从而使变量 i可以被修改

LINUX 平台  

与 WINDOWS平台结果一致


    

1 0
原创粉丝点击