C語言中#和##的區別
C語言中#和##的區別 .關于#和## 在C語言中宏定義中,#的功能是將其后面的宏參數進行字符串化操作。 #include<stdio.h> #define Str(s) #s int main() { printf(Str(HelloWorld)); return; }
結果為:
##是連接符,前加##或后加##,將標記作為一個合法的標識符的一部分,不是字符串.多用于多行的宏定義中。
#include<stdio.h> #define Var(x) var##x int main() { int Var(1)=1,Var(2)=2,Var(3)=3;//不是字符串 這里是一個變量 printf("var1=%d\n",var1); printf("var2=%d\n",var2); printf("var3=%d\n",var3); return 0; }
結果為:
win32圖形庫的代碼:
1 #define DECLARE_HANDLE(name) struct name##__{int unused;}; typedef struct name##__ *name2 DECLARE_HANDLE(HINSTANCE);
HINSTANCE為句柄的數據類型(句柄:Windows操作系統為各應用程序騰出一些內存儲地址,用來專門登記各應用對象在內存中的地址變化,可理解為:句柄地址(穩定)→記載著對象在內存中的地址→對象在內存中的地址(不穩定)→實際對象)。
宏展開:
1 struct HINSTANCE__ { int unused;};2 typedef struct HINSTANCE__ *HINSTANCE;
其中##的作用為將參數名與__連接。
參考http://blog.csdn.net/acs713/article/details/6891837
http://blog.chinaunix.net/uid-27666459-id-3772549.html
*博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。