相关疑难解决方法(0)

编译器是否允许消除无限循环?

可以优化编译器删除无限循环,这不会改变任何数据,如

while(1) 
  /* noop */;
Run Code Online (Sandbox Code Playgroud)

从分析编译器可以推导出的数据流图,这样的循环是"死代码"而没有任何副作用.

是否删除了C90/C99标准禁止的无限循环?

C90或C99标准是否允许编译器删除此类循环?

更新:"Microsoft C版本6.0基本上做了这个优化.",请参阅caf的链接.

label: goto label;
return 0;
Run Code Online (Sandbox Code Playgroud)

将转变为

return 0;
Run Code Online (Sandbox Code Playgroud)

c compiler-construction optimization standards infinite-loop

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

此预处理器指令C/C++需要说明

我试图在一些测试中解决这个问题,但后来当我在家里运行时,它给出了意想不到的答案.我无法理解这段代码:

#include <stdio.h>
#include <conio.h>
#define swap(a,b) temp=a; a=b; b=temp;
int main()
{
int i, j, temp;
i=5;
j=10;
temp=0;
if( i > j) //evaluates to false
swap( i, j );
printf( "%d %d %d", i, j, temp); //expected output: 5 10 0
getch();
return 0;
}
Run Code Online (Sandbox Code Playgroud)

我得到的输出是:10 0 0

请有人解释它是如何工作的.

c c++

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

设置了指针参数,但从未使用过警告

我有以下功能:

void foo(char *ptr_1)
{
    char *ptr_2;

    bar(ptr_2);

    ptr_1 = ptr_2;
}
Run Code Online (Sandbox Code Playgroud)

并得到以下警告:

参数“ ptr_1”已设置但从未使用过

我了解该警告在技术上是正确的,但同时无关紧要。我可以用以下方法抑制它:

(void)(ptr_1)
Run Code Online (Sandbox Code Playgroud)

但是有更好的方法吗?

c pointers compiler-warnings suppress-warnings keil

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