Preprocessor



  • Hi

    Also ich habe soetwas vor

    #define PROFILE_BEGIN(name) static Profile prof_##__line__(name); g_Profiler.getInst().Begin( prof_##__line__ )
    
    void test() {
        PROFILE_BEGIN("Test1");
        PROFILE_BEGIN("Test2");
    }#endif
    

    Ihr versteht hoffentlich was ich damit sagen möchte.
    Ich brauche einen Unique name in bei jedem Aufruf von PROFILE_BEGIN, sonst muß ich wieder über den Namen identifizieren, was Performance kostet.

    Über __line währe natürlich super gewesen. Aber er übersetzt es in prof___line__
    Ich hätte aber lieber prof_123 oder sowas.

    Gibts eine möglichkeit, ohne daß ich Zufuß in einer Funktion die Strukturen oder Klassen erstelle, das löse? Sonst sehe ich nur die möglichkeit per

    #define PROFILE_BEGIN(name, num) static Profile prof##num(name);
    

    Irgendeine idee? Währe euch sehr verbunden
    Danke
    Sven



  • mal in den wind geraten:

    #define DO_CONCAT2(a,b) a##b
    #define DO_CONCAT(a,b) DO_CONCAT2(a,b)
    #define CONCAT(a,b) DO_CONCAT(a,b)
    //warum man 2 indirektionen braucht habe ich vergessen
    //hatte aber etwas mit macro expansion zu tun
    
    #define PROFILE_BEGIN(name) static Profile CONCAT(prof_,__LINE__)(name); g_Profiler.getInst().Begin( CONCAT(prof_,__LINE__) )
    

    btw: es heisst __LINE__ und nicht __line__



  • Danke - so funktioniert es.

    Mit dem __LINE__ hab ich im Source eigentlich auch so gehabt... mhhh - naja - ok - falsch gepostet 😉

    Das mit dem Concat hatte ich auch probiert, aber eben ohne die 2fache Expansion. Dann macht er es nicht so wie gewollt. Warum das so ist, weiß ich leider auch nicht 😕 - eigentlich braucht man den Kram ja auch selten


Anmelden zum Antworten