Präprozessor
Include-Direktive
#include "<path>"
#include < <path> >
Die Direktive #include
fügt den Inhalt einer anderen Datei ein. Die inkludierte Datei wird durch ihren Pfad referenziert. In der Regel wird er verwendet, um häufig verwendeten Code wie z. B. Bibliotheken zu "importieren". Das Verhalten ist dem des C
-Präprozessors ähnlich.
Beispiel:
In dem folgenden Beispiel inkludiert die Datei a.nc
die Datei b.nc
ein. Bei der Ausführung von a.nc
ersetzt der Interpreter intern die Include-Zeile durch den Text von b.nc
. Daher hat die Ausführung des Programms a.nc
die gleiche Wirkung wie die Ausführung des Programms c.nc
.
FILE a.nc:
G01 X0 Y0 F6000
#include "b.nc"
G01 X0 Y100
FILE b.nc:
G01 Z-2
G01 X100
G01 Z2
FILE c.nc:
G01 X0 Y0 F6000
G01 Z-2
G01 X100
G01 Z2
G01 X0 Y100
- Wenn
path
absolut ist, wird dieser direkt verwendet, um die inkludierte Datei zu finden. Ein absoluter Pfad muss zwischen Anführungszeichen gesetzt werden. - Wenn
path
relativ ist und zwischen Anführungszeichen steht, wird dieser an das Verzeichnis der inkludierenden Datei angehängt, um den Pfad der inkludierten Datei zu bilden. - Wird
path
in spitze Klammern dargestellt, gilt dieser als relativ zu den Pfaden in der Listesearchpath
. Der erste Eintrag in dieser Liste, der zu einer bestehenden Datei führt, wird für die Einbindung verwendet. Die Listesearchpath
wird von der Interpreterumgebung des Interpreters geliefert.
Beispiel:
Das folgende Beispiel geht davon aus, dass die searchpath
auf die Verzeichnisse c:\jjj
und c:\kkk
eingestellt ist. Die Datei aaa.nc
besteht aus einer Reihe von #include
-Direktiven, die im Folgenden erläutert werden.
- Die Datei
bbb.nc
wird über einen absoluten Pfad inkludiert. Daher ist ihr Ort unabhängig vom Ort vonaaa.nc
. Absolute Referenzierung ist nützlich für Dateien, die sich immer an einem festen Ort im Dateisystem befinden. - Die Datei
ccc.nc
ist relativ referenziert. Sie muss sich im Verzeichnis vonaaa.nc
(der inkludierenden Datei) befinden, alsoc:\mmm\
. - Die Datei
ddd.nc
ist ebenfalls relativ referenziert. Sie wird voraussichtlich unterc:\mmm\ooo\ddd.nc
zu finden sein. - Die relative Referenz von
eee.nc
verwendet die Sequenz'..'
, die sich auf das übergeordnete Verzeichnis bezieht. Daher wird die Dateieee.nc
inc:\ppp\qqq\eee.nc
erwartet. - Der relative Pfad von
fff.nc
wird in spitzen Klammern dargestellt. Daher werden die Verzeichnisse imsearchpath
berücksichtigt und nicht das Verzeichnis vonaaa.nc
. Die Datei wird inc:\jjj\fff.nc
oderc:\kkk\fff.nc
erwartet. Der erste Pfad, der zu einer vorhandenen Datei führt, wird berücksichtigt. Wenn sich in keinem Verzeichnis vomsearchpath
eine Dateifff.nc
befindet, wird ein Fehler ausgegeben. - Schließlich wird die Datei
ggg.nc
inc:\rrr\ggg.nc
erwartet. Beide Einträge imsearchpath
führen zu diesem Ort.
FILE c:\mmm\aaa.nc:
#include "c:\nnn\bbb.nc"
#include "ccc.nc"
#include "ooo\ddd.nc"
#include "..\ppp\qqq\eee.nc"
#include <fff.nc>
#include <../rrr/ggg.nc>
- Jede include-Direktive muss in einer eigenen Zeile angegeben werden. Dann wird diese gesamte Zeile durch den Inhalt der inkludierten Datei ersetzt. Ein zusätzliches "Newline"-Zeichen wird angehängt.
- Die Include-Direktive kann mehrfach an beliebigen Stellen der inkludierenden Datei verwendet werden.
- Wenn eine inkludierte Datei nicht existiert, wird ein Fehler ausgegeben.
- Wenn die Include-Direktive nicht an der ersten Position einer Zeile steht, wird ein Fehler ausgegeben.
- Include-Direktiven in inkludierten Dateien werden ebenfalls ersetzt.
- Eine Endlosschleife aufgrund rekursiver Inklusionen (z. B.
A
inkludiertB
,B
inkludiertC
undC
inkludiertA
) wird erkannt und als Fehler gemeldet. - Dieselbe Datei kann mehrfach inkludiert werden.
Die mehrfache Inklusion einer Datei ist in der Regel eine schlechte Praxis. Vor allem, wenn diese Funktion dazu missbraucht wird, Code auszuklammern. Stattdessen sollte eine Funktion bevorzugt werden, um Code zu definieren, der mehrfach wiederverwendet wird (siehe Abschnitt Benutzerdefinierte Funktionen). |
Beispiel:
In dem folgenden Beispiel inkludiert die Datei a.nc
die Datei b.nc
zweimal. Die zweite Inklusion wird immer, unabhängig von der einschließenden Bedingung, durch den Ausdruck IF
-THEN
erweitert. Die inkludierte Datei b.nc
inkludiert selbst die Datei c.nc
.
FILE a.nc:
G01 X100 F6000
#include "b.nc"
G01 Y100
! IF stVariable=47 THEN
#include "b.nc"
! END_IF;
FILE b.nc:
#include "c.nc"
G01 X0 Y0
FILE c.nc:
G01 Z0
Beispiel:
Die Datei x.nc
demonstriert eine Reihe von ungültigen Include-Direktiven. Die ersten drei Zeilen verstoßen gegen die Regel, dass jede include-Direktive in einer eigenen Zeile stehen muss. In den Zeilen 4 und 5 ist der Dateiname nicht richtig in Anführungszeichen oder spitze Klammern eingeschlossen. In Zeile 6 ist eine nicht existierende Datei enthalten. Zeile 7 verstößt gegen die Regel, dass die include-Direktive immer an der ersten Stelle einer Zeile stehen muss. Zeile 8 inkludiert die Datei y.nc
, die wiederum die Datei x.nc
inkludiert. Diese Schleife wird als Fehler ausgegeben.
FILE x.nc:
#include "a.nc" G01 X100
! #include "a.nc"
#include "a.nc" #include "b.nc"
#include a.nc
#include "a.nc>
#include "non_existing_file.nc"
#include "a.nc"
#include y.nc
FILE y.nc:
#include "x.nc"