L
O
A
D
I
N
G

gcc编译器可能存在的bug


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

输出

大家可以一起研究研究。


文章作者: 叁月柒
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 叁月柒 !
评论
  目录