新闻  |   论坛  |   博客  |   在线研讨会
C语言中#和##的区别
电子禅石 | 2023-04-25 21:31:05    阅读:16400   发布文章

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;
}


结果为: 


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

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


*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
属于自己的技术积累分享,成为嵌入式系统研发高手。
推荐文章
最近访客