欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

C 语言中 # 和 ### 的区别

最编程 2024-06-18 09:27:43
...

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.****.net/acs713/article/details/6891837

http://blog.chinaunix.net/uid-27666459-id-3772549.html