本帖最后由 imur2008 于 2011-11-24 01:09:45 编辑

解决方案 »

  1.   

    printf("%d\n",S((i,j))); 这样试试
      

  2.   

    楼主的写法 i,j  参与替换的话宏的实参太多,截断(?)了,6参与运算了,就是 4*6*6+1
    1楼的写法就是 (i,j) 参与替换, (i,j)这样赋值的话值是算最后一个运算式,那就是j=8,8参与运算,4*8*8+1
      

  3.   

    #define S(X) 4 * (X) * (X) + 1
      

  4.   

    #define 宏就是严格替换不会做其他事情的 换个别的表达式你就懂了
    如果算的是 S(i+j), 那结果就是 4*i+j*i+j+1 ,替换的时候不会自动给你加上括号的
    S((i+j)) 的结果才是  4*(i+j)*(i+j)+1
    这一般都是卷面上才会出现的奇葩问题