GCC编译器可能存在的bug
上周在给我的SysY编译器debug时,发现一个程序通过gcc编译器运行出来的结果总比我的编译器运行结果大1,后来经过测试发现应该是gcc自身的问题,因为参数完全一样的两次函数调用,gcc运行的结果会因为printf函数中参数的个数而不同,具体的测试点和输入输出如下:
测试点
//testfile
#include <stdio.h>
int a[3][3] = {};
int b[3][3] = {4, 5, 6, 7, 8, 9, 1, 2, 3};
int getint()
{
int a;
scanf("%d", &a);
return a;
}
int scanD()
{
int a;
a = getint();
return a;
}
int sum(int a, int b, int c[][3], int d[][3], int e, int f, int g, int h, int i, int array[][3])
{
if (a > 3)
{
return a;
}
else
{
return sum(b + 1, a, array, c, g, h, i, e, f, d) + a + b + c[0][1] + d[2][2] + e + f + g + h + i + array[0][2];
}
return 0;
}
int main()
{
int i = 0;
for (;i <= 100; i = i + 1)
{
int array[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
if (i % 10 == 0)
{
if (i % 20 == 0)
{
//printf("%d\n", i);
}
else
{
int d = sum(1, i, array, a, scanD(), 6, 7, 8, 9, array) + sum(i, 2, b, a, 5, scanD(), 7, 8, 9, b);
printf("sum(1, i, array, a, scanD(), 6, 7, 8, 9, array) + sum(i, 2, b, a, 5, scanD(), 7, 8, 9, b) = %d\n", d);
printf("sum(1, i, array, a, scanD(), 6, 7, 8, 9, array) + sum(i, 2, b, a, 5, scanD(), 7, 8, 9, b) = %d\nsum(i, 2, a, b, 5, scanD(), 7, 8, 9, array) * sum(1, i, array, array, 5, 6, 7, 8, 9, b) = %d\n", sum(1, i, array, a, scanD(), 6, 7, 8, 9, array) + sum(i, 2, b, a, 5, scanD(), 7, 8, 9, b), sum(i, 2, a, b, 5, scanD(), 7, 8, 9, array) * sum(1, i, array, array, 5, 6, 7, 8, 9, b));
}
}
}
return 0;
}
输入
1
2
1
2
3
输出
大家可以一起研究研究。