#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.任何解释?
为了在运行时提高性能,是否有可能强制编译器使用编译器已知的迭代次数来完成这样的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代码做什么[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代码吗?如果是这样,它想要实现什么,为什么有人会像上面这样做?
为什么if块中的代码以任何方式执行?
switch(v)
{
case a:
break;
...
if(condition)
{
case f:
...
break;
case g:
...
break;
}
...
case z:
...
break;
default:
}
Run Code Online (Sandbox Code Playgroud) 我在Flex/Flashcom应用程序中遇到了一个奇怪的问题.如果客户端应用程序意外断开与服务器的连接,则后者不会调用application.onDisconnect处理函数.我应该看女巫的方向吗?谢谢.
更新我没有使用服务器组件,但我确实在Linux上托管这个东西.
我被告知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) 例如:我有一个由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条件和增量粘贴数千次是有用的,但是非常不切实际 - 所以我的问题是:
是否有一个工具(或我缺少的技术)为我做这个,但保持代码清晰,易于修改?
提前致谢!
我理解展开循环的概念,但是有人可以向我解释如何展开一个简单的循环吗?
如果您能向我展示一个循环,然后是该循环的展开版本,并解释正在发生的事情,那就太好了。
所以在我们大学,他们一直在咖啡杯上打印下面的代码:
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 …
我想使用一个字节变量i来执行256次代码.下面的行无限循环,是否有一个整洁的替代方案可行?
for (i = 0; i < 255; i++){
Run Code Online (Sandbox Code Playgroud)
希望不使用:
while(1)break; 声明 谢谢
我刚刚在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) 我读过为什么循环和 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) switch语句似乎完全没用.它能做的任何事情都可以通过if和else来完成.
他们甚至可能编译成相同的代码.
那么为什么要费心呢?
break交换机中的语句label:让我发疯,这种格式让我想起了goto.
这是针对objective-c,c,C++的.我不确定vb.net是否有switch语句,但即使它确实如此,我必须忘记因为我从来没有使用它.
c ×7
c++ ×7
loops ×3
for-loop ×2
apache-flex ×1
braces ×1
do-while ×1
duffs-device ×1
flash ×1
if-statement ×1
nested ×1
objective-c ×1
optimization ×1
php ×1
templates ×1
unroll ×1
visual-c++ ×1