[英]Passing Type to C macros
我正在嘗試在C宏中傳遞類型,但是我遇到了錯誤。
#include <stdio.h>)
int size = 0;
#define SIZEOF(TYPE) \
TYPE _array_[2]; \
size = (char*)(&_array_[1]) - (char*)(&_array_[0]);
int main(int argc, char** argv, char** envp) {
int array[2];
int x = SIZEOF(int);
printf("Size Of Integer = %d", SIZEOF(int));
return 0;
}
宏擴展是文本替換。 您的代碼擴展為:
int x = int _array_[2]; size = (char*)(&_array_[1]) - (char*)(&_array_[0]);
初始部分int x = int
是語法錯誤。
您可以通過編寫以下代碼來使代碼工作而無需更改宏:
SIZEOF(int);
printf("Size Of Integer = %d", size);
一種改進是將變量的名稱作為參數傳遞給宏,而不是使用全局變量。
嘗試這個:
#define SIZEOF(TYPE) \
({ \
TYPE _array_[2]; \
(char*)(&_array_[1]) - (char*)(&_array_[0]); \
})
...盡管它對表達式內的語句使用gcc特定的支持,所以我建議改為使用標准的sizeof
運算符。
如何實際使用:
printf("Size Of Integer = %d", (int)SIZEOF(int));
也就是說,它可以很好地替代sizeof
在編譯器上實際上允許在表達式內使用骯臟的語句。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.