在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 所替换成的常量也是在函数的参数位置的行号。

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

相关推荐
bkspiderx7 分钟前
Qt 插件机制:动态扩展应用功能的核心框架
开发语言·qt·元数据·qt 插件·qpluginloader
程序员老陆18 分钟前
深入理解 C++ thread_local:线程私有存储的正确打开方式
开发语言·c++·程序设计
沐晓时光25 分钟前
C语言入门,深入理解指针(3)
c语言·开发语言
信奥卷王36 分钟前
[GESP202609 六级] 分树规划
算法
夏幻灵43 分钟前
LeetCode 21:合并两个有序链表——双指针与哑节点详解
算法·leetcode·链表
码云数智-园园1 小时前
unique_ptr 还是 shared_ptr?C++ 智能指针选型与内存泄漏实战分析
java·开发语言
禾小西2 小时前
07丨Redis 哨兵机制:主库故障后,如何恢复服务?
java·开发语言·redis
我不是阵雨2 小时前
JDK 21虚拟线程Pinning陷阱:一文拔钉解困
java·开发语言
徐小黑ACG2 小时前
Golang 基础05 结构体struct
开发语言·算法·golang