#define - Printf



  • Hallo,

    ich habe einige #define Anweisungen in meinem Programm...

    wie kann ich diese mittels Printf ausgeben?

    bsp:

    #define HALLO_DORO hallo_c_programm

    printf("HALLO_DORO");

    hier wird dann statt hallo_c_programm HALLO_DORO ausgegeben... 😕

    Wie kann ich "#define-Anweisungen" ausgeben?

    Danke



  • #include <stdio.h>
    #define OUT(x) #x
    
    int main(void) {
      printf("out %s\n",OUT(printf("hallo welt\n")));
      return 0;
    }
    

    wär mal was für die FAQ



  • das war doch garnicht gesucht king



  • vibe schrieb:

    das war doch garnicht gesucht king

    doch, das war gesucht.



  • Kinruedi har recht

    Schreib folgendes

    #define HALLO_DORO "hallo_c_programm"

    printf("%s",HALLO_DORO);

    Der Preprozessor ersetzt alle Stellen an denen HALLO_DORO vorkommt durch das was unmittlebar dahinter kommt, Wenn es in '"' eingeschlossen
    ist wird es nicht ersetzt.

    d.h. was durch den Preprozessor dort eingesetzt wird muss systaktisch richtig sein.
    deswegen habe ich um hallo_c_programm noch die nötigen '"' gesetzt, sonst hätte der Compiler hallo_c_programm als Variablennamen interpretiert und eine Fehlermeldung ausgegeben. Falls du bei HALLO_DOEO auf die '"' verzichten mußt geht nur Kingruedi´s Lösung



  • Hi,ich hatte da mal ein ähnliches Problem, auf dessen Lösung ich noch immer scharf wäre: Wie mache ich das, wenn ich meinen Text variabel formatieren will, wie in folgendem Beispiel: Ich habe eine Reihe von Wörtern und gehe diese jetzt durch um MaxLength zu ermitteln. Jetzt, da ich den nötigen Platz habe, will ich printf( "%10s -> %s, Wort[i], WasAnderes ); aufrufen, aber mit MaxLength statt 10, könnt ihr mir da helfen???

    mfg D1B



  • D1BAKEL schrieb:

    will ich printf( "%10s -> %s, Wort[i], WasAnderes ); aufrufen, aber mit MaxLength statt 10, könnt ihr mir da helfen???

    Weiß nicht ob printf von Haus aus was bietet, aber notfalls könntest du zuerst den formatstring selber konstruieren:

    char temp[100];
    sprintf(temp, "%%%is -> %%s", MaxLength);
    printf(temp, Wort[i], WasAnderes);
    


  • printf kann das von zu hause aus
    jedes Stern steht für die Feldlänge

    printf "%*.*f",10,4,1234.34);
    

    damit wird eine printf von("%10.4f",1234,34) erzeugt.

    In deinem Fall wäre das

    sprintf(temp, "%*s -> %s", MaxLength,Wort[i],WasAnderes);
    


  • Ich weiß, es kommt spät, aber dankeschön, das is genau was ich gesucht hab...


Anmelden zum Antworten