c/c++ 几个双下划线 实用的内置宏

c/c++ 几个双下划线 实用的内置宏

这几个宏分别是

  • __FILE__ 文件路径文件名 字符串

  • __FUNCTION__ 函数名 字符串

  • __LINE__ 行号 数字

  • __TIME__ 编译时间 字符串

  • __DATE__ 编译日期 字符串

    printf("%s %s %d %s %s",__FILE__,__FUNCTION__,__LINE__,__DATE__,__TIME__);

这几个宏在调试时可能会非常有用,并且是c/c++编译器自带的,不会受限于平台的限制。

使用场景案例

以 __FUNCTION__ 举例

公司的c++ profile工具非常好用。如果想要开启的话,有一个关键步骤是在各个函数里的第一行,加上
profileFunction() 这样的一行语句。这样写起来非常简洁,就能够达到统计各个函数耗时的目的。

出于好奇了解了一下 profileFunction() 是如何实现的。

它的基本原理是,在调用这行代码时,在栈内存上定义一个局部变量。
借助 局部变量在定义时会进入constructor,脱出函数作用域调用 destructor 的特性,
实现了一个 Profiler 类,在 构造函数、析构函数里分别 记录 当前时间,从而计算出某个函数 耗费时长的。

基础代码形似这样:

profile.h

class Profile
{
public:
	Profile(const std::string& name);
	~Profile();
private:
	std::string m_name;
};

profile.cpp

#include "profile.h"

Profile::Profile(const std::string& name)
	:m_name(name)
{
	//printf("%s\n%s\ncompile time:%s %s",__FILE__,__FUNCTION__,__TIME__,__DATE__);
	// mark begin time
	// @todo
}

Profile::~Profile()
{
	// mark end time
	// @todo
}

最后,再在 profile.h 定义一个宏:

#define profileFunction() Profile __profiler__(__FUNCTION__);

在 Profile::Profile() 里面记录开始时间,Profile::~Profile() 里记录结束时间,写一些逻辑,即可达到记录函数耗时的效果。

在使用时,比如要 profile main() 函数的耗时,只需要在 main() 函数第一行里增加 profileFunction() 这一句就可以了。

int main()
{
	profileFunction();
	printf("test\n");
	return 0;
}
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值