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.


Anmelden zum Antworten