Tag: 不稳定

赋值表达式和volatile

我似乎对volatiles有一个合理的理解,但是有一个看似模糊的情况,我不确定按照标准应该如何工作。 我已经阅读了C99的相关部分以及关于SO的十几个或更多相关post,但是在这种情况下找不到逻辑或者解释这个案例的地方。 假设我们有这段代码: int a, c; volatile int b; a = b = 1; c = b += 1; /* or equivalently c = ++b; */ 应该像这样评估: b = 1; a = b; // volatile is read 或者像这样: b = 1; a = 1; // volatile isn’t read ? 同样,应该像这样评估: int tmp = b; tmp++; […]

C中const&volatile限定符的用法明显区别?

我已经经历了问题的答案@C中的const和volatile指针之间有什么区别? 我理解的解释是: const修饰符意味着此代码不能更改变量的值,但这并不意味着无法通过此代码之外的方式更改该值。 但是,volatile表示“此数据可能会被其他人更改”,因此编译器不会对该数据做出任何假设。 这意味着外部事件可以改变这两种类型的变量。 但是,那么const和volatile的使用差异在哪里? 在C中,编译器优化是否适用于const?

什么是extern volatile指针

什么是extern volatile指针。 extern volatile uint32 *ptr; 在这里,* ptr的行为是什么? 这究竟意味着什么? 而且,什么时候应该使用? 我曾试图谷歌,但没有得到任何满意的答案,关于这个组合的信息不多。

易变量

哪个是存储在程序存储器中的易失性变量(在哪个部分)?

volatile变量作为函数的参数

有这个代码: typedef volatile int COUNT; COUNT functionOne( COUNT *number ); int functionTwo( int *number ); 我无法摆脱一些警告.. 我在functionOne原型上得到了这个警告1 函数返回类型时忽略[警告]类型限定符 我得到这个警告2,无论我用一个COUNT 指针参数而不是一个int指针调用functionTwo [警告]从指针目标类型中抛弃限定符 显然变量/指针不能“强制转换”为volatile / un-volatile ..但是每个参数都必须指定为volatile吗? 那么如果已经为非易失性变量定义了库函数怎么用呢? 编辑 :使用gcc -std=c99 -pedantic -Wall -Wshadow -Wpointer-arith -Wcast-qual -Wextra -Wstrict-prototypes -Wmissing-prototypes … 编辑 :在Jukka Suomela建议之后,这是警告二的代码示例 typedef volatile int COUNT; static int functionTwo(int *number) { return *number + 1; } […]