相关疑难解决方法(0)

什么是更好的方法来避免do-while(0); hack in C++?

当代码流是这样的:

if(check())
{
  ...
  ...
  if(check())
  {
    ...
    ...
    if(check())
    {
      ...
      ...
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我一般都看到这个工作,以避免上面的凌乱的代码流:

do {
    if(!check()) break;
    ...
    ...
    if(!check()) break;
    ...
    ...
    if(!check()) break;
    ...
    ...
} while(0);
Run Code Online (Sandbox Code Playgroud)

有哪些更好的方法可以避免这种解决方案/黑客攻击,从而使其成为更高级别(行业级别)的代码?

任何开箱即用的建议都是受欢迎的!

c++ do-while

232
推荐指数
17
解决办法
2万
查看次数

反转"if"是否会提高性能?

我一直在使用ReSharper一段时间,有时它暗示我反转了if.我想一个例子可以更好地解释我的情况:

public void myfunction(int exampleParam){
    if(exampleParam > 0){
        //Do something with form controls for example.
    }
}
Run Code Online (Sandbox Code Playgroud)

现在ReSharper建议我将其反转if为:

public void myfunction(int exampleParam){
    if(exampleParam <= 0)
        return;
    //Do something with form controls for example
}
Run Code Online (Sandbox Code Playgroud)

这会以某种方式"改善"性能吗?还是仅仅是审美?

c# resharper if-statement

147
推荐指数
0
解决办法
7842
查看次数

如果使用else子句构造,则终止if有什么好处?

我们的组织有一个必要的编码规则(没有任何解释):

if ... else如果构造应该用else子句终止

例1:

if ( x < 0 )
{
   x = 0;
} /* else not needed */
Run Code Online (Sandbox Code Playgroud)

例2:

if ( x < 0 )
{
    x = 0;
}
else if ( y < 0 )
{
    x = 3;
}
else    /* this else clause is required, even if the */
{       /* programmer expects this will never be reached */
        /* no change in value of x */
}
Run Code Online (Sandbox Code Playgroud)

这个设计要处理的边缘情况是什么?

关于其原因的另一个问题是,示例1 …

c misra

133
推荐指数
8
解决办法
1万
查看次数

从C中的文件描述符获取文件名

是否有可能在C中获取文件描述符(Linux)的文件名?

c linux file file-descriptor

97
推荐指数
6
解决办法
10万
查看次数

在void方法中使用return是不好的做法吗?

想象一下以下代码:

void DoThis()
{
    if (!isValid) return;

    DoThat();
}

void DoThat() {
    Console.WriteLine("DoThat()");
}
Run Code Online (Sandbox Code Playgroud)

在void方法中使用return是否可以?它有任何性能损失吗?或者写一个这样的代码会更好:

void DoThis()
{
    if (isValid)
    {
        DoThat();
    }
}
Run Code Online (Sandbox Code Playgroud)

c# return void

81
推荐指数
6
解决办法
6万
查看次数

在JavaScript中使用'return'而不​​是'else'

我正在开发一个需要一些非常复杂的JavaScript处理的项目.这包括许多嵌套if- else在很多地方.通过阅读Stack Overflow上的其他技巧,我一般都会尽可能地优化JavaScript代码,但我想知道以下两个结构是否会对速度方面产生任何影响:

if(some_condition) {
    // process
    return ;
}

// Continue the else condition here
Run Code Online (Sandbox Code Playgroud)

VS

if(some_condition) {
    // Process
}

else {
   // The 'else' condition...
}
Run Code Online (Sandbox Code Playgroud)

javascript optimization if-statement

21
推荐指数
3
解决办法
4017
查看次数

是否比if语句更优雅的函数返回?

我和一位同事对以下哪一项更优雅存在争议.我不会说谁是谁,所以它是公正的.哪个更优雅?

public function set hitZone(target:DisplayObject):void
        {
            if(_hitZone != target)
            {
                _hitZone.removeEventListener(MouseEvent.ROLL_OVER, onBtOver);
                _hitZone.removeEventListener(MouseEvent.ROLL_OUT, onBtOut);
                _hitZone.removeEventListener(MouseEvent.MOUSE_DOWN, onBtDown);

                _hitZone = target;

                _hitZone.addEventListener(MouseEvent.ROLL_OVER, onBtOver, false, 0, true);
                _hitZone.addEventListener(MouseEvent.ROLL_OUT, onBtOut, false, 0, true);
                _hitZone.addEventListener(MouseEvent.MOUSE_DOWN, onBtDown, false, 0, true);
            }
        }
Run Code Online (Sandbox Code Playgroud)

...要么...

public function set hitZone(target:DisplayObject):void
        {
            if(_hitZone == target)return;

            _hitZone.removeEventListener(MouseEvent.ROLL_OVER, onBtOver);
            _hitZone.removeEventListener(MouseEvent.ROLL_OUT, onBtOut);
            _hitZone.removeEventListener(MouseEvent.MOUSE_DOWN, onBtDown);

            _hitZone = target;

            _hitZone.addEventListener(MouseEvent.ROLL_OVER, onBtOver, false, 0, true);
            _hitZone.addEventListener(MouseEvent.ROLL_OUT, onBtOut, false, 0, true);
            _hitZone.addEventListener(MouseEvent.MOUSE_DOWN, onBtDown, false, 0, true);

        }
Run Code Online (Sandbox Code Playgroud)

if-statement return

17
推荐指数
4
解决办法
8139
查看次数

为什么ReSharper为C#代码反转IF?它是否提供更好的性能(甚至略微)?

请考虑以下代码示例:

private void AddEnvelope(MailMessage mail)
{
    if (this.CopyEnvelope)
    {
        // Perform a few operations
    }
}
Run Code Online (Sandbox Code Playgroud)

VS

private void AddEnvelope(MailMessage mail)
{
    if (!this.CopyEnvelope) return;
    // Perform a few operations
}
Run Code Online (Sandbox Code Playgroud)

底部代码会执行得更快吗?为什么ReSharper会提出此建议?

更新

考虑过这个问题后,答案对某些人来说似乎是显而易见的.但是我们很多开发人员从来没有习惯于在一开始就嵌套if语句.

c#

14
推荐指数
3
解决办法
6462
查看次数

有没有理由在方法的第二行使用'return'?

我有这个代码,我们可以用两种方式编写

第一道路

void func(int val)
{
     if(val == 0)
          return;

     // Do something ...
}
Run Code Online (Sandbox Code Playgroud)

第二种方式

void func(int val)
{
     if(val != 0)
     {
          // Do something ...
     }          
}
Run Code Online (Sandbox Code Playgroud)

问题:

有没有理由使用第一种方式?是否有任何优势使用第一种方式(在C++或C#中)

c# c++

3
推荐指数
3
解决办法
277
查看次数

打破Sass mixin

是否有可能在Sass mixin的早期爆发/返回?我想做这样的事情:

@mixin foo($bar: false) {

  @if $bar {
    // return early without applying any of the styles below
  }

  color: red;
}
Run Code Online (Sandbox Code Playgroud)

编辑:请记住,这个例子是我能想到的最简单的事情,它说明了我的问题.在现实世界中,我的代码要复杂得多,而且用例很清楚.

sass mixins

2
推荐指数
1
解决办法
1636
查看次数

处理PHP中的大型IF语句

ifPHP中的简单语句有什么好的替代方法吗?我知道switch,但我猜想有一些更精致的替代方案,在处理真正重大的if陈述时会派上用场.

非常感谢,

php if-statement

1
推荐指数
2
解决办法
1675
查看次数

使用C#删除文件

我写了一个运动检测winform c#desktop app.

运动帧作为单独的jpeg保存到我的硬盘驱动器中.

我记录了4台摄像机.这由变量表示:

   camIndex
Run Code Online (Sandbox Code Playgroud)

每个jpeg都在一个文件结构下:

c:\ Year\The Month\The Day\The Hour\The Minute

确保目录中的每个文件都没有太多文件.

我的目的是让我的应用程序全天候运行.应用程序可能会因系统重启或用户选择暂时关闭它等原因而停止.

目前我有一个计时器而不是每5分钟运行一次,以删除超过24小时的文件.

我发现我的以下代码是内存密集型的,并且在几天的时间内,explorer.exe已经爬进RAM内存.

我的动作应用程序需要一直处于打开状态,因此低内存占用对于这种"归档"至关重要......

以下代码很长,在我看来非常低效.有没有更好的方法来实现我的目标?

我用这个代码:

List<string> catDirs = Directory.EnumerateDirectories(Shared.MOTION_DIRECTORY, "*", SearchOption.TopDirectoryOnly).ToList();
for (int index = 0; index < catDirs.Count; index++)
{
   for (int camIndex = 0; camIndex < 4; camIndex++)
   {
       if (Directory.Exists(catDirs[index] + "\\Catalogues\\" + camIndex.ToString()))
       {
           List<string> years = GetDirectoryList(catDirs[index] + "\\Catalogues\\" + camIndex.ToString(), true);
           if (years.Count == 0)
           {
                Directory.Delete(catDirs[index]);
            }
            for (int yearIndex = 0; yearIndex < years.Count; yearIndex++)
            {
                DirectoryInfo …
Run Code Online (Sandbox Code Playgroud)

c# file-io

-4
推荐指数
1
解决办法
294
查看次数