相关疑难解决方法(0)

开关盒在嵌套时做

#include<stdio.h>
int main()
{
    int n=0, i=2;
    switch(1)
    {
    case 0:do
           {
    case 1: n++;
    case 2: n++;
           }while(--i > 0);
    }
    printf("n = %d",n);
}
Run Code Online (Sandbox Code Playgroud)

我期望上面代码的输出为0,因为情况1和情况2都在do内,而在case 0中.Twitch正在测试值1,所以case 0将永远不会被执行,因此情况1或2都没有.

n的值将是4.任何解释?

c nested switch-statement do-while

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

强制编译器推出for循环的可能性

为了在运行时提高性能,是否有可能强制编译器使用编译器已知的迭代次数来完成这样的for循环?
这样的代码.

template <int dim>
void foo()
{
   ...
   int temp[i];
   for(int i=0; i<dim; i++)
   {
      temp[i] = ...;
      ...
   }
   ...
}
Run Code Online (Sandbox Code Playgroud)

是按照原样建造的

template <int dim>
void foo()
{
   ...
   int temp[i];

      temp[0] = ...;
      temp[1] = ...;
      temp[2] = ...;
      (...)
      temp[dim-1] = ...;
      ...
   }
   ...
}
Run Code Online (Sandbox Code Playgroud)

c++ templates for-loop visual-c++

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

以上是有效的C代码吗?如果是这样,它想要实现什么,为什么有人会像上面这样做?

可能的重复:
这个C代码做什么[Duff的设备]?
Duff的设备如何工作?

void duff(register char *to, register char *from, register int count)
{ 
     register int n=(count+7)/8;
     switch(count%8)
     {
          case 0:
          do{ 
              *to++ = *from++;

              case 7: *to++ = *from++;
              case 6: *to++ = *from++;
              case 5: *to++ = *from++;
              case 4: *to++ = *from++;
              case 3: *to++ = *from++;
              case 2: *to++ = *from++;
              case 1: *to++ = *from++;
      }while( --n >0);
     }
}
Run Code Online (Sandbox Code Playgroud)

以上是有效的C代码吗?如果是这样,它想要实现什么,为什么有人会像上面这样做?

c

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

控制switch语句中的结构

为什么if块中的代码以任何方式执行?

switch(v)
{
case a:
    break;
...
if(condition)
{
    case f:
        ...
        break;
    case g:
        ...
        break;
}
...
case z:
    ...
    break;
default:
}
Run Code Online (Sandbox Code Playgroud)

c++ switch-statement

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

为什么Flash Media Server不调用application.onDisconnect处理程序?

我在Flex/Flashcom应用程序中遇到了一个奇怪的问题.如果客户端应用程序意外断开与服务器的连接,则后者不会调用application.onDisconnect处理函数.我应该看女巫的方向吗?谢谢.

更新我没有使用服务器组件,但我确实在Linux上托管这个东西.

apache-flex flash flash-media-server

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

PHP中的Duff设备不可能吗?

我被告知duff设备不适用于PHP,因为交换机和案例结构的工作方式不同.我在php.net上发现这个duff devive,我的问题是这个设备有什么问题?或者我不明白duff设备?在我的汇编程序中,我可以使用简单的命令展开循环,当它编译时,我得到一个展开的循环.

<?php
$n = $ITERATIONS % 8;
while ($n--) $val++;
$n = (int)($ITERATIONS / 8);
while ($n--) {
   $val++;
   $val++;
   $val++;
   $val++;
   $val++;
   $val++;
   $val++;
   $val++;
}
?>
Run Code Online (Sandbox Code Playgroud)

php micro-optimization duffs-device

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

是否有一个工具/解决方案来编程一个循环,其中只在每次X迭代检查条件?

例如:我有一个由while循环组成的函数(这个函数会检查质数)

function isprime(int number){
int i=2;
int max= (int) sqrt(number)+1;
   while(i<max){
       if(number%i==0){
          return 0;
       }
       i++;
   }
return 1;
}
Run Code Online (Sandbox Code Playgroud)

我知道这将是一个非常差的测试质数的算法,但我的问题更多地集中在循环上.目前,该函数的第四个操作是"只是"检查条件.对于更大的数字,这可能是非常多的.

(快速示例1:如果"number"是1009,那将检查while条件30次,索引30次操作,if条件检查29*2次.这是118次操作)

我意识到我可以在while条件下剪切和粘贴并使索引通过最大值,同时导致额外的操作,不会伪造返回值.所以,如果我切断从"if ..."到"i ++"的所有内容 并粘贴三(或n)次,检查while条件只占用操作的1/10(或1 /(1 + 3n),同时创建最大+ 2*3(或+(n-1) )*3)不必要的操作.

(快速示例2:如果"number"为1009,则表示检查while条件11次,索引运算33次,if条件运行33*2次.这是100次操作,少了13次)

因为我正在尝试非常大的数字(用非专业术语来说:"条件将在非常非常非常长的时间内是假的")所以将if条件和增量粘贴数千次是有用的,但是非常不切实际 - 所以我的问题是:

是否有一个工具(或我缺少的技术)为我做这个,但保持代码清晰,易于修改?

提前致谢!

c c++ optimization loops

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

展开循环 (C)

我理解展开循环的概念,但是有人可以向我解释如何展开一个简单的循环吗?

如果您能向我展示一个循环,然后是该循环的展开版本,并解释正在发生的事情,那就太好了。

c loops performance-testing unroll

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

在大学里混淆和过于复杂的代码示例

所以在我们大学,他们一直在咖啡杯上打印下面的代码:

void f(char *x, char*y, int z)
{
    int z2 = (z + 7) / 8;
    switch (z % 8)
    {
        case 0:
        do 
        {
            *x++ = *y++;
        case 7:
            *x++ = *y++;
        case 6:
            *x++ = *y++;
        case 5:
            *x++ = *y++;
        case 4:
            *x++ = *y++;
        case 3:
            *x++ = *y++;
        case 2:
            *x++ = *y++;
        case 1:
            *x++ = *y++;
            } while (--z2 > 0);
    }
}
Run Code Online (Sandbox Code Playgroud)

运行它,我发现它只是z将指向的地址中的字节复制y到指向的地址x.在我看来,好像代码只是不必要的复杂和丑陋,switch声明,特别是混乱的do …

c c++

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

有效地重写循环,C

我想使用一个字节变量i来执行256次代码.下面的行无限循环,是否有一个整洁的替代方案可行?

for (i = 0; i < 255; i++){
Run Code Online (Sandbox Code Playgroud)

希望不使用:

  • 一个16位变量,(或任何额外的位)
  • 嵌套循环
  • while(1)
  • break; 声明

谢谢

c for-loop infinite-loop

0
推荐指数
2
解决办法
412
查看次数

什么时候可以在开关循环中省略"中断"?

我刚刚在learncpp上解决了第一次练习,第7.8章.我测试了他们的开关循环版本并且它可以工作,但我不知道它没有break,在这种情况下这样的代码不应该导致不良行为吗?我break什么时候可以遗漏?

这是我的版本(也正常工作):

switch (op)
    {
    case '+': {
        return add;
            break;}
    case '-': {
        return subtract;
        break;}
    case '*': {
        return multiply;
        break;}
    case '/': {
        return divide;
        break;}
    default: ;
    }
Run Code Online (Sandbox Code Playgroud)

c++

0
推荐指数
2
解决办法
157
查看次数

C++ 循环内的单行 If-Else

我读过为什么循环和 if 语句不需要括号,但我没有足够的声誉点来回答后续问题。

我知道这是不好的做法,但我一直面临着尽量减少使用的代码行的挑战。

您可以在任何版本的 C++ 中执行此操作吗?

a_loop()
    if ( condition ) statement else statement
Run Code Online (Sandbox Code Playgroud)

即 if/else 块算作一个“语句”吗?

同样,if/else if.../else 算作一个“语句”吗?尽管这样做会变得完全不可读。

我上面提到的帖子只说了这样的话:

a_loop()
    if(condition_1) statement_a; // is allowed.
Run Code Online (Sandbox Code Playgroud)

c++ loops braces conditional-statements

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

有没有理由使用switch语句而不是if和elseif的字符串?

可能重复:
切换if-else语句的优点
为什么switch语句而不是if-else?

switch语句似乎完全没用.它能做的任何事情都可以通过if和else来完成.

他们甚至可能编译成相同的代码.

那么为什么要费心呢?

break交换机中的语句label:让我发疯,这种格式让我想起了goto.

这是针对objective-c,c,C++的.我不确定vb.net是否有switch语句,但即使它确实如此,我必须忘记因为我从来没有使用它.

c c++ if-statement objective-c switch-statement

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