#:字串化
##:字元連線
巨集展開有順序,且只展開一次
#define conn(x,y) x##y
#define tochar(x) #@x
#define tostring(x) #x
x##y表示x連線y
int n = conn(123,456);
結果就是n=123456;
char* str = conn("asdf", "adf");
結果就是 str = 「asdfadf」;
#@x
給x加上單引號,結果返回是乙個const char。舉例說:
char a = tochar(1);
結果就是a=『1』;
#x
給x加雙引號
char* str = tostring(123132);
就成了str=「123132」;
##__va_args__巨集,即可變引數的…
##__va_args__ 巨集前面加上##的作用在於,當可變引數的個數為0時,
這裡的##起到把前面多餘的","去掉的作用,否則會編譯出錯
有些編譯器不支援__va_args__巨集 C 中乙個井號和兩個井號的使用
define warn if exp do while 0 那麼實際使用中會出現下面所示的替換過程 warn if divider 0 被替換為 do while 0 2.被稱為連線符 concatenator 用來將兩個token連線為乙個token。注意這裡連線的物件是token就行,而不一定是...
C 之可變引數,ref,out
1 可變引數 在c 4.0中增加了許多新的特性,這裡我主要說一下 可變引數陣列 int sum params int values int sum string name,params int values 注意 可變引數陣列必須是最後乙個,而且可變引數是c4.0中才有的特性。引數預設值 c 4.0...
關於C之可變引數
之前的文章有提到過變參巨集,即該巨集可以接受可變數量的引數。stdarg.h 標頭檔案為函式提供了乙個類似的功能,但是用法比較複雜。必須按如下步驟進行 1.提供乙個使用省略號 一定是最後的引數 的函式原型 2.在函式定義中建立乙個va list型別的變數 3.用巨集把該變數初始化為乙個引數列表 4....