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

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

相关推荐
Shadow(⊙o⊙)1 小时前
Linux进程地址空间——钻入Linux内核架构性剖析 硬核手搓!
java·linux·运维·服务器·开发语言·c++
csbysj20201 小时前
SQL UNION 操作符详解
开发语言
Volunteer Technology1 小时前
Spring AI MCP案例
java·开发语言·数据库
郝学胜-神的一滴1 小时前
干货版《算法导论》04:渐近复杂度与序列接口实战
java·开发语言·数据结构·c++·python·算法
zzzsde1 小时前
【Linux】信号处理(3)信号处理&&valatile关键字
linux·运维·服务器·开发语言·算法
Dylan的码园1 小时前
2026年免费远程控制软件哪个好?ToDesk向日葵UU远程免费版横评,不限次数不限时长
服务器·开发语言·php
_Rookie._1 小时前
部署python后端,以及Dockerfile 的 RUN CMD ENTRYPOINT字段
开发语言·python
dog2501 小时前
解析几何的力量(1)
服务器·开发语言·网络·php
99乘法口诀万物皆可变1 小时前
BMS HIL 自动化测试框架方案(基于 CANoe + C# + Excel)
开发语言·c#·excel