c – C:C中的挥发性数组
发布时间:2020-12-16 03:08:26 所属栏目:百科 来源:网络整理
导读:在C中使用volatile关键字来防止编译器对变量执行某些优化,以及其他微妙的更改. 例如; volatile int my_int = 0; 创建一个整数.在某些情况下,可能会阻止以下优化: while(my_int == 0); // Loop until my_int != 0 优化到: while(1); // Loop infinity. 这对
在C中使用volatile关键字来防止编译器对变量执行某些优化,以及其他微妙的更改.
例如; volatile int my_int = 0; 创建一个整数.在某些情况下,可能会阻止以下优化: while(my_int == 0); // Loop until my_int != 0 优化到: while(1); // Loop infinity. 这对于包括嵌入式系统中经常遇到的情况非常有用,例如可以通过中断函数调用对变量进行修改的情况.还有很多其他的例子,这个技术是有用的. my_int可能是由这样的功能修改的标志. (这只是玩具模型.) 但是,考虑由函数修改的数据是数组的情况.数据可以由指针指向. unsigned char* my_data = new unsigned char[256]; 在这种情况下,考虑到my_data是这个问题的具体情况下的全局变量[1],volatile关键字是多余的还是还需要? [1]可能没关系. 如果答案是volatile关键字是必需的,使用正确的语法是什么? 例如,volatile unsigned char * my_data,我假定声明本身是volatile,而不是它指向的数据. 最后,C和C之间的区别呢? 解决方法
是的,挥发性是必需的,正确的声明是:
volatile unsigned char *my_data; 这将my_data声明为指向volatile unsigned char的指针. 为了使指针本身不稳定,您需要改为: unsigned char *volatile my_data; 当然,指针和指向数据都可能是波动的: volatile unsigned char *volatile my_data; C和C之间没有区别. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- ruby-on-rails – 如何处理RestClient :: ServerBrokeConne
- DirectX中的多重纹理相关技术
- AW 中控制FLASH 部分函数的用法
- ruby-on-rails – 使用Rspec测试中间件
- ruby – Set中的yield以消除数组
- ruby-on-rails – Rails:Carrierwave重新创建的版本不会改
- The reference to entity "locale" must end wi
- 如何使用“RAISE INFO,RAISE LOG,RAISE DEBUG”来跟踪Postg
- flex中的事件机制
- C++2.0新特性(一)——<特性认知、__cplusplus宏开启、Varia