专栏首页Visual Codex[C语言] #、##、__VA_ARGS__的使用

[C语言] #、##、__VA_ARGS__的使用

从网上借鉴了一些内容,然后整理了一下三者的区别,记录一下。

#include <iostream>

// #: 用来把参数转换成字符串
#define LOG1(x) do { printf("%s=%d\n",#x,x); }while(0)
// ##:用于将带参数的宏定义中将两个子串(token)联接起来,从而形成一个新的子串;但它不可以是第一个或者最后一个子串。所谓的子串(token)就是指编译器能够识别的最小语法单元;
#define LOG2(x) log##x()
// __VA_ARGS__:用于在宏替换部分中,表示可变参数列表;
#define LOG(...)  printf(__VA_ARGS__);

void logA() {
    printf("log func A \n");
}

void logB() {
    printf("log func B\n");
}

int main()
{
    // 测试#
    int score = 96;
    LOG1(score);
    LOG1(6);

    // 测试##
    LOG2(A);

    // 测试 __VA_ARGS__
    LOG("score is %d\n", 96);

    getchar();
    return 0;
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • RAC(ReactiveCocoa)介绍(十一)——RAC宏定义

    在编程领域里的宏是一种抽象(Abstraction),它根据一系列预定义的规则替换一定的文本模式。解释器在遇到宏时会自动进行这一模式替换。绝大多数情况下,“宏”...

    我只不过是出来写写代码
  • STM32单片机极简方法 使用宏定义 代替复杂的重定向printf()函数,实现串口打印。(HAL库例程)

    对于 printf() 函数我们并不陌生,初学C语言使用的第一个函数,其作用是在终端打印显示格式化字符串。

    用户4645519
  • 整理C/C++的可变参数

    c语言中使用可变参数最熟悉应该就是printf, 其是通过...来从代码语句中表示可变化的参数表。

    Rock_Lee
  • 【为宏正名】99%人都不知道的"##"里用法

    有人说C语言中最臭名昭著的两兄弟就是指针和宏了。对于前者,很多有经验的老鸟会告诉你:用好了指针你就掌握了C语言的内功心法——如同原力一样,无论是追随光明还是堕入...

    GorgonMeducer 傻孩子
  • ReactiveCocoa 中 奇妙无比的 “宏” 魔法

    在ReactiveCocoa 中,开源库作者为我们提供了很多种魔法,“黑”魔法,“红”魔法……今天就让先来看看“红”魔法。

    一缕殇流化隐半边冰霜
  • C语言和go语言之间的交互 - C语言中使用go语言,使用的go语言又使用了c语言

    一、go语言中使用C语言 go代码中使用C代码,在go语言的函数块中,以注释的方式写入C代码,然后紧跟import “C” 即可在go代码中使用C函数 ? 代码...

    magicsoar
  • 提高代码逼格的利器:宏定义-从入门到放弃

    一直以来,我都有这样一种感觉:当我学习一个新领域的知识时,如果其中的某个知识点在刚开始接触时,我感觉比较难懂、不好理解,那么以后不论我花多长时间去研究这个知识点...

    用户7851550
  • C语言边角料-01

    这几天在把一个嵌入式项目的代码,移植到另一个平台,发现很多地方用的都是 C89 标准。

    用户7851550
  • Android的毛玻璃模糊效果,我使用OpenCV来搞

    声明:本文是JerryloveEmily原创,已获其授权发布,未经原作者允许请勿转载

    用户2802329

扫码关注云+社区

领取腾讯云代金券