如何使用 VA ARGS

2021-07-30 00:08:34 字數 1135 閱讀 9454

**

1.#

假如希望在字串中包含巨集引數,ansi c允許這樣作,在類函式巨集的替換部分,#符號用作乙個預處理運算子,它可以把語言符號轉化程字串。例如,如果x是乙個巨集參量,那麼#x可以把引數名轉化成相應的字串。該過程稱為字串化(stringizing).

#incldue

#define psqr(x) printf("the square of" #x "is %d./n",(x)*(x))

int main(void)

輸出結果:

the square of y is 16.

the square of 2+4 is 36.

第一次呼叫巨集時使用「y」代替#x;第二次呼叫時用「2+4"代#x。

2.##

##運算子可以使用類函式巨集的替換部分。另外,##還可以用於類物件巨集的替換部分。這個運算子把兩個語言符號組合成單個語言符號。例如:

#define xname(n) x##n

這樣巨集呼叫:

xname(4)

展開後:

x4程式:

#include

#define xname(n) x##n

#define pxn(n) printf("x"#n" = %d/n",x##n)

int main(void)

3.可變巨集 ...和_ _va_args_ _

__va_args__:總體來說就是將左邊巨集中 ... 的內容原樣抄寫在右邊 __va_args__ 所在的位置

實現思想就是巨集定義中引數列表的最後乙個引數為省略號(也就是三個點)。這樣預定義巨集_ _va_args_ _就可以被用在替換部分中,以表示省略號代表什麼。比如:

#define pr(...) printf(_ _va_args_ _)

pr("hello");-->printf("hello");

pr("weight = %d, shipping = $.2f",wt,sp);

-->printf("weight = %d, shipping = $.2f",wt,sp);

省略號只能代替最後面的巨集引數。

#define w(x,...,y)錯誤!

如何使用 VA ARGS

原文 1.假如希望在字串中包含巨集引數,ansi c允許這樣作,在類函式巨集的替換部分,符號用作乙個預處理運算子,它可以把語言符號轉化程字串。例如,如果x是乙個巨集參量,那麼 x可以把引數名轉化成相應的字串。該過程稱為字串化 stringizing incldue define psqr x pri...

可變引數 VA ARGS 使用和va

1.用來把引數轉換成字串 define p a printf s d n a,a define square x printf the square of x is d.n x x 2.運算子可以用於巨集函式的替換部分。這個運算子把兩個語言符號組合成單個語言符號 3.va args 是乙個可變引數的...

keil中使用 變引數巨集 VA ARGS

本文說的 va args 就是乙個可變引數巨集,與printf中可變引數的巨集定義乙個道理,是新c99規範中增加的。va args 詳情內容 va args 它是乙個可變引數的巨集,就是將左邊巨集中 的內容原樣抄寫在右邊 va args 所在的位置。要注意的是,printf 的輸出格式是括號內左邊是...