巨集函式及其用法

2021-06-22 04:27:58 字數 926 閱讀 9347

1、在乙個預處理器巨集中的引數前面使用乙個#,預處理器會把這個引數轉換為乙個字元陣列,如:

#define p(a) printf(「%s : %d」, #a,(a))

int a=1,b=2;

p(a+b);

則會輸出:a+b : 3

2、 「##」是一種分割連線方式,它的作用是先分割,然後進行強制連線。例如:

#define a1(name, type)  type name_##type##_type 或

#define a2(name, type)  type name##_##type##_type

a1(a1, int);  /* 等價於: int name_int_type; */

a2(a1, int);  /* 等價於: int a1_int_type;   */

解釋:1) 在第乙個巨集定義中,"name"和第乙個"_"之間,以及第2個"_"和第二個"type"之間沒有被分隔,所以預處理器會把name_##type##_type解釋成3段:

「name_」、「type」、以及「_type」,這中間只有「type」是在巨集前面出現過

的,所以它可以被巨集替換。

2) 而在第二個巨集定義中,「name」和第乙個「_」之間也被分隔了,所以

預處理器會把name##_##type##_type解釋成4段:「name」、「_」、「type」

以及「_type」,這其間,就有兩個可以被巨集替換了。

3) a1和a2的定義也可以如下:

#define a1(name, type)  type name_  ##type ##_type 

<##前面隨意加上一些空格》

#define a2(name, type)  type name ##_ ##type ##_type

結果是## 會把前面的空格去掉完成強連線,得到和上面結果相同的巨集定義

Oracle decode 函式及其用法

decode 函式,它將輸入數值與函式中的引數列表相比較,根據輸入值返回乙個對應值。函式的引數列表是由若干數值及其對應結果值組成的若干序偶形式。當然,如果未能與任何乙個實參序偶匹配成功,則函式也有預設的返回值。語法結構如下 decode expression,search 1,result 1 de...

memset函式及其用法

每種型別的變數都有各自的初始化方法,memset 函式可以說是初始化記憶體的 萬能函式 通常為新申請的記憶體進行初始化工作。它是直接操作記憶體空間,mem即 記憶體 memory 的意思。該函式的原型為 include void memset void s,int c,unsigned long n...

exce函式族及其用法

1 exec函式說明 fork函式是用於建立乙個子程序,該子程序幾乎是父程序的副本,而有時我們希望子程序去執行另外的程式,exec函式族就提供了乙個在程序中啟動另乙個程式執行的方法。它可以根據指定的檔名或目錄名找到可執行檔案,並用它來取代原呼叫程序的資料段 段和堆疊段,在執行完之後,原呼叫程序的內容...