请参考以下示例:
{
int x;
(void)x; // silence the "unused" warning
...
}
如果由于未初始化读取x
会导致未定义的行为吗?如果是,那么这是否意味着在以下代码中,编译器必须发出内存读取指令(以读取指针所指向的内容)?
volatile char* p=getP();
(void)*p;
我对C和C ++的相关规则都感兴趣,以防它们不同。
int x;
如果它没有被使用。(在 C++ 中,如果要表示参数未使用,可以为参数定义一个无名称的函数 - 因此您不需要进行转换。) - Jonathan Lefflerx
在哪个作用域内被声明,否则问题无法回答。我假设是局部作用域? - Lundinx
是自动的。 - Ruslanvolatile const
变量,你想要为它们在某个内存位置保留空间,以备将来使用。即使程序尚未使用这些变量。在某处将它们转换为void
类型通常可以触发变量被链接而不是仅仅被优化掉。 - Lundin(void)*(volatile int *)address
(或其等效物)来获取并丢弃寄存器,这本身可能会产生一些影响,例如清除标志(状态/中断 - 获取中断状态/挂起寄存器可以防止它立即重新发生,您可以针对各种错误进行中断,以此方式忽略特定类型并重新设置状态)。 (我个人更喜欢使用返回寄存器值的方法-调用它但忽略结果。) - firda