编译器警告(等级 3)C4197
“type”:忽略强制转换中的顶级 volatile
编译器检测到向具有 volatile 限定的 r-value 类型的强制转换,或检测到 r-value 类型到具有 volatile 限定的某些类型的强制转换。 根据 C 标准 (6.5.3),与限定类型关联的属性仅对 l-value 表达式有意义。
下面的示例生成 C4197:
// C4197.cpp
// compile with: /W3
#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
void sigproc(int);
struct S
{
int i;
} s;
int main()
{
signal(SIGINT, sigproc);
s.i = 1;
S *pS = &s;
for ( ; (volatile int)pS->i ; ) // C4197
break;
// for ( ; *(volatile int *)&pS->i ; ) // OK
// break;
}
void sigproc(int) // ctrl-C
{
signal(SIGINT, sigproc);
s.i = 0;
}