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
上一篇: C++ 单一示例设计模式详解
下一篇: [C 语言考试试题] 详解 (I)