Frage zu #define
-
Hallo,
kurze Frage zu meinem Verständnis:
3 Dateien:
main.cpp
#include "test.h"
#define DEBUG
// #include "test.h" // habs auch mal an dieser stelle versucht
test.cpptest.h
#ifdef DEBUG
machdies
#endifHab das jetzt mal ohne code blocks geschrieben, ich glaube es ist auch so zu erkennen . Ist ja nicht viel Code und geht ja nur ums prinzip.
Also warum wird "machdies" nicht ausgeführt ?
Ist DEBUG nur in der Datei definiert in der es steht, also in der main.cpp ?Matthias
-
Das hat zwar nichts mit .Net zu tun, aber:
Ein #define-Name gilt von der Stelle, wo er steht, bis zum Ende der Übersetzungseinheit (oder zum #undef), das schließt die per #include eingebundenen Header mit ein. Also sollte 'machdies' eigentlich ausgeführt (bzw. übersetzt) werden, wenn du deinen Header nach dem define eingebunden hast.
-
Ok,
vielleicht verschiebt es ja ein Mod mal nach C++
aber eigentlich ist es ja bei .NET auch so, jdenfalss bei mir.Ich geb Dir hier aber mal ein Bsp.:
main.cpp
// hier ist DEBUG definiert, // vor dem #include der Test.h Datei #define DEBUG #include <iostream> #include "Test.h" using namespace std; int main() { CTest::testfunc_inline(); CTest::testfunc(); system("Pause"); }Test.h
#pragma once class CTest { public: CTest(void); static void testfunc_inline() { #ifdef DEBUG std::cout << "Inline ist DEBUG definiert." << std::endl; #endif } static void testfunc(); public: ~CTest(void); };Test.cpp
#include "Test.h" CTest::CTest(void) { } CTest::~CTest(void) { } void CTest::testfunc() { #ifdef DEBUG std::cout << "Debug ist auch in testfunc definiert." << std::endl; #endif }Forführeffekt...
es kommt die Ausgabe : "Inline ist DEBUG definiert."Also ist da schon mal DEBUG noch definiert.
Aber die andere wird nicht ausgeführt ?Mach ich da was falsch ?
Wei muss das richtig lauten ?Matthias
-
Dieser Thread wurde von Moderator/in Jochen Kalmbach aus dem Forum C++/CLI mit .NET in das Forum C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
wenn du die option deinem compiler übergibst, sollte sie eigentlich in allen einheiten zur verfügung stehen. beim gcc geht das z.b. mit dem parameter -D[macroname], also in dem fall dann gcc -DDEBUG ...
-
Hallo,
erst mal danke fürs verschieben Jochen !
Ok,
dsa mit dem Compiler hab ich auch probiert
gcc -DDEBUG
geht gar nicht, da bekomme ich ne Fehlermeldung :
Fehler 2 fatal error LNK1104: Datei "gcc.obj" kann nicht geöffnet werden. define
und mit -DDEBUG tut sich leider auch nichts ?
Übrigens wollte ich das auch nicht über die Eigenschaften machen, das mal vorweg genommen.
Ich hatte im Delphi 7 zum Debuggen immer unterProjekt->Optionen->Linker->(EXE und DLL Optionen) "Textbildschirm-Anwendung"
nen Haken reingemacht. Dafür hatte ich ne Funktion namens Debug, der nen String übergeben wird welcher dann in dem Dos-Fenster ausgegeben werden kann.
Das war manchmal echt Hilfreich !!Gibts aber ( anscheinend ) leider in Visual Studio 2005 Prof nicht oder doch ?
Matthias
-
#include "Test.h" CTest::CTest(void) { } CTest::~CTest(void) { } void CTest::testfunc() { #ifdef DEBUG std::cout << "Debug ist auch in testfunc definiert." << std::endl; #endif }In dieser Einheit ist NICHTS was DEBUG definiert. Bitte im Grundlagenbuch mal unter PreCompiler und #define nachschlagen.
gcc ist ein Compiler. Wie Du da jetzt auf die Idee kommst irgendwo gcc -DEBUG im Projekt einzutragen weiß ich nicht.
Ich tippe darauf das Du nach wie vor .Net machst, nutze mal die Suchfunktion. Es gibt dort einen schönen Beitrag, der Dir zeigt wie Du für die WinForms anwendung eine Konsole registrieren kannst und Daten ausgeben kannst.
Btw.: Wenn Dir Delphi so gefallen hat, mach doch da einfach weiter.
-
Hallo,
habs gerade gefunden,
1. Mein Fehler, ich hatte es in den Linker einstellungen
2. Korrekt ist es unterProjekt->Eigenschaften->Konfigurationseigenschaften->C/C++->Befehlszeile
und dort muss es
/D "DEBUG"
heißen,
dann gehts

Ok, aber das was es in Delphi gibt hab ich noch nicht gefunden
aber ich suche noch
Matthias
-
Hallo,
Knuddlbaer schrieb:
Wie Du da jetzt auf die Idee kommst irgendwo gcc -DEBUG im Projekt einzutragen weiß ich nicht.
thordk schrieb:
wenn du die option deinem compiler übergibst, sollte sie eigentlich in allen einheiten zur verfügung stehen. beim gcc geht das z.b. mit dem parameter -D[macroname], also in dem fall dann gcc -DDEBUG ...
@Knuddelbaer : Wer lesen kann ist klar im Vorteil oder wie sagst du immer ?
Knuddlbaer schrieb:
Btw.: Wenn Dir Delphi so gefallen hat, mach doch da einfach weiter.
@Knuddelbaer : Ich weiß ja nun das Dir Anfänger auf den Keks gehen und ich Dich schon ne Weile nerven aber wegen Dir werde ich nicht wieder mit Delphi weitermachen !
Hab Dir schon mal gesagt .. wenn dir meine Beiträge nicht passen dann ignorier sie einfach aber lass endlich mal deine blöden Postings!
Das geht mir nun langsam auf den Keks. Jedesmal das gleiche mit Dir und deinen Antworten !Matthias
-
STF-DIR schrieb:
thordk schrieb:
wenn du die option deinem compiler übergibst, sollte sie eigentlich in allen einheiten zur verfügung stehen. beim gcc geht das z.b. mit dem parameter -D[macroname], also in dem fall dann gcc -DDEBUG ...
Dann lies doch mal bitte den kompletten Satz, den du da zitiert hast - diese Schreibweise gilt, wenn du den GCC als Compiler verwendest. Beim MSVC kannst du auch in den Projekteinstellungen angeben, welche Makros vordefiniert sein sollen (und normalerweise definiert der DEBUG schon, wenn du einen Debug-Build anordnest).
-
Hallo,
hab ich mir mitlerweile nochmal angesehen.
Deswegen kann man das trotzdem in nem anderen Ton ausdrücken oder?Anere maulen doch auch nicht ständig rum.
Matthias