sha*_*oth 11 c++ compiler-warnings visual-c++
有C4172的Visual C++为当函数返回一个局部性或暂时或局部变量的引用的地址的情况下报警.
像这样的东西:
int& fun()
{
int var;
return var; //C4172
}
Run Code Online (Sandbox Code Playgroud)
现在看来,使用#pragma warningVisual C++将C4172视为错误并中断编译是个好主意.
是否有任何理智的情况C4172实际上不是一个错误?
我不确定为什么有人会这样做:
int * stackTester()
{
int dummy;
return &dummy;
}
bool stackGoesUp()
{
int dummy;
return stackTester() > &dummy;
}
Run Code Online (Sandbox Code Playgroud)
但一般来说,您应该将警告视为错误.
这是 1 级警告,很难忽视。但是这里的编译器遵循语言标准,不禁止调用 UB。这是一个非常常见的错误,而且往往会以好的方式结束。只要您不进行任何函数调用,指向的堆栈位置就会保持稳定。
解决这个问题的最好方法是始终将警告转化为错误。使用 /WX 编译,IDE 中的“将警告视为错误”设置。如果您然后故意想要抑制警告,那么#pragma warning 会向每个人清楚表明正在发生的可疑事件是经过深思熟虑的,而不是意外事件。
| 归档时间: |
|
| 查看次数: |
1002 次 |
| 最近记录: |