C/C++ 使用 define 实现运行时函数是在哪个文件哪个函数被调用

1. 原始代码

cpp 复制代码
// demo2.h
#include <iostream>

void testFunc(int num)
{
    std::cout << num << std::endl;
}
cpp 复制代码
//main.cc
#include "demo2.h"

void func1()
{ }

void func2()
{
    testFunc(24);
}

int main()
{
    func1();
    func2();

    return 0;
}
  • 我现在需要知道 testFunc 是在哪一行被调用了。

2. 使用 define 实现

cpp 复制代码
#include <iostream>

#define testFunc(num) __testFunc(num, __FILE__, __FUNCTION__, __LINE__)

void __testFunc(int num, const char* fileName, const char* funcName, int line)
{
    std::cout << fileName << std::endl;
    std::cout << funcName << "()" << std::endl;
    std::cout << "line: " << line << std::endl;
    std::cout << num << std::endl;
}
  • 主函数一样
cpp 复制代码
#include "demo2.h"

void func1()
{ }

void func2()
{
    testFunc(24);
}

int main()
{
    func1();
    func2();
    return 0;
}
如此就实现了打印函数在娜个文件、哪个函数哪一行被调用的效果

作为 debug 的时候很有用。

相关推荐
Cloud_Shy61814 小时前
解读《Effective Python 3rd Edition》:从练气到老魔
开发语言·python
雨辰AI14 小时前
MySQL 迁移至达梦 DM9 完整改造指南|99% SQL 零改动
java·开发语言·数据库·sql·mysql·政务
弹简特14 小时前
【Java项目-轻聊】05-AI赋能设计接口文档
java·开发语言
AI行业学习14 小时前
.NET Framework 3.5 SP1 完整离线包(2029.5.29)
开发语言·windows·.net
cany100014 小时前
C++ -- 队列std::queue
开发语言·c++
skywalk816314 小时前
根据言律的语法,能否用racket进行开发呢?主要探讨是否可行。 racket在这里:E:\Program Files\Racket\Racket.exe
开发语言·原型模式
OctShop大型商城源码14 小时前
OctShop对比JAVA商城源码_OctShop大型专业级多用户商城源码
java·开发语言·商城系统·小程序商城·octshop
l1t14 小时前
DeepSeek总结的使用实体-组件-系统和基于存在性处理进行Python编程15-17
开发语言·数据库·python
guslegend14 小时前
AGENT.md,Skill与工程规范
java·开发语言·数据库
jingling55514 小时前
Flutter | Dio网络请求实战
android·开发语言·前端·flutter