和 運算子使用解析

2021-06-16 16:52:35 字數 1372 閱讀 3133

#運算子用於在預編譯期將巨集引數轉換為字串

例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.算數運算 加法運算 減法運算 乘法運算 除法運算 地板除運算 取商運算 取餘運算 求模運算 冪運算...