gpt4 book ai didi

c - 使用 icc 时输出不稳定

转载 作者:太空宇宙 更新时间:2023-11-04 00:08:47 26 4
gpt4 key购买 nike

我想报告一个有趣的错误。下面的这段代码应该打印出 20 次“1.0”。相反,在我的 mac(雪豹 10.6.8)上使用 icc(11.1)编译时,我得到不稳定的值(16 次“0.0”然后 4 次“1.0”)。我在代码中使用了几个特性,但它们似乎没有一个语法错误(编译期间没有错误,并且 valgrind 在运行期间报告没有错误)。但是,如果我更改任何内容(甚至是未使用的函数——这就是为什么我觉得它很奇怪),我会得到正确的输出。使用 gcc 编译也能给出正确的输出。

但我认为最奇怪的是,如果我删除函数“function1”,错误就会消失,尽管代码中没有使用该函数。

这真的很奇怪,现在我担心我的代码(比那大得多)会不稳定。我需要你的帮助,我真的很困惑。语法有问题吗?

主.c:

#include "main.h"

int main(argc,argv)
int argc;
char **argv;
{

Config para;
para.option1 = ONE;

para.a[0] = 0.0;
para.a[1] = 0.0;
para.a[2] = 0.0;
para.a[3] = 1.0;

int i;
double *x = (double *)malloc(20*sizeof(double));
for(i=0;i<20;i++) x[i] = 1.0;
for(i=0;i<20;i++) printf("%f \n", x[i]);
free(x);

function2(para);

return EXIT_SUCCESS;
}

void function1(int option){

switch(option){
case ONE: case TWO: case THREE: case MONE:
printf("MONE to THREE\n");
break;
case FOUR:
printf("FOUR\n");
break;
}

return;
}

void function2(const Config para){

if(para.option1 == FOUR){
printf("FOUR\n");
}

return;
}

主要.h:

#include <string.h>
#include <stdio.h>
#include <stddef.h>
#include <math.h>
#include <stdlib.h>
#include <unistd.h>
#include <time.h>
#include <stdarg.h>

#define MONE -1
#define ONE 1
#define TWO 2
#define THREE 3
#define FOUR 4

typedef struct Config
{
int option1, option2;
double a[4];
} Config;

void function1(int option);
void function2(const Config para);

最佳答案

在网络上进行更多挖掘时,我发现了来自英特尔的错误报告:

http://software.intel.com/en-us/articles/intel-compiler-and-xcode-322-linker-runtime-crash-with-switch-statement/

这似乎与icc编译器如何优化case语句有关。他们解决问题的建议如下:

1) 使用 Xcode 3.2.1 和 11.1 编译器。

2) 在 Xcode 3.2.2、3.2.3、3.2.4 中使用带有选项 -use-asm 的 11.1 编译器。它应该修复大多数情况,但在某些情况下,即使通过外部汇编程序生成目标文件,L* 符号仍可能出现在目标文件中。这些情况通常是放置在 cstring 部分的常量字符串文字

3) 使用英特尔 Composer XE。

我的 Xcode 是 3.2.6 版本,但是解决方案 2) 解决了我的问题。然而,我仍然对此感到非常困惑(以及网络上缺乏文档)。

谢谢。

关于c - 使用 icc 时输出不稳定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11877044/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com