Makro das 100mal Hello World ausgibt



  • Hallo,

    ich muss ein Makro schreiben, welches im Consolenfenster 100mal "Hello World" ausgibt. Als einzige Befehlszeile in der main-Funktion soll dabei der Name des Makros stehen, also z.B.

    #define Mymacro ....
    
    int main(void)
    {
      Mymacro; 
      return 0;
    }
    

    Allerdings schaffe ich es nur, 1x Hello World auszugeben. Habe schon do-while und for-Schleife probiert, aber dann kam immer ein error beim kompilieren. Kann mir jemand helfen?



  • Klingt nach einer Hausübung um dich mit Makros vertraut zu machen...zeig mal deine Versuche her.

    MfG SideWinder



  • Du kannst beliebigen(syntaxkorrekten) Code per Makro aufrufen, die Zeilen des Makros verbindet man mit nem \
    Vllt. ist das dein Problem.



  • Mit Makros sieht ein Programm evtl. nicht mehr unbedingt nach C-Code aus 😃

    #include <stdio.h>
    #include <Windows.h>
    
    #define MY_STACK_EXPLOSION int main ( void )
    #define BEGIN {
    #define END }
    #define SOS Beep(750,200);Beep(750,200);Beep(750,200);Beep(750,800);Beep(750,800);Beep(750,800);Beep(750,200);Beep(750, 200);Beep(750,200);
    #define WAIT_TILL_KEYPRESS system("pause");
    #define GIVE_BACK_NOTHING return 0;
    
    #define MY_BUFFER_OVERFLOW \
    char buf[]="Buffer overflow! Calling SOS!!!"; int i = 0; \
    while ( i < 100 ) putchar(buf[i++]);
    
    MY_STACK_EXPLOSION
    BEGIN
    	MY_BUFFER_OVERFLOW
    	SOS
    	WAIT_TILL_KEYPRESS
    	GIVE_BACK_NOTHING
    END
    

    :p



  • Meine Versuche sahen bis jetzt so aus:

    #define MyMacro short int i; for(i=0; i<100; i++){printf("Hello World");}
    

    bzw.

    #define MyMacro short int i; do{printf("Hello World"); i++;}while(i<100);
    

    Beide Male gab's mehrere Errors beim kompilieren... 😞



  • Und jetzt mit \

    #define MyMacro \
    short int i = 0; \
    while(i<100){printf("Hello World"); i++;}
    

    Es kommt aber keine Ausabe...



  • Maisinator schrieb:

    Beide Male gab's mehrere Errors beim kompilieren... 😞

    Wie lautet die Fehlermeldung?
    Vielleicht hast du das Makro irgendwo mitten im Code benutzt.
    C89 verlangt die Deklaration von Variablen am Anfang eines Blocks.
    Dann helfen geschweifte Klammern:

    #define MyMacro { short int i; for ( i = 0; i < 100; i++ ) { printf("Hello World"); }}
    


  • CJosef schrieb:

    Maisinator schrieb:

    Beide Male gab's mehrere Errors beim kompilieren... 😞

    Wie lautet die Fehlermeldung?
    Vielleicht hast du das Makro irgendwo mitten im Code benutzt.
    C89 verlangt die Deklaration von Variablen am Anfang eines Blocks.
    Dann helfen geschweifte Klammern:

    #define MyMacro { short int i; for ( i = 0; i < 100; i++ ) { printf("Hello World"); }}
    

    Also ich hab das Makro ganz am Anfang definiert, unter den #include-Anweisungen. Werde es jetzt aber nochmal probieren, da ich mir scheinbar den Kompiler beim Programmieren von pointern zerschossen habe... Jedenfalls ging danach zuerst kein run-to-cursor (in CodeBlocks) mehr und jetzt eben schaffte der nichtmal mehr eine for-Schleife auszuführen...



  • Was soll ich sagen... Der Virenwächter war's 😡 Mit deaktviertem Wächter geht das problemlos... Danke für eure Hilfe 😉



  • Wo du das Marko definierst ist wurscht.
    Es kommt in deinem Fall darauf an, an welcher Stelle du es benutzt (wenn du mit nem C89 Compiler arbeitest), weil deine Zählvariable nicht geklammert ist.
    Wenn du dein Makro in Klammern schreibst, sollte es funzen.

    Vllt. wird es so klarer:

    #define Makro1					\
    	short int i;				\
    	for ( i = 0; i < 100; i++ ) \
    	{							\
    		printf("Hello World");	\
    	}							\
    
    #define Makro2						\
    	{								\
    		short int i;				\
    		for ( i = 0; i < 100; i++ ) \
    		{							\
    			printf("Hello World");	\
    		}							\
    	}
    // Einsatz Makro1: 
    int main(void) 
    {
    	puts("hi!");
    	Makro1
    	return 0;
    }
    // Expandiert zu:
    int main(void) 
    {
    	puts("hi!");
    	short int i; // <--------------------------- Fehler (C89)
    	for ( i = 0; i < 100; i++ ) 
    	{							
    		printf("Hello World");	
    	}							
    	return 0;
    }
    // Einsatz Makro2
    int main(void) 
    {
    	puts("hi!");
    	Makro2
    	return 0;
    }
    // Expandiert zu:
    int main(void) 
    {
    	puts("hi!");
    	{   // Block-Beginn
    		short int i; // <--------------------------- Kein Fehler(C89), Variablendeklaration am Anfang eines Blocks.
    		for ( i = 0; i < 100; i++ ) 
    		{							
    			printf("Hello World");	
    		}
    	}   // Block-Ende
    	return 0;
    }
    

Anmelden zum Antworten