Makros (zählen)
-
Hallo habe folgendes Problem ich habe eine protokoll.h
#ifndef NDEBUG #include <iostream> int a = 0; static int o = 1; static int b = 1; #define AUFRUF(func) \ a++; #define BERICHT \ cout << "Es wurden insgesamt " << (a) << " Funktionsaufrufe durchgefuehrt." << endl; #else #define AUFRUF(func) #define BERICHT #endif
und eine main.cpp
// Test der Makros aus protokoll.h #include <cstdlib> using namespace std; #include "protokoll.h" void aha(int i) { AUFRUF(aha); if (i > 0) aha(i - 1); } void oho() { AUFRUF(aha); aha(1); } int main() { aha(0); oho(); aha(1); BERICHT; system("pause"); return 0; }
nun möchte ich die Aufrufe der Funktionen zählen das dies raus kommt
aha: 1. Aufruf
oho: 1. Aufruf
aha: 2. Aufruf
aha: 3. Aufruf
aha: 4. Aufruf
aha: 5. Aufruf
Es wurden insgesamt 6 Funktionsaufrufe durchgefuehrt.darf die main.cpp aber nicht verändern....
wie geht das
-
hmm so wie ich das jetzt schnell überfliege
zählst du in a alle func aufrufe, egal ob aha oder oho
und am schluss gibts du BERICHT aus und dann steht ja einmal dran wieviel insgesamt gemacht wurdenmacht doch z.b. ein stringvector einen globalen
dann in jeder func baust du ne zeile einmeinvector.pusch_back("hier_der_func_name);
dann, am schluss wo du BERICHT eingibst ne for schleife die dann die ganzen func namen ausgibt
in der art wie
for(int i = 0; i < meinvector.size(); i++) { cout << "Aufruf von der func: " << meinvector[i] << endl; }
naja oder du machst oben defines und gibts denen zahlenwerte z.b. 4711, 4712 uws die zahlen haben dann die fkt namen
kansnt auch 1,2,3 nehmen dann den vector als short nehmen ( bei langen functionensnamen sparst dir speicherplatz )
-
ups sorry hab gerade gesehen, dass du die main nicht ändern darfst
wohl ne prof aufgabe was
-
protokoll.h darfst du ändern?
du weißt schon, dass du in defines so ziemlich alles hineinpacken kannst, was du willst?a
auch statische variablen, ifs etc.... eine seltsame aufgabe
-
ups, sorry, newkid. hab deinen beitrag aus versehen gelöscht.
#include <cstdlib> using namespace std; //begin protokoll.h #include <iostream> #define AUFRUF(func)\ {\ extern int BERICHTa;\ static int AUFRUF##func=0;\ ++BERICHTa;\ ++AUFRUF##func;\ std::cout<<#func<<": "<<AUFRUF##func<<".Aufruf"<<std::endl;\ } #define BERICHT \ {\ extern int BERICHTa;\ std::cout << "Es wurden insgesamt "<<BERICHTa<<" Funktionsaufrufe durchgefuehrt."<<std::endl;\ } //end protokoll.h //begin protokoll.cpp int BERICHTa; //end protokoll.cpp void aha(int i) { AUFRUF(aha); if (i > 0) aha(i - 1); } void oho() { AUFRUF(oho); aha(1); } int main() { aha(0); oho(); aha(1); BERICHT; system("pause"); return 0; }
-
wir sagen alle
"danke volkard"
ist oki, denke meine lösung war falsch. oder so falsch war die gar nicht, oder?
naja, aber seit wann machst du hausaufgaben? hehe
-
tippfehler?
auf jedenfall sieht C++ Neulings oho so aus:void oho() { AUFRUF(aha); aha(1); }
-
newkid schrieb:
ist oki, denke meine lösung war falsch. oder so falsch war die gar nicht, oder?
wenn ich mich recht erinnere war alles ok, außer daß du zwei strings mit == statt mit strcmp verglichen hast.