今日看到一行我沒見過的**:
[cpp]view plain
copy
#define offset(what) \
printf(#what" %d\n"
,int
(&ptr->what));
解讀:這個巨集[cpp]view plain
copy
#define offset(what) printf(#what" %d\n",int(&ptr->what));
和一般的巨集格式一樣,都是 #define xx oo 的格式
不過這個是可變引數巨集,c99編譯器新添的特性
what是乙個引數,編譯器每遇到offset(what),都會用printf()來代替,printf裡面的what會被加雙引號變成"what"
#號用法:
傳進來的引數,變成字串,加雙引號
也就是:
[cpp]view plain
copy
printf(
"what"
" %d\n"
,int
(&ptr->what));
因為c++支援多個字串串成乙個字串
[cpp]view plain
copy
printf(
"what %d\n"
,int
(&ptr->what));
舉個例子:
[cpp]view plain
copy
#include
#include "stdio.h"
using
namespace
std;
#define say_love_you(what)\
printf(#what" i love you\n"
);
intmain()
總結:
(一)利用可變引數巨集,方便程式設計
(二)方便閱讀程式
C可變引數 printf(巨集處理可變引數)
x86平台下的巨集定義 typedef char va list 記憶體對齊 與sizeof int 對齊 0 sizeof n 4,intsizeof n 4 4 sizeof n 8,intsizeof n 8 define intsizeof n sizeof n sizeof int 1 s...
C語言可變引數巨集
歲月不饒人,這年紀大了記憶力真是差了很多。今天寫程式需要用到可變引數的巨集,可是忘了怎麼寫,這倒也沒什麼,因為我一向是不記憶這些語法細節的,反正我知道程式裡有個地方用到了這種技巧,但是可悲的是我忘了在哪個地方。搜尋?語法都忘了蒐個p呀。只好憑著印象,在自己負責的模組 中找了一圈,花了十幾分鐘才終於在...
C 可變引數的巨集
可變引數的巨集 1.可變引數的巨集是c99規範開始支援的,具體用法如下 define debug printf va args 預設號代表乙個可以變化的參數列。使用保留名 va args 把引數傳遞給巨集。當巨集的呼叫展開時,實際的引數就傳遞給 printf 了。如果預設號之前有逗號,就要寫成下面的...