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; }