当c,d定义为长整型(long)时,在TC下每个变量占4个字节正确输出时应用%ld格式(取4个字节)输出若用%d(TC下,取2个字节)时printf("c=x+a=%d,d=y+b=%d\n",c,d);c在内在中的低16位(对应值十进制12)传给了第一个%dc在内在中的高16位(值为0)传给了第二个%dd的值未用上所以出现了如你所说的情况.VC6下正确,是因为VC6下int与long同样占4个字节,%d与%ld一样取4个字节输出.