Frage zur Makroverwendung



  • Hallo zusammen,
    ich habe eine Frage zu Makros. Ist es üblich diese auch im Programmverlauf zu verwenden. Also beispielsweise
    so etwas:

    #include <iostream>
    #define MIN(a,b) ((a)<(b) ? (a) : (b))
    using namespace std;
    
    int main()
    {
    #undef MIN
    #ifdef MIN
    	int zahl = MIN(6,4);
    	cout << zahl;
    #endif
    #ifndef MIN
    	cout << "Der Himmel ist blau";
    #endif 
    	return 0;
    }
    

    Außerdem verstehe ich nicht den Sinn ein Makro ohne Ersatztext zu definieren. Laut meinem Lehrbuch kann mit dem Einsatz eines solchen Makros eine Headerdatei identifiziert werden und somit kann eine Mehrfachinkludierung vermieden werden. Diese Technik würden wohl auch in den Standard-Header-Dateien gebraucht werden.

    Ich verstehe das nicht? Kann mir jemand diese "Technik" mal an einem Beispiel erörtern?

    Vielen Dank
    lg, freakC++



  • So, wie Makros in deinem Beispiel eingesetzt werden sollte man das nicht tun. Da nimmst du besser eine inline Funktion. Makros haben diverse Nachteile, welche aber per google gefunden werden können.

    Include Guards werden hier erklärt:
    http://en.wikipedia.org/wiki/Include_guard



  • #ifdef __WIN32
    typedef void* NativeFileType;
    #else
    typedef int NativeFileType;
    #endif
    
    NativeFileType openFileForReading(char const* filename);
    
    ...
    int main(){
    ...
       NativeFileType file=openFileForReading(...
    

    würde ich lieber machen als

    ...
    int main(){
    ...
    #ifdef __WIN32
      HANDLE file=openFileForReading(...
    #else
      int file=openFileForReading(...
    #endif
    

    Aber oft sieht man das #ifdef mitten im Code wie im zweiten Beispiel. Also es ist durchaus üblich, leider.


Anmelden zum Antworten