#include
#define sub(x,y) x-y
#define access_before(element,offset,value) *sub(&element, offset) =value
int main()
;access_before(array[5], 4 ,6);
for(i = 0; i < 10; ++i)
return 0;
}
access_before的巨集定義被預處理器替換成了:*&array[5] - 4 = 6;
*和&的優先順序都比減號高,所以,*&array[5]的結果是乙個數值,等號兩邊都是數值,所以會編譯錯誤,因為等號的左值必須為變數
因此這個程式編譯錯誤。
如若改成 sub(x,y) (x-y)
就可以實現功能
abs int 巨集定義 巨集定義和巨集方法
巨集定義和巨集方法 定義機型 define is iphone5 uiscreen instancesrespondtoselector selector currentmode cgsizeequaltosize cgsizemake 640,1136 uiscreen mainscreen cu...
巨集定義中 和 符號的使用和巨集定義展開問題
程式如下 include define f a,b a b define g a a define h a g a intmain 答案 第一行 12 第二行 f 1,2 說明 1 關於符號 和 兩個符號都只能用於預處理巨集擴充套件。不能在普通的原始碼中使用它們,只能在巨集定義中使用。簡單的說,是把...
巨集定義重複導致編譯問題
enum proxytype speech task,在另外乙個標頭檔案裡也有巨集定義!而這個檔案include了那個標頭檔案,speech task被替換為相應的常數,所以出了以上的錯誤提示。找了兩個小時,主要是很難想到是別的檔案 define 引起的衝突!videowidget m player...