可能错误的空语句-在这种情况下编译器是错误的

本文关键字:错误 这种情况下 编译器 空语句 | 更新日期: 2023-09-27 17:51:02

我觉得问这个问题很愚蠢,但是我如何指示编译器这不是一个错误?我真的打算在我的if语句中有一个"空"分支,最后有一个明确的else捕获坏值。

我当然可以围绕这个重构整个if,但结果会不太清楚,并且围绕一个愚蠢的编译器警告工作似乎很奇怪。此外,我更希望我不需要禁用整个警告,只是为了这个特定的语句。

可能错误的空语句-在这种情况下编译器是错误的

#pragma warning disable xxxx
if (condition)
{
  // north of the wall, nada, nothing
}
else
{
  // code
}
#pragma warning restore xxxx

为什么不在if条件前面放一个bang,这样就可以完全避免使用else ?

if(!condition){
  //just work here
}

编辑:根据问题作者评论(其多个条件)更新答案

if(condition1){
  // code here
}
else if(condition2){
  // code here
}
else if(!condition3){
  //error case here
}

嗯,我知道这是愚蠢的,只是使用一个空块摆脱它:

if(condition1)
  // code here
else if(condition2)
  // code here
else if(condition3)
{
    //nothing to do
}
else
  // error case here

如果你把

;

((Action)(() => { }))();

,警告应该消失。

(缺点:这可能需要时间在运行时执行,是一种浪费。如果是这样,它应该只用于跟踪(如果它可以用于跟踪),并且应该在发货前删除或替换。

from: Simple c# Noop Statement

为了抑制编译器警告,VS2010有编译器选项和#pragma选项。编译器选项影响整个程序。#pragma选项可以影响整个程序。#pragma选项还可以在本地在目标代码之前关闭特定的警告,然后在目标代码之后再打开警告。#pragma warning disable 0642将隐藏这个警告。#pragma warning restore 0642将恢复它。这太丑了。我见过的其他ide允许单行覆盖警告(在挑衅代码之后的注释中的特定文本),但VS2010似乎没有这样做。(我可能错了。有人知道吗?)

唯一的解决办法比你的"问题"更糟糕。本地的#pragma指令会让你的代码变得更丑,但会移除警告。最终,你最好按照聪明人的建议去做。(他们有时会错失良机。)随心所欲并不一定是胜利。你必须承认这种可能性,才能得到关于如何做到这一点的答案,而不管这是否是一种改进。

基本上这个问题是关于PREFERENCE的。你应该从一开始就说出来,通过(用代码)显示你在说什么,而不是通过让他们猜测一遍又一遍来滥用有用的人。

编译器警告你可能不应该这样写:

if (expression)
    ;  // Do nothing, because blah blah blah.
else
{
    code that;
    does something;
}

,而是选择

中的一个:
if (expression)
{
   // Do nothing, because blah blah blah.
}
else
{
    code that;
    does something;
}

if (expression)
{ }  // Do nothing, because blah blah blah.
else
{
    code that;
    does something;
}

你没有"特别提到这个"(别人重写了你从未提供的代码)"作为一种可能的解决方案……"此外,您没有说您是否拒绝Riad将;更改为{ ... }或其周围的#pragmas(顺便说一下,只有在您不将;更改为{ ... }时才有必要)。

这些变化绝不等于"围绕[删除]这个[警告]重构整个if[语句]"。(即if (!expression) { code that; does something; })

这些变化绝不比原来的"不清晰"。

我不介意知道一个不难看的重写。我可能想写这样的东西,因为我想省略所有那些愚蠢的围绕在空行上的大括号,这些大括号会使这样的部分的高度增加一倍:

if (condition1)
  action1;
else if (condition2)
  ;  // (do nothing)
else if (condition3)
  action3;
else if (condition4)
  ;  // (do nothing)
else if (condition5)
  action5;
else
  action99;

显然,我必须使用一个更难看的选项来避免那些恼人的"可能错误的空语句"警告。