欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 手游 > C语言_可变参数_LOG宏

C语言_可变参数_LOG宏

2025/5/7 10:13:08 来源:https://blog.csdn.net/renhl252/article/details/147749761  浏览:    关键词:C语言_可变参数_LOG宏

      LOG宏一般处理,没有参数,只有字符串参数,字符串格式和一个参数,多个参数的场合。以下是针对常见的应用场合举例说明,可便参数的使用。

代码

#include <stdio.h>#define LOG(format, ...)  printf("[%s][%d]" format "\n", __FUNCTION__, __LINE__, ##__VA_ARGS__)int main() {LOG();LOG("abc");LOG("abc %d", 10);LOG("abc %d %s", 10, "efg");return 0;
}    

预编译

renhl252@renhl:~/usb/c$ gcc main.c -E -o main.i

  预编译结果

# 5 "main.c"
int main() {printf("[%s][%d]" "\n", __FUNCTION__, 6);printf("[%s][%d]" "abc" "\n", __FUNCTION__, 7);printf("[%s][%d]" "abc %d" "\n", __FUNCTION__, 8, 10);printf("[%s][%d]" "abc %d %s" "\n", __FUNCTION__, 9, 10, "efg");return 0;
}

   预编译结果解析

调用形式format 字符串可变参数展开后的 printf 调用
LOG();  printf("[%s][%d]\n", __FUNCTION__, __LINE__);
LOG("abc");"abc"printf("[%s][%d]abc\n", __FUNCTION__, __LINE__);
LOG("abc %d", 10);"abc %d"10printf("[%s][%d]abc %d\n", __FUNCTION__, __LINE__, 10);
LOG("abc %d %s", 10, "efg");"abc %d %s"10"efg"printf("[%s][%d]abc %d %s\n", __FUNCTION__, __LINE__, 10, "efg");
  • 可变参数处理## 是预处理器的连接符,其作用是在可变参数为空时去除多余的逗号,从而避免出现编译错误。

编译

renhl252@renhl:~/usb/c$ gcc main.c

测试结果

renhl252@renhl:~/usb/c$ ./a.out
[main][6]
[main][7]abc
[main][8]abc 10
[main][9]abc 10 efg
renhl252@renhl:~/usb/c$

 

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词