跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 请问 c++如何写一个宏,来打印函数的名字和运行的时间?
未分類
10 3 月 2021

请问 c++如何写一个宏,来打印函数的名字和运行的时间?

请问 c++如何写一个宏,来打印函数的名字和运行的时间?

資深大佬 : ly90907 7

例如我有这么一段代码:

time_t start = clock();
function_a();
cout << “function_a (<-这里随着函数的名字自适应) running time is ” <<(double)(clock()-start)/CLOCKS_PER_SEC<<” s”<<endl;

我想把它写成一个宏的形式,比如:PRINT_FUN_TIME(val), 这样我想打印任何函数的运行时间就可以写成
PRINT_FUN_TIME(function_a())

请问各位大佬我该怎么写?十分感谢

大佬有話說 (11)

  • 資深大佬 : senghoo

    https://gist.github.com/senghoo/9432546c18aebb48b4add78be811a6df

  • 主 資深大佬 : ly90907

    @senghoo 惊了,完全符合我的想法,我就是卡在了#f 这里,十分感谢大佬!!

  • 主 資深大佬 : ly90907

    @senghoo 另外我还有个疑问,如果我只想打印 f 名字,而不打印 f()里的参数,有没有办法实现呢?

  • 資深大佬 : senghoo

    @ly90907 其实 C/C++的预处理就是字符串替换。如果有需要完全可以把#f 当作一个字符串,用常规的字符串处理函数把后面部分去掉再显示。

  • 資深大佬 : wamson

    @ly90907 cout << __FUNCTION__;

  • 資深大佬 : wamson

    @ly90907 搞混了,宏的话,好像 8 行

  • 資深大佬 : across

    @ly90907

    #define T(f,…) do {
    time_t start = clock();
    f(__VA_ARGS__);
    cout << #f << ” running time is ” <<float(clock()-start)/CLOCKS_PER_SEC<<” s”<<endl;
    }while (0)

    T(function_a,10);

  • 主 資深大佬 : ly90907

    @senghoo 了解,已经试验成功,十分感谢大佬解惑

  • 主 資深大佬 : ly90907

    @across 您这个应该也可以,但是用的时候似乎需要把函数名和参数分开写,不然编译会报错,不过依然感谢

  • 主 資深大佬 : ly90907

    最终以如下方式实现
    #define PRINT_FUNCTION_TIME(f) do {
    time_t start = clock();
    f;
    std::string output = #f;
    cout << output.substr(0, output.find_first_of(“(“)) + ” time = ” <<float(clock()-start)/CLOCKS_PER_SEC<<” s”<<endl;
    }while (0)

    PRINT_FUNCTION_TIME(test());
    PRINT_FUNCTION_TIME(test2(a,b,c));

  • 資深大佬 : byaiu

    这不是很多库都有的东西么……现在大众 cpp 的水平都这样了?

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具