C (四)define 可變引數巨集

2021-06-26 04:54:53 字數 1140 閱讀 5909

今日看到一行我沒見過的**:

[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 了。如果預設號之前有逗號,就要寫成下面的...