Macro in Namespace?
-
Kurze Frage:
Macht es irgend einen Unterschied, ob ich ein Makro im globalen Raum oder in einem Namespace definiere. Sprich, gibt es einen Unterschied zwischen:
namespace NS { #define SQR(X) (X*X) }und:
namespace NS { } #define SQR(X) (X*X)?
-
Kein Unterschied.
-
Ok, Danke. Dann noch eine schnelle Frage:
Das Makro __FILE__ liefert bei mir (VS 2008) die absoluten Dateinamen (also F:\programmieren\...) und die sind leider sehr lange und damit unleserlich. Gibts da einen Trick, damit er mir nur foo.cpp etc anzeigt?
-
Nichts ganz einfaches.
Ich würde eine Funktion dafür schreiben.mir war grad langweilig
#include <iostream> using namespace std; #ifdef WIN32 char const* fileNameOfFullPath(char const* p){ char const* result=p; for(;*p!='\0';++p) if(*p=='\\') result=p+1; return result; } #endif #define SHORT_FILE fileNameOfFullPath(__FILE__) int main() { cout<<SHORT_FILE<<endl; }
-
Die namespace-Frage ist deshalb unsinnig (wenn man es weiß), weil Makros reine Textersetzungen sind, die vor dem Kompilieren stattfinden (durch den Präprozessor). Der Compiler kriegt deine define-Zeile gar nicht zu sehen. Das ist quasi, als würdest du selbst mit Strg+H (oder wie auch immer der Shortcut in deinem Editor ist) einen Text durch einen anderen ersetzen. Mehr nicht.