C語言中#和##的區別


1.關於#和##

在C語言中宏定義中,#的功能是將其后面的宏參數進行字符串化操作。

1 #include<stdio.h>
2 #define Str(s) #s
3 int main()
4 {
5     printf(Str(HelloWorld));
6     return;
7 }

結果為:

##是連接符,前加##或后加##,將標記作為一個合法的標識符的一部分,不是字符串.多用於多行的宏定義中。

 1 #include<stdio.h>
 2 #define Var(x) var##x
 3 int main()
 4 {
 5     int Var(1)=1,Var(2)=2,Var(3)=3;
 6     printf("var1=%d\n",var1);
 7     printf("var2=%d\n",var2);
 8     printf("var3=%d\n",var3);
 9     return 0;
10 }

結果為:

2.##與typedef、#define的使用

win32圖形庫的代碼:

1 #define DECLARE_HANDLE(name) struct name##__{int unused;}; typedef struct name##__ *name
2 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM