ano*_*nol 3 c volatile undefined-behavior
在C中,我可以访问自动volatile变量而不必先进行初始化,还是总是导致未定义的行为?
例如,在映射到volatile变量的一些硬件设备中,初始化变量无论如何都没有意义,甚至可能被禁止.
自动变量通常在调用堆栈上(但这是特定于实现的),因此它通常不会是某些特定于硬件的"设备"(除非您的堆栈指针是垃圾).在这种情况下(在堆栈上),变量继承自该堆栈位置的先前内容.如果它是易变的,例如,像
void foo(void) {
volatile int x;
// here x contains garbage
}
Run Code Online (Sandbox Code Playgroud)
访问它x会产生一些"不确定的值",并且该访问是一种未定义的行为.
C标准不需要任何调用堆栈,但大多数C实现使用机器调用堆栈.
当然,如果你有一个自动变量,它是一个指向一些易失数据的指针,情况会有所不同.
| 归档时间: |
|
| 查看次数: |
462 次 |
| 最近记录: |