c语言中#和##在宏定义中的使用

是在宏定义中将参数进行字符串化的预处理特征,例如:

#include <stdio.h>

#define P(EXP) printf("%s %d\n", #EXP, EXP)
int main()
{
    int a=123;
    
    P(a);
    return 0;
}

预编译展开后的部分代码

#define P(EXP) printf("%s %d\n", #EXP, EXP)
int main()
{
    int a=123;
    
    printf("%s %d\n", "a", a);
    return 0;
}

是连接符,用来连接变量名例如:

#include <stdio.h>

#define V(x)  var##x
int main()
{
    int var1=123,var2=222,var3=321;
    printf("%d\n",V(1));
    printf("%d\n",V(2));
    printf("%d\n",V(3));
    return 0;
}

预编译展开的部分代码

#define V(x)  var##x
int main()
{
    int var1=123,var2=222,var3=321;
    printf("%d\n",var1);
    printf("%d\n",var2);
    printf("%d\n",var3);
    return 0;
}

注意:

只能使用常量,不能使用变量的值,宏也不会进行展开操作

以下为错误操作

#include <stdio.h>

#define V(x)  var##x
#define P   1
int main()
{
    int var1=123,var2=222,var3=321;
    printf("%d\n",V(P));
    return 0;
}
#include <stdio.h>

#define V(x)  var##x
int main()
{
    int P=1;
    int var1=123,var2=222,var3=321;
    printf("%d\n",V(P));
    return 0;
}

例子忘记哪里摘抄的了,如有问题立即修改或删除

posted @ 2020-11-21 18:29  十七-2020  阅读(293)  评论(0)    收藏  举报