パフォーマンスプロファイラを実装する機能のようなCPPマクロ| C ++コードのパフォーマンステストを簡素化するためにマクロを使用する方法

この記事では、最初の個人的なブログ登場https://kezunlin.me/post/65dc693d/最新の内容に、ようこそ!

パフォーマンスプロファイラを実装するための機能のようなCPPマクロ

ガイド

マクロ展開

  • 文字列「XXX」と名===>引用

  • 名前、名前===> XXX

  • ## B ===> CONCATENATE前後トークン以下。
// #name ===>  "xxx"
// name,  ##name ===> xxx

// ##name ===> concatenate  
// #name ===>  quote as strings

// a ## b ===>  concatenate the preceding and following tokens.


#define QUOTE(name) #name
#define CONCAT(x,y) x##y   // x ## y   space in ommited

#define MACRO(name)  #name "foo"
#define MACRO2(name) name "foo"
#define MACRO3(name) ##name "foo"


#define CAT(a, ...) a ## __VA_ARGS__

#define IIF(c) CAT(IIF_, c)
#define IIF_0(t, ...) __VA_ARGS__
#define IIF_1(t, ...) t

void macro_demo()
{
    QUOTE(test); // "test"
    CONCAT(test, foo); // testfoo

    MACRO(test); // "test" "foo"
    MACRO2(test);// test "foo"
    MACRO3(test);// test "foo"
}

マクロ機能

定義

#define SUM(a,b)  (a+b)

#define MYDEBUG(...)   fprintf(stderr, ##__VA_ARGS__)

使用法

int c = SUM(1,2);
MYDEBUG("%d,%d \n",1,2);     /*   Becomes fprintf(stderr,"%d,%d \n",1,2);   */

クラスオブジェクトと

定義

class profiler {
public:
    profiler(const char* func_name, unsigned int times = 1);
    ~profiler();

    void start();
    int stop();

private:
    boost::posix_time::ptime pt1;
    boost::posix_time::ptime pt2;
    const char * m_func_name;
    int m_times = 1;
};

#define ONCE_PROFILER() profiler _profiler_instance##__LINE__(__FUNCTION__)

#define BEGIN_PROFILE_ONE(name) profiler _profiler_##name(#name)
#define BEGIN_PROFILE_TIMES(name,times) profiler _profiler_##name(#name,times)

#define BEGIN_PROFILE(name,...) profiler _profiler_##name(#name, ##__VA_ARGS__)
#define END_PROFILE(name)  _profiler_##name.stop()          

使用法

void main()
{

BEGIN_PROFILE(LoadImage);

    load_image();
    
END_PROFILE(LoadImage); 
    
    
BEGIN_PROFILE_TIMES(ProcessImageTimes, 100);
//BEGIN_PROFILE(ProcessImageTimes, 100);
    for(int i=0; i<100;i++){
        process_image();
    }
END_PROFILE(ProcessImageTimes);

}

参照

歴史

  • 20191010:作成しました。

著作権

  • 投稿者:kezunlin
  • ポストリンク:https://kezunlin.me/post/65dc693d/
  • 著作権:別途明記しない限り、このブログのすべての記事はCC BY-NC-SA 3.0の下でライセンスされています。

おすすめ

転載: www.cnblogs.com/kezunlin/p/12026840.html
おすすめ