巨集定義問題

2022-01-16 19:45:50 字數 433 閱讀 6228

#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...