-4
#include<stdio.h>
#define max(a) ((++a)*(++a)*(++a))
main(){
int a=5;
printf("%d\n",max(a));
printf("%d",a); }
這應該返回6 * 7 * 8但它返回7 * 7 * 8爲什麼?無法理解inc/dec操作符在c語言宏中的行爲
#include<stdio.h>
#define max(a) ((++a)*(++a)*(++a))
main(){
int a=5;
printf("%d\n",max(a));
printf("%d",a); }
這應該返回6 * 7 * 8但它返回7 * 7 * 8爲什麼?無法理解inc/dec操作符在c語言宏中的行爲
標準說如果您在序列點之間多次修改變量,您會得到未定義的行爲。這就是你所做的,所以這就是你得到的。
需要注意的是:
1)您有關於(++a)*(++a)*(++a)
評估的順序沒有承諾,除了操作(乘)被它的參數計算後進行(++ a)所示。
2)您明確不允許在序列點之間多次修改相同的變量。
[未定義的行爲](http://en.wikipedia.org/wiki/Undefined_behavior)由於缺乏[sequence point](http://en.wikipedia.org/wiki/Sequence_point)。 –
這不是一個真正的宏觀問題。這是生成的代碼的一個問題,如果直接輸入它將會是假的。 – RichardPlunkett