kurze struct frage



  • hallo,

    kann man das irgendwie kürzer schreiben?

    typedef struct _Color
    {
    	int r;
    	int g;
    	int b;
    }TColor;
    
    TColor rgb;
    rgb.r = 255;
    rgb.g = 255;
    rgb.b = 255;
    Display(10,100, rgb, "hello world!");
    

    statt das vorher zu definieren würd ich das gerne irgendwie direkt in den funktins aufruf schreiben wollen.
    würde einfach den code klein halten und ich denke auch übersichtlicher.

    kann mir da bitte wer helfen?



  • @nap,

    eine Möglichkeit wäre diese:

    typedef struct _Color
    {
      int clr[3];
    }TColor;
    
    TColor rgb;
    rgb.clr = { 255, 255, 255 };
    Display(10,100, rgb, "hello world!");
    

    Innerhalb des Funktionsaufrufes könntest du es dann
    höchstens mit weiteren Parametern machen. Nur ich
    finde Funktionen mit zu vielen Parametern immer sehr
    anstrengend 🙂

    Bye Peter.



  • ähm ja .. aber das nicht so wie ich meinte 😉

    // The RGB macro selects a red, green, blue (RGB) color based on the arguments supplied and the color capabilities of the output device. 
    
    COLORREF RGB(
    
        BYTE bRed,	// red component of color
        BYTE bGreen,	// green component of color
        BYTE bBlue	// blue component of color
       );	
    
    #define RGB(r, g ,b)  ((DWORD) (((BYTE) (r) | \  
        ((WORD) (g) << 8)) | \ 
        (((DWORD) (BYTE) (b)) << 16))) 
    
    Display(10,100, RGB(255,255,255), "hello world!");
    

    ich weiss was #define bedeutet, jedoch verstehe ich nicht was das nach RGB(r, g ,b) zu bedeuten hat.

    kann mir einer eine define machen wofür das geht:

    typedef struct _Color
    {
    // float für OpenGL 0.0f bis 1.0f
        float r;
        float g;
        float b;
    }TColor;
    
    #define glRGB(r,g,b) xxxxxxxxxxxxxxxxxxxxx?
    Display(10,100, glRGB(1.0f,0.8f,0.5f), "hello world!");
    

    hoffe einer kann das 🤡



  • Ich meine, das war

    Display(10,100, {.r=255, .g=255, .b=255}, "hello world!");
    

    Aber sicher bin ich mir nicht. Muesste ich nochmal nachgucken, wozu ich gerade keine Zeit hab. Nachher vielleicht. Ist aber auf jedenfall C99, brauchst also einen aktuellen Compiler.



  • Und wie wärs, wenn du es einfach so machst:

    typedef struct _Color
    {
    	int r;
    	int g;
    	int b;
    }TColor;
    
    TColor rgb = { 255, 255, 255 };
    Display(10,100, rgb, "hello world!");
    

    @sg1
    Auf so eine Methode das zu machen ist ja interesant.



  • @AJ danke, aber mehr oder weniger ist das mit ___Peter sein code identisch.

    ich möchte es gerne halt in der funktionszeile haben .. denke mal das geht nur mit einem solchem macro wie mein post zuvor.



  • nap schrieb:

    @AJ danke, aber mehr oder weniger ist das mit ___Peter sein code identisch.

    Naja mehr oder minder...

    Das Makro könntest du auch allein hinkriegen. Du musst einfach nur die casts umändern und die Anzahl der zu verschiebenden Bits ändern.

    Eine noch einfachere Lösung wäre natürlich die Funktion Display so umzuändern (wenn möglich), dass sie anstatt dem einen struct als Parameter einfach drei Parameter (r, g, b) erwartet.



  • SG1 schrieb:

    Display(10,100, {.r=255, .g=255, .b=255}, "hello world!");
    
    Display (10, 100, (TColor){ .r = 255, .g = 255, .b = 255}, "hello world!");
    


  • Daniel E. schrieb:

    Display (10, 100, (TColor){ .r = 255, .g = 255, .b = 255}, "hello world!");
    

    Jo, das wars, danke.


Anmelden zum Antworten