Latest web development tutorials

C ++ Präprozessor

Einige Präprozessordirektiven, lenkt den Präprozessor an den Compiler vor der eigentlichen Erstellung Sie ausfüllen müssen.

Alle Präprozessordirektiven sind (#) mit dem Rautenzeichen beginnen, nur ein Leerzeichen vor den Präprozessordirektiven erscheinen. C ++ Präprozessordirektive ist keine Aussage, sie sind also nicht ein Semikolon; am Ende ().

Wir haben alle bisherigen Instanzen haben gesehen# include - Direktive.Dieses Makro wird verwendet, Header-Datei in der Quelldatei enthalten sein.

C ++ unterstützt auch eine Reihe von Vorverarbeitung Richtlinien, wie zum Beispiel # include, # definieren, # wenn, # sonst, # line, usw., lassen Sie uns bei dieser wichtigen Anweisungen.

#define Vorverarbeitung

#define Präprozessordirektive eine symbolische Konstanten zu erstellen. Die symbolische Konstante wird in der Regel einMakro, die Form des allgemeinen Befehls genannt:

#define macro-name replacement-text 

Wenn diese Codezeile in einer Datei angezeigt werden, wird die Datei in der anschließenden werden alle Makros mit Ersatz-Text ersetzt werden, bevor das Programm kompiliert wird. Zum Beispiel:

#include <iostream>
using namespace std;

#define PI 3.14159

int main ()
{
 
    cout << "Value of PI :" << PI << endl; 

    return 0;
}

Nun lassen Sie uns diesen Code zu testen, einen Blick auf die Ergebnisse der Vorbehandlung nehmen. Angenommen, die Quelldatei bereits vorhanden ist, dann verwenden Sie die Option -E zusammenzustellen und um die Ergebnisse umleiten zu test.p. Nun, wenn Sie test.p Datei betrachten, werden Sie sehen, dass es bereits eine Vielzahl von Informationen enthält, und der Wert wurde auf den Boden der Datei wie folgt geändert:

$gcc -E test.cpp > test.p

...
int main ()
{
 
    cout << "Value of PI :" << 3.14159 << endl; 

    return 0;
}

Makrofunktionen

Sie können #define verwenden Sie das Makro zu definieren, wie mit einem Parameter folgt:

#include <iostream>
using namespace std;

#define MIN(a,b) (((a)<(b)) ? a : b)

int main ()
{
   int i, j;
   i = 100;
   j = 30;
   cout <<"The minimum is " << MIN(i, j) << endl;

    return 0;
}

Wenn der obige Code kompiliert und ausgeführt wird, erzeugt es die folgenden Ergebnisse:

The minimum is 30

Bedingtes Kompilieren

Es gibt mehrere Befehle, die selektiv auf dem Teil der Programmquellcode verwendet werden kann, ist zusammengestellt. Dieser Vorgang wird als bedingte Kompilierung bekannt.

Struktur und wählen, ob strukturelle Bedingungen ähnlich wie der Präprozessor. Betrachten Sie die folgende Passage Präprozessor Code:

#ifndef NULL
   #define NULL 0
#endif

Sie können nur machen, wenn sie mit Debugging kompiliert, Debugging mit einem Makro realisiert werden können, wie folgt:

#ifdef DEBUG
   cerr <<"Variable x = " << x << endl;
#endif

Wenn vor der Anweisung #ifdef DEBUG hat symbolische Konstante DEBUG definiert wurde, wird es auf dem Programmcerr Aussagen zusammengestellt werden.Sie können aus dem Anweisungsteil des Programms #if 0 Kommentar verwenden, wie folgt:

#if 0
   不进行编译的代码
#endif

Lassen Sie uns die folgenden Beispiele versuchen:

#include <iostream>
using namespace std;
#define DEBUG

#define MIN(a,b) (((a)<(b)) ? a : b)

int main ()
{
   int i, j;
   i = 100;
   j = 30;
#ifdef DEBUG
   cerr <<"Trace: Inside main function" << endl;
#endif

#if 0
   /* 这是注释部分 */
   cout << MKSTR(HELLO C++) << endl;
#endif

   cout <<"The minimum is " << MIN(i, j) << endl;

#ifdef DEBUG
   cerr <<"Trace: Coming out of main function" << endl;
#endif
    return 0;
}

Wenn der obige Code kompiliert und ausgeführt wird, erzeugt es die folgenden Ergebnisse:

Trace: Inside main function
The minimum is 30
Trace: Coming out of main function

# Und ## Operatoren

# ## Und Vorverarbeitung Operator in C ++ und ANSI / ISO C in es verfügbar ist. # Operator Token Austausch-Text wird auf eine in Anführungszeichen Zeichenfolge umgewandelt werden.

Betrachten Sie das folgende Makrodefinition:

#include <iostream>
using namespace std;

#define MKSTR( x ) #x

int main ()
{
    cout << MKSTR(HELLO C++) << endl;

    return 0;
}

Wenn der obige Code kompiliert und ausgeführt wird, erzeugt es die folgenden Ergebnisse:

HELLO C++

Mal sehen, wie es funktioniert. Verständlicherweise C ++ die folgende Zeile Vorprozessor:

cout << MKSTR(HELLO C++) << endl;

Umgerechnet in:

cout << "HELLO C++" << endl;

## Operatoren werden verwendet, um zwei Token zu verbinden. Hier ist ein Beispiel:

#define CONCAT( x, y )  x ## y

Wenn CONCAT im Programm angezeigt wird, werden seine Parameter verknüpft, und verwendet, um das Makro zu ersetzen. Beispielsweise das Programm CONCAT (HALLO, C ++) wird durch "HALLO C ++" ersetzt, wie in den folgenden Beispielen gezeigt.

#include <iostream>
using namespace std;

#define concat(a, b) a ## b
int main()
{
   int xy = 100;
   
   cout << concat(x, y);
   return 0;
}

Wenn der obige Code kompiliert und ausgeführt wird, erzeugt es die folgenden Ergebnisse:

100

Mal sehen, wie es funktioniert. Verständlicherweise C ++ die folgende Zeile Vorprozessor:

cout << concat(x, y);

Umgerechnet in:

cout << xy;

C ++ vordefinierten Makros

C ++ ist in der Tabelle unten einige vordefinierte Makros zur Verfügung gestellt:

描述
__LINE__ 这会在程序编译时包含当前行号。
__FILE__ 这会在程序编译时包含当前文件名。
__DATE__ 这会包含一个形式为 month/day/year 的字符串,它表示把源文件转换为目标代码的日期。
__TIME__ 这会包含一个形式为 hour:minute:second 的字符串,它表示程序被编译的时间。

Lassen Sie uns diese Makros Beispiele aussehen:

#include <iostream>
using namespace std;

int main ()
{
    cout << "Value of __LINE__ : " << __LINE__ << endl;
    cout << "Value of __FILE__ : " << __FILE__ << endl;
    cout << "Value of __DATE__ : " << __DATE__ << endl;
    cout << "Value of __TIME__ : " << __TIME__ << endl;

    return 0;
}

Wenn der obige Code kompiliert und ausgeführt wird, erzeugt es die folgenden Ergebnisse:

Value of __LINE__ : 6
Value of __FILE__ : test.cpp
Value of __DATE__ : Feb 28 2011
Value of __TIME__ : 18:52:48