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函式族就提供了乙個在程序中啟動另乙個程式執行的方法。它可以根據指定的檔名或目錄名找到可執行檔案,並用它來取代原呼叫程序的資料段 段和堆疊段,在執行完之後,原呼叫程序的內容...