在C++中尝试封装为函数

尝试封装为函数

我们以函数默认参数的形式来进行封装,可以写出形如下面的代码:

复制代码
#include <iostream>
#include <string>

void debug_log(const std::string& msg
               , const char* const file = __FILE__
               , const char* const fun  = __func__
               , const int         line = __LINE__
               ) {
    printf("Debug:[File:%s][Fun:%s][Line:%d] %s", file, fun, line, msg.c_str());
}

int main() {
    debug_log("use debug log\n");
}

将这段代码在各种编译其中尝试会因为 const char* const fun = func 产生各种七七八八的错误都会出现:

  • 直接无法编译
  • 编译运行成功,但是会报警告
  • 运行打印垃圾数据
  • 运行打印空串

原因主要在于 warning: 'func' is not defined outside of function scope。也就是说 func 仅在函数体内可用。

并且 LINE 所替换成的常量也是在函数的参数位置的行号。

因此这种方式无法满足我们的需求。

相关推荐
C^h5 小时前
c++ string
开发语言·c++
raindayinrain5 小时前
c++高性能--原子操作,无锁编程,操作顺序
开发语言·c++·性能优化
学逆向的5 小时前
C++ 合并命名空间
开发语言·c++·网络安全
Zhao-Jichao6 小时前
VS2026 打包 C++ 程序生成 EXE,借助 Installer Project 扩展工具
开发语言·c++
学逆向的6 小时前
C 局部静态变量
c语言·开发语言·网络安全
小徐不徐说7 小时前
C++ 接口与插件设计:从工厂注册到 Qt 动态插件
数据库·c++·qt·系统架构·程序设计
大都督会赢的7 小时前
C++第一节课
开发语言·c++
UIU1147 小时前
P1233 [ICPC 2001 Taejon R] 木棍加工
数据结构·c++·算法·动态规划
“AI国潮设计-小江”7 小时前
【AIGC实战】Python+Stable Diffusion打造“英歌舞财神”IP,解锁“马到成功”等爆款情绪营销文案设计
开发语言·人工智能·python·prompt·aigc
小王C语言7 小时前
Qt常用控件:容器类控件,标题分组框、标签页(浏览器标签)
开发语言·qt