#運算子用於在預編譯期將巨集引數轉換為字串
例1:#include
#define convers(x) #x
int main()
預編譯後生成如下
int main()
編譯執行結果如下
例2:#include
#define call(f, p) (printf("call function %s\n", #f), f(p))
int square(int n)
int f(int x)
int main()
經過預編譯生成如下
int square(int n)
int f(int x)
int main()
編譯執行輸出
呼叫函式之前,先把函式名列印出來,然後在呼叫函式把結果列印出來
這裡體現了巨集的強大,能列印出外邊的函式名,用函式是做不到這一點的,因為#只能在巨集裡面使用
##運算子
##運算子用於在預編譯期粘連兩個符號
例3:#include
#define name(n) name##n
int main()
預編譯生成
int main()
編譯輸出
利用##定義結構體型別:
#include
#define struct(type) typedef struct _tag_##type type;\
struct _tag_##type
struct(student);
int main()
預編譯後生成
typedef struct _tag_student student;struct _tag_student;
int main()
需要說明的是,c語言可以先typedef然後在定義,只要在某處最終把struct定義出來後,無論在任何地方都可以重新typedef,並不是必須先定義struct再typedef
#define struct(type) typedef struct _tag_##type type;\
struct _tag_##type
struct(student)
;此處很巧妙的用了##達到了乙個新的「關鍵字」struct,用struct可以定義結構體,相當於擴充套件了c語言
這個例子也充分的展示了巨集很強大,函式是沒有辦法實現它所有功能的
和 運算子 使用解析
預處理指令的開始符。運算子用於在預編譯期將巨集引數轉換為字串。舉例說明 include define convers x x int main 將輸出4個字串。運算子用於在預編譯期粘連兩個符號 舉例說明 include define name n name n int main 上面的程式中,int...
C 範圍解析運算子 的使用
1.範圍解析運算子的作用 範圍解析運算子 用於標識不同範圍內使用的識別符號。2.範圍解析運算子的使用 1 用於命名空間和類 namespace namespacea int main 2 沒有範圍限定符的表示全域性命名空間。namespace namespacea intx intmain 3 標識...
運算和運算子
運算 乙個或者乙個以上的資料經過變化得到新值的過程。運算子 用於運算的符號就是運算子 分類 1.算數運算 2.比較運算 關係運算 3.賦值運算 4.邏輯運算 5.位運算 6.成員運算 7.身份運算 1.算數運算 加法運算 減法運算 乘法運算 除法運算 地板除運算 取商運算 取餘運算 求模運算 冪運算...