Präprozessor - Behind the scenes

Wer immernoch nicht genug vom Präprozessor und dessen Funktionsweise hat kann sich in diesem Video mal im Detail anschauen, wie der verarbeitete Quellcode aussieht, der schließlich zum Compiler geht.

Video

Code

Als Demonstration dienen wieder die beiden Dateien logging.hpp und test.cpp vom vorherigen Video.

logging.hpp

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
#ifndef LOGGING_HPP
#define LOGGING_HPP

#ifndef LOGTARGET
#define LOGTARGET std::cout
#endif // LOGTARGET

#ifdef NDEBUG
    #define TRACE(msg, file, line)
#else
    #define TRACE(msg, file, line) LOGTARGET << "[TRACE] " << \
            msg << " (at " << file << ":" << line << ")\n"
#endif //NDEBUG

#define ENTER(fkt) TRACE("ENTER " fkt, __FILE__, __LINE__)
#define EXIT(fkt) TRACE("EXIT " fkt, __FILE__, __LINE__)

#define CALL(fktcall) TRACE("CALL " #fktcall, __FILE__, __LINE__); fktcall;

#endif // LOGGING_HPP

test.cpp

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#include <iostream>
#include "logging.hpp"

void test() {
    ENTER("test");
    std::cout << "Testing\n";
    EXIT("test");
}

int main(int argc, char * argv[]) {
    ENTER("main(int,char*[])");
    std::cout << "Hello world!\n";
    CALL(test());
    EXIT("main(int,char*[])");
}

Erklärung

Später…