假設我們已經定義的宏SWAP 3個數字:排序使用宏[C]
#define SWAP(a,b) {\
int tmp = a; \
a = b; \
b = tmp;}\
,並使用SWAP我們需要3個數字排序(只寫它採用宏觀稱爲SWAP另一個宏):
#define SORT(a,b,c) \
(a > b) ? SWAP(a,b) : ((a > c) ? SWAP(a,c) : ((b>c) : SWAP(b,c)))
我這樣寫這個,但我的代碼只顯示一些錯誤:
#include <stdio.h>
#define SWAP(a,b) {\
int tmp = a; \
a = b; \
b = tmp;}\
#define SORT(a,b,c) \
(a > b) ? SWAP(a,b) : ((a > c) ? SWAP(a,c) : ((b>c) : SWAP(b,c)))
int main()
{
int a = 1024, b = 7, c = 11;
printf("a = %d b = %d\n", a, b);
SWAP(a,b)
printf("a = %d b = %d\n", a, b);
printf("a = %d b = %d c = %d\n", a, b);
SORT(a,b,c)
printf("a = %d b = %d c = %d\n", a, b);
return 0;
}
錯誤,我得到:
error: expected expression before ‘{’ token|
錯誤是什麼?錯誤來自特定的行。 – abelenky
使用-E選項進行編譯,該選項使用預處理器輸出寫入源 – suspectus
您不能在*中使用* blocks *(即括號括起的語句,例如'{int tmp = a; a = b; b = tmp;}') *表達式*(運算符和其他表達式的集合,它們被賦值爲一個值,比如'x?y:z',這只是C語言所不允許的,如果將三元運算符的使用轉換爲if/else '聲明,它應該可以正常工作,儘管我建議你不要用這樣的宏編寫排序函數。 –