EnglischFranzösischSpanisch

Ad


OnWorks-Favicon

icmun - Online in der Cloud

Führen Sie icmun im kostenlosen OnWorks-Hosting-Anbieter über Ubuntu Online, Fedora Online, Windows-Online-Emulator oder MAC OS-Online-Emulator aus

Dies ist der Befehl icmun, der im kostenlosen OnWorks-Hosting-Provider über eine unserer zahlreichen kostenlosen Online-Workstations wie Ubuntu Online, Fedora Online, Windows-Online-Emulator oder MAC OS-Online-Emulator ausgeführt werden kann

PROGRAMM:

NAME/FUNKTION


icmake - Eine Programmpflege (um) Dienstprogramm mit a C-wie Grammatik

ZUSAMMENFASSUNG


icmake [Optionen] Quelle[.im] [Ziel[.bim]] [-- [Argumente]]

icmun bimfile

BESCHREIBUNG


Ich mache(1) kann alternativ zu . verwendet werden um(1). Im Standardbetriebsmodus ist es
ruft folgende Programme auf:

o icm-pp um die icmake-Datei vorzuverarbeiten

o icm-komp Byte-Code kompilieren die icmake s

o icm-exec um die Byte-Code-Datei auszuführen

Ich mache ermöglicht Programmierern die Verwendung einer Programmiersprache (die der bekannten
C-Programmiersprache), um die Aktionen zu definieren, die an einem (komplexen) Programm beteiligt sind
Wartung. Dafür, icmake bietet verschiedene Spezialoperatoren sowie eine Reihe von Unterstützungen an
Funktionen, die sich bei der Programmpflege bewährt haben.

Das Programm icmun(1) kann verwendet werden, um die kompilierte Bytecode-Datei (.bim) zu zerlegen. Icmun
wird hauptsächlich zur Veranschaulichung, Ausbildung und Fehlersuche verwendet.

Herkömmliche Make-Dienstprogramme kompilieren Quellen neu, sobald Header-Dateien geändert wurden. In dem
Kontext von C + + Programmentwicklung ist dies oft eine schlechte Idee, da ein neues Mitglied zu a
class erfordert normalerweise nicht, dass Sie die Sourcen der Klasse neu kompilieren. Klasse behandeln
Abhängigkeiten icmbld(1) darf inspizieren KLASSEN Dateien, die zum Definieren von Abhängigkeiten verwendet werden können
unter den Klassen. Klassenabhängigkeiten werden standardmäßig nicht interpretiert. Siehe die icmconf(7)
man-Seite für weitere Details.

OPTIONAL


Ich mache verwendet die folgenden Dateien und Optionen:

o Quelle: icmake Skriptquelldatei (Standarderweiterung: .Ich bin).

o dest: binär icmake Skriptdatei (Standard: `Quelle'.bim, genannt `.bim-Datei'
unten).

o --: icmake Argumente Trennzeichen Trennen icmake Argumente von übergebenen Argumenten
zur .bim-Dateinl() args: Argumente folgen -- werden an die .bim-Datei übergeben
wie besehen und sind erhältlich bei der Liste argv Parameter definiert als der icmake
Skripts Haupt- zweiter Parameter der Funktion (siehe unten im Abschnitt USER DEFINIERTE
FUNKTIONEN). Für einige Optionen (siehe unten) die -- Trennzeichen ist nicht erforderlich.

Ich mache unterstützt verschiedene Optionen, die im Folgenden beschrieben werden. Die -h Option überschreibt alle anderen
Optionen, die -a Option setzt alle anderen Optionen außer außer Kraft -h. Von der verbleibenden Aktion
Optionen (-B, -C, -e, -ich, -p und -t) darf nur einer angegeben werden:

o -a
Informationen anzeigen über icmake, überstimmt von -h;

o -b
eingestellt: Verwenden Sie stattdessen die Option -e;

o -c
icmake Quelldatei wird kompiliert, wodurch eine .bim-Datei generiert wird;

o -e
Führen Sie die aus icmake .bim-Datei, angegeben als icmake's erstes Dateiargument. Irgendwelche zusätzlichen
Argumente werden unverändert an die .bim-Datei übergeben, und -- sollte nicht angegeben werden;

o -F
die Dateinamen und Flags sowie eine Übersicht aller durchzuführenden Aktionen von
icmake werden im Standardausgabestrom angezeigt;

o -h
Bereitstellung von Nutzungsinformationen und Ende icmake;

o -i
das erste Argument ist das icmake Quelldatei, die Standard-Binärdatei ist
bei Bedarf aufgebaut. Alle zusätzlichen Argumente werden an die .bim-Datei übergeben
wie es ist, und -- sollte nicht angegeben werden;

o -p
icmake Quelldatei wird nur vorverarbeitet und die vorverarbeitete Datei wird geschrieben
zu icmake's zweites Dateiargument (standardmäßig `Quelle'.pim);

o -q
ignoriert, wird in Zukunft entfernt icmake Ausführung;

o -t
das folgende Argument -t ist der Name einer temporären .bim-Datei, die entfernt wird
nachdem icmake's Anruf. Wann . wird als Name der temporären .bim-Datei angegeben
dann das standardmäßige temporäre Verzeichnis, gefolgt von icmake's Prozess-ID, gefolgt von
.bim wird eingesetzt.

Nach dem Namen der temporären .bim-Datei wird der Name der icmake Quellskript
muss angegeben werden. Alle zusätzlichen Argumente werden unverändert an die .bim-Datei übergeben, und
-- sollte nicht angegeben werden; Nach dem Setzen des ausführbaren Flags der Quellskriptdatei
(chmod +x Skript) und mit einer Anfangszeile wie dieser versehen:

#!/usr/bin/icmake -t.

icmake Skript kann direkt aufgerufen werden:

Skript arg1 arg2

in welchem ​​Fall die icmake Skript `Skript' wird ausgeführt, während es die
Argumente Skript Arg1 Arg2.

o -T
diese Option muss mit dem Namen eines Verzeichnisses versehen werden, in dem gespeichert wird
temporäre Dateien. ZB beim Kompilieren eines icmake Skript, die Ausgabe von icmake
Präprozessor ist eine temporäre Datei, die beim Beenden entfernt wird. Standardmäßig / Tmp wird genutzt,
es sei denn / Tmp ist kein beschreibbares Verzeichnis, in diesem Fall ist das des aktuellen Benutzers $ HOME
Verzeichnis verwendet wird. Implizite temporäre Dateinamen beginnen immer mit der Prozess-ID von
die jetzige icmake verarbeiten.

o -v
Display icmake's Versionsnummer und Ende icmake, überstimmt von -h

Icmun:

bimfile: binär icmake Skriptdatei.

PRÄPROZESSOR Richtlinien


Die folgenden Präprozessordirektiven sind verfügbar:

oder kommentieren:
Standard C Kommentar (alles dazwischen /* und */) sowie von Kommentar bis zum Zeilenende (alle
Zeileninhalt folgt //) werden ignoriert.

o Shell-Start: Die erste Zeile des icmake-Skript kann beginnen mit #!Weg, Wobei
Weg definiert den absoluten Standort des icmake Programm. Indem Sie das Skript erstellen
ausführbar, kann es ohne expliziten Aufruf aufgerufen werden icmake.

ZB wenn die erste Zeile einer (ausführbaren) icmakefile 'icm' (ohne Erweiterung)
enthält

#!/usr/bin/icmake -i

dann icm kann als Befehl ausgegeben und somit ausgeführt werden

/usr/bin/icmake -i icm ...

Alternativ

#!/usr/bin/icmake -t /tmp/icm

verwendet werden, was zur Ausführung von

#!/usr/bin/icmake -t /tmp/icm icm ...

In diesem Fall wird die Binärdatei beim Beenden entfernt.

o #einschließen "Dateiname"
Die Datei Dateinamen ist an der Stelle der Richtlinie enthalten

o #einschließen
Die Datei Dateinamen ist am Standort der #einschließen Richtlinie; Dateinamen
wird in den durch Doppelpunkt getrennten Verzeichnissen gesucht, die durch das IM Umwelt
Variable. Das erste Auftreten von Dateinamen in den Verzeichnissen, die von der IM
Umgebungsvariable verwendet wird.

o #define Kennzeichnung [Definition]
Der Text Kennzeichnung wird ersetzt durch Definition. Die Definition kann enthalten
Verweise auf bereits definierte Bezeichner unter Verwendung der ${Bezeichner} Format. Wenn die
${Bezeichner} wurde (noch) nicht definiert, der Text ${Bezeichner} wird buchstäblich gehalten.
Um unendliche Rekursion zu verhindern, höchstens 100 ${Bezeichner} Ersatz ist erlaubt.

Definitionen werden in der nächsten Zeile fortgesetzt, wenn das letzte Zeichen einer Zeile ein a . ist
umgekehrter Schrägstrich (\). (was nicht in der Definition enthalten ist). Der Präprozessor
verkettet Strings mit doppelten Anführungszeichen und Strings mit doppelten Anführungszeichen dürfen nicht mehrere umfassen
Linien. Mehrere Leerzeichen (außerhalb von Strings in doppelten Anführungszeichen) in Definitionen sind
auf ein einziges Leerzeichen zusammengezogen.

Die Definition nach dem #define's Bezeichner ist optional. Wenn weggelassen, wird die
Makro ist definiert, so dass es in verwendet werden kann #if(n)def Richtlinien (siehe unten), aber sie
werden durch keinen Text in ersetzt icmake Code-Anweisungen.

o #ifdef Kennzeichnung
Besitzt das Kennzeichnung Makro wurde der nächste Codeblock definiert (bis ein übereinstimmender #else
or #endif Direktive wurde gelesen) wird bytekompiliert. Andernfalls ist der Codeblock
ignoriert.

o #ifndef Kennzeichnung
Besitzt das Kennzeichnung Makro war nicht den nächsten Codeblock definiert (bis ein übereinstimmender
#else or #endif Direktive wurde erkannt) wird bytekompiliert. Andernfalls ist der Block von
Code wird ignoriert.

o #else
Beendet a #ifdef und #ifndef Direktive, Umkehrung der Annahmeentscheidung über
der folgende Code. Nur einer #else Direktive kann verknüpft werden mit #if(n)def
Richtlinien.

o #endif
Beendet den Präprozessorblock ab dem Matching #ifdef, #ifndef or #else
Richtlinie. Die #endif Verzeichnis und seine Zuordnung #if(n)def Direktive muss sein
in derselben Datei angegeben.

o #undef Kennzeichnung
Entfernen Kennzeichnung aus der Menge der definierten Symbole. Dies hat keinen Einfluss auf die
Angabe von zuvor definierten Symbolen, in denen Identifikatoren Definition
wurde verwendet. Wenn Kennzeichnung nicht definiert wurde, wird eine Warnung ausgegeben.

DATEN TYPES


Ich mache unterstützt diese Datentypen:

o ASCII Charakter konstante
ASCII-Zeichenkonstanten bestehen aus einem Zeichen, umgeben von einfach oder doppelt
Zitate. Einzelne Zeichen (z. B. 'ein') repräsentieren das Zeichen selbst. Standard
Escape-Sequenzen (z. '\n') werden unterstützt und repräsentieren ihren Standard konvertiert
Wert (z. '\n' stellt den ASCII-Wert 10 (dezimal) dar). Nicht-Standard-Flucht
Sequenzen (z. '\x') steht für das ASCII-Zeichen nach dem Escape-Zeichen
(damit '\x' ist gleich 'x'). Escape-Sequenzen bestehend aus drei oktalen Ziffern repräsentieren
das ASCII-Zeichen, das dem Oktalwert modulo 256 entspricht (z. B. '\123').
Escape-Sequenzen bestehend aus einem x gefolgt von zwei hexadezimalen Ziffern repräsentieren
das dem hexadezimalen Wert entsprechende ASCII-Zeichen (z. B. '\xa4').

o int
Integrale Werte im Bereich von -0x8000 bis 0x7fff. int Konstanten können sein
Angabe als Dezimalzahlen (beginnend mit den Ziffern 1 bis 9), Oktalzahlen
(beginnend mit 0, gefolgt von einer oder mehreren oktalen Ziffern) Hexadezimalzahlen
(beginnend mit 0x, gefolgt von einer oder mehreren Hexadezimalziffern) oder as ASCII
Zeichenkonstanten.

o Schnur
Textvariablen. Stringkonstanten werden durch doppelte Anführungszeichen begrenzt. Mehrere Saiten
Konstanten können verkettet werden, aber eine einzelne String-Konstante darf sich nicht über mehrere erstrecken
Linien. Stringkonstanten, die nur durch Leerzeichen getrennt sind (dh Leerzeichen, Zeilenumbrüche,
Kommentar) werden verkettet und stellen eine einzelne Zeichenfolgenkonstante dar. Um einen anzuzeigen
Zeilenende in einer Zeichenfolgenkonstante verwenden die \n Fluchtabfolge.

ASCII-Zeichenkonstanten, die von doppelten Anführungszeichen umgeben sind, können auch in verwendet werden
arithmetische Ausdrücke, wenn einer der Operanden an . ist int. Der einzelne Charakter
Zeichenfolgenkonstante sollen eine Konstante sein und kann nicht a . sein Schnur variabel.

Ebenso können ASCII-Zeichenkonstanten in einfachen Anführungszeichen verwendet werden in
Situationen, in denen ein String-Operand erwartet wird.

o Liste
Eine Datenstruktur, die eine Reihe von einzeln zugänglichen Schnur Werte. Wann
eine Liste enthält Elemente, ihr erstes Element wird durch den Index 0 angezeigt.

o ungültig
Wird mit Funktionsdefinitionen verwendet, um anzuzeigen, dass die Funktion kein a . zurückgibt
Wert.

Variablen können sowohl auf globaler Ebene als auch auf jeder lokalen Ebene im Inneren definiert werden
Funktionen. Wenn innerhalb von Funktionen definiert ist, ist der Standard C Scoping- und Sichtbarkeitsregeln
anwenden. ZB können lokale Variablen nur in sich selbst oder tiefer verschachtelt verwendet werden
Blöcke, ihre Sichtbarkeit wird in tiefer verschachtelten Blöcken maskiert, indem ein identisches
benannte Variable innerhalb dieser tiefer verschachtelten Blöcke. Variablen sind stark typisiert und
kann keinen Typ haben ungültig.

Variablen können bei ihrer Definition initialisiert werden. Initialisierungen sind Ausdrücke, die
kann vordefinierte oder benutzerdefinierte Funktionen, konstante Werte und Werte von Variablen verwenden, die
am Definitionspunkt sichtbar.

VORDEFINIERT Konstanten


Die folgenden Konstanten sind vordefiniert durch icmake. Alle sind konstant int Werte:

─────────────────────────────────
Symbolwert bestimmt für
─────────────────────────────────
O_ALL 8 Makelist
O_DIR 2 Makelist
O_FILE 1-Erstellungsliste
O_SUBDIR 4 Makelist
─────────────────────────────────
AUS 0 Echo
EIN 1 Echo
─────────────────────────────────
P_CHECK 0 Systemaufrufe
P_NOCHECK 1 Systemaufrufe
─────────────────────────────────
S_IEXEC 32-Statistik
S_IFCHR 1-Statistik
S_IFDIR 2-Statistik
S_IFREG 4 Status
S_IREAD 8-Statistik
S_IWRITE 16-Statistik
─────────────────────────────────

Die folgenden Konstanten sind architekturabhängig:

────────────────────────────────────────────────── ────────────
Symbol 1 wenn auf der Plattform definiert, sonst 0
────────────────────────────────────────────────── ────────────
unix Unix, normalerweise mit dem gcc-Compiler von GNU
UNIX kann alternativ verfügbar sein
Linux x86 mit Linux (normalerweise mit gcc)
LINUX kann alternativ verfügbar sein
M_SYSV, M_UNIX x86 mit SCO/Unix
_POSIX _SOURCE Unix mit Posix-kompatiblem Compiler
__hpux HP-UX, mit dem nativen HP-Compiler
────────────────────────────────────────────────── ────────────

BETREIBER


int-typisiert Operand(en):

Alle C Operatoren sind verfügbar (außer Zeigeroperatoren, da icmake nicht unterstützt
Zeiger). Sie funktionieren wie ihre C-Programmiersprachen-Gegenstücke.

string-typisiert Operand(en):

Aussichten für Schnur Typvariablen und/oder Konstanten stehen die folgenden Operatoren zur Verfügung (a und b
vertreten Schnur Variablen oder Konstanten):

o a + b: gibt ein neues zurück Schnur Wert, der die Verkettung von . enthält Schnur Werte a
und b. Beachten Sie, dass Schnur Konstanten können direkt verkettet werden (ohne die +
Operator), z. B. definieren die folgenden beiden Zeilen beide die Zeichenfolge "Hallo Welt":

"Hallo Welt"
"Hallo" + "Welt"

o a += b: a muss ein sein Schnur variabel, auf die die Schnur Variable oder Wert b is
angehängt.

o String-Vergleiche: Operatoren == != <= >= < > != und == kann angewendet werden auf Schnur
Werte oder Variablen, gibt 1 zurück, wenn der Vergleich erfolgreich ist, andernfalls 0.
Beim Vergleich wird die Groß-/Kleinschreibung beachtet und folgt der Reihenfolge oder den Zeichen wie definiert
der ASCII Zeichensatz.

o !a: der boolesche ! (nicht) Operator gibt 1 zurück, wenn die Schnur a ist leer, sonst ist 0
ist zurückgekommen.

o a jünger b, a neuer b: gibt 1 zurück, wenn Datei a ist neuer als Datei b. Z.B,
"source.cc" neuer "source.o". Die Dateien a und b muss nicht existieren: wenn beides nicht existiert
exist 0 wird zurückgegeben; wenn b existiert nicht, 1 wird zurückgegeben; wenn a existiert nicht 0 ist
ist zurückgekommen; wenn sie gleich alt sind, wird 0 zurückgegeben. (das existiert () vordefinierte Funktion
(siehe unten, Abschnitt VORDEFINIERT FUNKTIONEN) kann verwendet werden, um explizit zu testen, ob a
Datei existiert).

o a Telefongebühren sparen b: wird 1 wenn Datei a ist älter als Datei b. Z.B, "libprog.a" Telefongebühren sparen
"source.o". Die Dateien a und b muss nicht existieren: wenn beide nicht existieren 0 ist
ist zurückgekommen; wenn a existiert nicht, 1 wird zurückgegeben; wenn b existiert nicht 0 wird zurückgegeben; wenn
sie sind gleich alt 0 wird zurückgegeben.

o []: Der Indexoperator ruft ein Zeichen aus einer String-Variablen oder -Konstanten ab: it
gibt einen String als an . zurück rWert. Daher kompiliert die folgende Anweisung OK:

// Angenommen str1 und str2 sind Strings
Str1 = Str2[3];

aber die folgende Anweisung wird nicht kompiliert:

str2[3] = "ein";

Eine leere Zeichenfolge wird zurückgegeben, wenn ein ungültiger Indexwert bereitgestellt wird.

o Der `Backtick`-Operator (`Schnur cmd`)
Eine zwischen zwei Backticks platzierte Zeichenfolge wird vom Popen(3) Funktion. Die
Standardausgabe, die durch den Befehl generiert wird, der im String-Argument gespeichert ist, ist
als Liste zurückgegeben. Eine leere Liste zeigt an, dass der Befehl nicht ausgeführt werden konnte.
Ein Befehl, der ausgeführt werden konnte, aber keine Ausgabe erzeugte, gibt eine Liste zurück
enthält ein leeres Element. Die Standard-Fehlerstromausgabe des Befehls ist nicht
vom Backtick-Operator gesammelt. Die Standard-Shell-Umleitung könnte jedoch sein:
wird verwendet, um die Ausgabe des Standardfehlerstroms zu sammeln. Beispiel:

printf(`"ls"`); // druckt die Elemente in
// das aktuelle Verzeichnis

Die vordefinierte Funktion eval (Zeichenfolge cmd) verhält sich genau wie der Backtick
Operator: Sie sind Synonyme.

Listentyp Operand(en):

Aussichten für Liste Typvariablen und/oder Werten stehen folgende Operatoren zur Verfügung:

o a + b: gibt ein neues zurück Liste Wert, der die Verkettung von . enthält Liste Werte a und
b. Dies ist nicht eine Mengenoperation: wenn ein Element sowohl in a und im b, Sie werden
erscheinen zweimal in der resultierenden Liste (Set-Addition wird von der eingebauten
Funktion Listenunion).

o a - b: gibt ein neues zurück Liste Wert, der die Elemente in . enthält a die nicht vorhanden sind
in b. Dies is eine Set-Differenz-Operation: die zurückgegebene Liste enthält alle Elemente
in a das sind keine Elemente von b.

o a += b: Elemente in b werden zu den Elementen in . hinzugefügt a, das muss a . sein Liste
Variable. Das ist nicht eine Satzoperation.

o a -= b: Elemente in b werden aus den Elementen in . entfernt a, das muss a . sein Liste
Variable. Dies is eine Mengenoperation: alle Elemente von a die gefunden werden in b sind
entfernt von a.

o Gleichheitsvergleiche auflisten: Operatoren != und == kann angewendet werden auf Liste Werte oder
Variablen. Operator == gibt 1 zurück, wenn beide Listen Element für Element identisch sind
Elemente, ansonsten wird 0 zurückgegeben. Operator != kehrt das Ergebnis von um ==.

o !a: der boolesche ! Operator gibt 1 zurück, wenn der Liste a ist leer, sonst ist 0
ist zurückgekommen.

o []: Der Indexoperator ruft ein Listenelement aus einer Listenvariablen ab: er gibt a . zurück
Zeichenfolge als an rWert. Daher kompiliert die folgende Anweisung OK:

// Angenommen, lst ist eine Liste, str ist ein String
str = lst[3];

aber die folgende Anweisung wird nicht kompiliert:

lst[3] = str;

Eine leere Zeichenfolge wird zurückgegeben, wenn ein ungültiger Indexwert bereitgestellt wird.

Gießen:

Typumwandlungen können mit dem Standard durchgeführt werden C Cast-Operator zu gießen:

o Strings in Ints und umgekehrt ((int)"123", (Saite)55)

o Strings zu Listen (Liste lst = (Liste)"Hallo")

FLOW STEUERN


Ich mache bietet die folgende Untermenge von C's Aussagen. Sie können wie in der verwendet werden C
Programmiersprache.

o Ausdruck ;
Die einfache Ausdrucksanweisung;

o Die zusammengesetzte Aussage
Variablen jeglichen Typs können überall innerhalb einer beliebigen Verbindung definiert und initialisiert werden
Aussage. Das Sichtbarkeit einer Variablen beginnt an ihrem Definitionspunkt.

o if (Zustand) Aussage
Innerhalb der Bedingung kann eine Variable definiert und initialisiert werden. Z.B,

if (string str = getText())
Prozess(str);

In diesem Beispiel Prozessdefinierung heißt nicht wenn getText () gibt einen leeren String zurück. Die
Variable str existiert weder vor noch nach dem if Aussage.

o if (Zustand) Aussage sonst Aussage
Wie bei der vorherigen Anweisung kann innerhalb der Bedingung eine Variable definiert werden und
initialisiert.

o für (drin; Bedingung; Zuwachs) Aussage
Variablen (eines einzelnen Typs) können in der initialisiert (und optional definiert) werden
init Sektion. Die init, Zustand und Zuwachs Abschnitte können leer bleiben. Die
leerer Bedingungsabschnitt wird als "immer" interpretiert was immer dies auch sein sollte.'.

o während (Zustand) Aussage
Innerhalb der Bedingung kann eine Variable definiert und initialisiert werden.
Ein ergänzendes do ... während() Aussage ist nicht verfügbar. Beachten Sie, dass die Definition von a
Variable bedeutet die Verwendung eines Initialisierungsausdrucks, dass die Initialisierung
Das Ausdrücken wird bei jeder Iteration des ausgeführt während Stellungnahme. Also folgendes
-Anweisung endet nie und zeigt einen nie endenden Strom von Werten 10 an:

während (int x = 10)
printf(x--, "\n");

o zurück; und Rückkehr Ausdruck;
Ebene Rückkehr Aussagen können in verwendet werden ungültig Funktionen und Rückkehr Ausdruck
Anweisungen werden in anderen Arten von Funktionen verwendet. Die Funktion Haupt- hat Rückgabetyp
ungültig und so in Haupt- nur schlicht Rückkehr Aussagen verwendet werden können. Standardmäßig und icmake
Der Exit-Wert des Skripts ist gleich 0. Verwenden Sie die integrierte Funktion wunsch (siehe unten) zu spezifizieren
jeder andere Exit-Wert.

Be empfohlen: Das Verhalten von Nicht-Void-Funktionen, die keine Werte zurückgeben, ist undefiniert.

o brechen
Blätter für und während Anweisungen, die die Bedingung der Anweisung außer Kraft setzen.

o fortsetzen
Fortsetzung mit der nächsten Iteration von a für or während Aussage.

o Ausgang (Ausdruck)
Beendet die Ausführung von an icmake-Skript. Die Ausdruck muss zu einem evaluieren int
value, der zum Exit-Wert des Skripts wird.

VORDEFINIERT FUNKTIONEN


Ich mache bietet die folgenden vordefinierten Funktionen, die überall in icmake
Skripte. Die folgende Übersicht ist alphabetisch nach Funktionsnamen geordnet.

o ungültig arghead (string h)
Helferfunktion von exec () (siehe auch unten bei exec ()): definiert den `Argumentkopf',
verwendet werden mit exec (). Standardmäßig ist der `Argumentkopf' ein leerer String.

o ungültig argschwanz (String t)
Helferfunktion von exec () (siehe auch unten bei exec ()): definiert den `Argument Tail',
verwendet werden mit exec (). Standardmäßig ist der `Argument Tail' ein leerer String.

o int ASCII (Zeichenfolge) s)
Gibt das erste Zeichen von zurück s als int; z.B, ascii("A") gibt 65 zurück;

o Schnur ASCII (int i)
Rücksendungen i als Zeichenfolge, z. ASCII(65) Gibt die Zeichenfolge zurück "A";

o Schnur change_base(Zeichenfolge Datei, Schnur neue Basis)
Ändert den Basisnamen von Datei, gibt den geänderten Namen zurück. Z.B,
change_base("/path/demo.im", "aus") Rückgabe "/pfad/out.im";

o Schnur change_ext(Zeichenfolge Datei, Schnur neuer)
Ändert die Erweiterung von Datei, gibt den geänderten Namen zurück. Z.B,
rss_changeExt("source.cc", "Ö") Rückgabe "source.o";

o Schnur change_path(Zeichenfolge Datei, Schnur neuer Weg)
Ändert die Pfadangabe von Datei, gibt den geänderten Namen zurück. Z.B,
change_path("tmp/binär", "/ usr / bin") Rückgabe "/usr/bin/binär". Notiere dass der
/-Trennzeichen wird bei Bedarf eingefügt.

o Schnur chdir (Zeichenfolge neuesdir)
Ändert das Arbeitsverzeichnis des Skripts, gibt das vorherige Verzeichnis als absolutes zurück
Pfad.

Verwenden Sie die chdir(."") um das aktuelle Arbeitsverzeichnis zu erhalten, chdir("") kann verwendet werden, um
Besorgen Sie sich das Start-Arbeitsverzeichnis (diese Funktionalität war in Releases defekt
vor 7.00 Uhr, ist aber jetzt betriebsbereit). Die Funktion beendet die
icmake-script, wenn das angegebene neuerdir ist nicht vorhanden.

o Schnur chdir(int Überprüfung, Schnur neuesdir)
Gleiche Funktionalität wie die vorherige Funktion, aber durch Angabe von Überprüfung as
P_NOCHECK. die Funktion beendet das Skript nicht. Vielmehr wird es die zurückgeben
das aktuelle Arbeitsverzeichnis des Skripts.

o cmdhead (Zeichenfolge) h)
Helferfunktion von exec () (siehe auch unten bei exec ()): Definiert einen `Befehlskopf', um
mit verwendet werden exec (). Standardmäßig ist der `Befehlskopf' ein leerer String.

o cmdtail (Zeichenfolge t)
Helferfunktion von exec () (siehe auch unten bei exec ()): Definiert ein `Befehlsende', um
mit verwendet werden exec (). Standardmäßig ist das `Befehlsende' ein leerer String.

o echo (int entscheiden)
Steuert das Echo von aufgerufenen Programmen (und ihren Argumenten), spezifizieren OFF wenn es widerhallt
wird nicht verlangt. Standardmäßig Echo (EIN) wird eingesetzt.

o Schnur Element (int Index, Liste (oder Schnur) var)
Wirkt identisch mit dem Indexoperator: siehe Index ([]) Operator im
Abschnitt BETREIBER.

o Liste eval (Zeichenfolge Str)
Diese Funktion verhält sich identisch zum Backtick-Operator. Das mitgelieferte Beispiel
der Backtick-Operator hätte also auch so geschrieben werden können:

printf(eval("ls")); // gibt die Elemente im aktuellen aus
// Verzeichnis

o exec (Zeichenfolge cmd, ...)
Führt Befehl mit Argumenten aus. Jedem Argument wird vorangestellt Argkopf ()
Argument und postfixed by argschwanz()'s Argument. Beachten Sie, dass keine Leerzeichen eingefügt werden
zwischen Argkopf ()'s Inhalt, das eigentliche Argument und argschwanz()'s Argument. Alle
so werden modifizierte Argumente verkettet, diesmal durch einzelne Leerzeichen getrennt, und
dann cmdhead()Der Inhalt von wird zwischen dem Befehl und dem ersten Argument eingefügt
(beidseitig durch einzelne Leerzeichen begrenzt) und cmdtail()'s Inhalt wird angehängt
zu den Argumenten (wiederum durch ein einzelnes Leerzeichen getrennt). PATH wird gesucht um zu finden
cmd. 0 wird zurückgegeben.

o ausführen (int checkcmd, Schnur cmd, ...)
Gleiche Funktionalität wie die vorherige Funktion, aber durch Angabe von Überprüfung as
NICHT GEPRÜFT die Funktion beendet das Skript nicht. Vielmehr wird es die zurückgeben
Exit-Status des aufgerufenen Befehls, oder 0x7f00 wenn der Befehl nicht gefunden wurde.

o ausführen(string cmd, Schnur cmdhd, Schnur arghd, ... Schnur Argtl, Schnur cmdtl)
Das gleiche wie exec (), aber der Befehl head/tail und das Argument head/tail müssen angegeben werden.

Der tatsächlich ausgeführte Befehl beginnt mit cmd, Gefolgt von cmdhd. Als nächstes kommt eine Serie
von Argumenten folgt, jeweils eingeschlossen von arghd und Argtl. Der Befehl endet mit
cmdtl. 0 wird zurückgegeben

o ausführen (int Überprüfung, Schnur cmd, Schnur cmdhd, Schnur arghd, ... Schnur Argtl,
Schnur cmdtl)
Gleiche Funktionalität wie die vorherige Funktion, aber durch Angabe von Überprüfung as
NICHT GEPRÜFT die Funktion beendet das Skript nicht. Vielmehr wird es die zurückgeben
Exit-Status des aufgerufenen Befehls, oder 0x7f00 wenn der Befehl nicht gefunden wurde.

o int existiert(string Datei)
Gibt einen Wert ungleich Null zurück, wenn Datei existiert, andernfalls wird 0 zurückgegeben.

o Liste fgets(Zeichenfolge Datei, Liste Versatz)
Anmerkungen: in icmake Version 8.00.00 wurde der Prototyp dieser Funktion geändert von
Liste fgets(Zeichenfolge Datei, int Versatz) zu Liste fgets(Zeichenfolge Datei, Liste Versatz).

Die nächste Zeile, die am Offset in gefunden wird Offset ist gelesen aus Datei. Pass ein
leere Liste zu fgets lesen Datei von Anfang an.

Es gibt eine Liste zurück, die als erstes Element den Inhalt der gelesenen Zeile enthält
(ohne das \n Zeilenabschluss), als zweites Element der Zeilenabschluss `\n'
(falls angetroffen) und als drittes Element die Zeichenfolge OK wenn eine Zeile erfolgreich war
lesen, FAIL wenn das Lesen aus der Datei fehlgeschlagen ist. Beim Lesen bei EOF ist eine leere Liste
ist zurückgekommen. Die zurückgegebene Liste kann zusätzliche Elemente enthalten, die intern
genutzt von fgets beim Lesen der nächsten Zeile.

Um mehrere Zeilen zu lesen, übergeben Sie zunächst eine leere Liste als bekommt's zweite Argumentation.
Um nachfolgende Zeilen zu lesen, übergeben Sie die zuvor zurückgegebene Liste an fgets zweite
Argument.

Hier ist ein Beispiel, das zeigt, wie eine vollständige Datei gelesen wird:

Liste ret;
while (1)
{
ret = fgets("Dateiname", ret);
wenn (!ret)
break;
Prozess (ret[0], ret[1]);
}

o int fprintf(Zeichenfolge Dateiname, ...)
Fügt alle (durch Kommas getrennten) Argumente an die Datei an Dateinamen. Gibt die Anzahl von zurück
gedruckte Argumente.

o int fprintf(Zeichenfolge Dateiname, Schnur Format ...)
Fügt alle (durch Kommas getrennten) Argumente an die Datei an Dateinamen. Gibt die Anzahl von zurück
gedruckte Argumente.

If Format enthält Platzhalter %1 .. %n die Ausgabe wird formatiert (siehe auch
strformat). Beachten Sie, dass in diesem Fall das Zählen von Argumenten (auch) über die
format string: das erste folgende Argument Format wird bezeichnet als %1.

o Schnur get_base(Zeichenfolge Datei)
Gibt den Basisnamen von . zurück Datei. Der Basisname ist die Datei ohne Pfadpräfix
und ohne seine Erweiterung. Die Erweiterung sind alle Infos ab dem Finale
Punkt im Dateinamen. Wenn kein abschließender Punkt gefunden wird, ist der Dateiname der Basisname.
ZB der Basisname von ab ist gleich a, der Basisname von ABC ist gleich ab, die Basis
Name von ABC ist gleich c.

o Schnur erhalten()
Gibt die nächste gedrückte Taste als String zurück (das Drücken von `Enter' ist nicht erforderlich).

o Schnur get_dext(Zeichenfolge Datei)
Gibt die Erweiterung von zurück Datei, einschließlich des Trennpunktes. Die Erweiterung ist alles
Informationen beginnend am letzten Punkt des Dateinamens.

Wenn kein abschließender Punkt gefunden wird, wird eine leere Zeichenfolge zurückgegeben.

o Liste getenv(Zeichenfolge envvar)
Gibt den Wert der Umgebungsvariablen zurück Umgebungsvar in einer Liste mit zwei Elementen:

das erste Element gibt an, ob die Umgebungsvariable definiert wurde (Wert
"1") oder nicht (Wert "0");
das zweite Element gibt den Wert der Umgebungsvariablen an.

Umgebungsvariablen haben die Form Variable=Wert, und falls definiert die Liste
zweites Element enthält Wert. Wenn der Wert leer ist, ist die Variable definiert, aber
ist kein Text damit verbunden.

o Schnur get_ext(Zeichenfolge Datei)
Gibt die Erweiterung von zurück Datei, außer dem Trennpunkt. Die Erweiterung ist alles
Informationen beginnend am letzten Punkt im Dateinamen.

Wenn kein abschließender Punkt gefunden wird, wird eine leere Zeichenfolge zurückgegeben.

o int getpid()
Gibt die Prozess-ID des icmake-Bytecode-Interpreters zurück icm-exec.

o Schnur bekommt ()
Gibt die nächste von der Tastatur gelesene Zeile als a . zurück Schnur. Die eingegebene Zeile auf dem
Tastatur muss mit einer `Enter'-Taste abgeschlossen werden, die nicht im zurückgegebenen
String.

o Schnur get_path(Zeichenfolge Datei)
Gibt das Pfad-Präfix von . zurück Datei. Das Pfadpräfix sind alle Informationen bis (und
einschließlich) das letzte Verzeichnistrennzeichen (das je nach Betriebssystem
System, ein Vorwärts- oder Backslash).

Wenn kein Pfad gefunden wird, wird ein leerer String zurückgegeben.

o int listfind(liste Erste, Schnur Str)
Gibt den ersten Index in zurück lst wo die Saite str gefunden wird, oder -1 wenn lst nicht
enthalten str.

o int listenlen(liste l)
Gibt die Anzahl der Elemente in zurück Liste.

o Liste Listenunion (Liste links, Liste rechts)
Gibt eine Liste mit der Vereinigung der Elemente in zurück lhs und rhs.

o Liste Listenunion (Liste Erste, Schnur Str)
Gibt eine Liste mit der Vereinigung der Elemente in zurück lst und str.

o Liste Makelist(string Maske)
Gibt eine Liste aller übereinstimmenden Dateien zurück Maske". Z.B, makelist("*.c") gibt eine Liste zurück
enthält alle Dateien mit der Endung .c.

o Liste Makelist (Typ, Schnur Maske)
Identisch mit der vorherigen Funktion, aber der Typ der Verzeichniselemente kann
als erstes Argument angegeben:

Symbolbedeutung
IS_ALL alle Verzeichniseinträge abrufen
IS_DIR erhält alle Verzeichnisse, einschließlich . und ..
IS_FILE eine Liste der Dateien abrufen
IS_SUBDIR alle Unterverzeichnisse abrufen

Beachten Sie, dass das Muster * passt nicht zu versteckten Einträgen unter Unix-Betrieb
Systeme. Verwenden .* dafür.

o Liste Makelist(string Maske, neuer, Schnur Vergleichsdatei)
Gibt eine Liste aller Dateien zurück, die mit der Maske übereinstimmen, die neuer als die angegebene sind
Vergleichsdatei. Operator jünger kann anstelle von verwendet werden neuer. Beachten Sie, dass neuer und
jünger sind Operatoren, keine Strings.

o Liste Makelist([int = IS_FILE,] Schnur Maske, neuer, Schnur Vergleichsdatei)
Wie die vorherige Funktion, aber tippe kann als in . angegeben werden Liste Makelist (Typ,
Schnur Maske).

o Makelist(string Maske, älter, Schnur Vergleichsdatei)
Siehe oben; gibt eine Liste von Dateien zurück, die älter als die Vergleichsdatei sind.

o Makelist (Typ, Schnur Maske, älter, Schnur Vergleichsdatei)
Wie die vorherige Funktion, aber tippe kann als in . angegeben werden Liste Makelist (Typ,
Schnur Maske).

o int printf(...)
Zeigt alle (durch Kommas getrennten) Argumente auf dem Bildschirm an (dh den Standardausgabestrom).
Gibt die Anzahl der gedruckten Argumente zurück.

o int printf(Zeichenfolge Format ...)
Zeigt alle (durch Kommas getrennten) Argumente auf dem Bildschirm an (dh den Standardausgabestrom).
Gibt die Anzahl der gedruckten Argumente zurück (die Format Zeichenfolge zählt als ein Argument).

If Format enthält Platzhalter %1 .. %n die Ausgabe wird formatiert (siehe auch
strformat).

o int putenv(Zeichenfolge envvar)
Fügt Umgebungsvar zum aktuellen (icmake) Umgebung Verwenden Sie das Format: "VAR=Wert".
Rückgabe 0.

o Schnur Größe ändern (Zeichenfolge) Straße, int neue Länge) Gibt eine Kopie von string zurück str, verkleinert auf
neue Länge Zeichen. Wenn neue Länge negativ ist, wird ein leerer String zurückgegeben,
if neue Länge übersteigt str's Länge dann werden die neu hinzugefügten Zeichen initialisiert
zu Leerzeichen.

o int sizeof(Liste l)
Veraltet: verwenden listenlen.

o int sizeoflist(Liste l)
Veraltet: verwenden listenlen.

o Liste stat (Zeichenfolge Eintrag)
Rücksendungen Zustand(2) Informationen zum Verzeichniseintrag Eintrag als Liste. Die zurückgegebene Liste
hat zwei Elemente: Element 0 ist das Attribut Wert, Element 1 enthält die Größe von
die Datei.

Attribute werden als Bit-Flags zurückgegeben, die aus den folgenden vordefinierten
Konstanten:

S_IFCHR S_IFDIR S_IFREG
S_IREAD S_IWRITE S_IEXEC

Siehe die Zustand(2) Handbuchseite für die Bedeutung dieser Konstanten.

o Liste stat (überprüfen, Schnur Eintrag)
Wie die vorherige Funktion, aber durch Angabe von Überprüfung as P_NOCHECK die Funktion
beendet das Skript nicht. Vielmehr kehrt es zurück Zustand(2) Rückgabewert.

o int strchr(Zeichenfolge Straße, Schnur Zeichen)
Gibt den ersten Index in zurück str wo einer der Charaktere in Zeichen gefunden wird, oder -1
if str enthält keines der Zeichen in Zeichen.

o int strlen(Zeichenfolge Str)
Gibt die Anzahl der Zeichen in zurück str (ohne die letzten 0 zu zählen).

o int strfind(Zeichenfolge Heuhaufen, Schnur Nadel)
Rückgabeindex in Heuhaufen woher Nadel gefunden wird, oder -1 wenn Nadel ist nicht enthalten
in Heuhaufen.
Dieser Funktion wurde namens strstr() in Versionen Bevor 7.00.

o int strformat(Zeichenfolge Format,...)
Gibt eine formatierte Zeichenfolge mit den Platzhaltern %1 .. %2 zurück, um Argumente zu adressieren
folgendes Format.
Beispiel:

void main ()
{
int i = 10;
intj = 20;
Zeichenfolge s1;
Zeichenfolge s2;
// traditioneller Ansatz:
s1 = (Zeichenfolge)i + " " + (Zeichenfolge)j + " " + (Zeichenfolge)i;
// strformat verwenden:
s2 = strformat("%1 %2 %1", i, j);
printf("s1 = %1, s2 = %2\n", s1, s2);
}

o Schnur strlwr(Zeichenfolge s)
Gibt ein Duplikat von in Kleinbuchstaben zurück s.

o Liste strtok (String Straße, Schnur Trennzeichen)
Gibt eine Liste mit allen Teilstrings von zurück str durch ein oder mehrere getrennt
(aufeinanderfolgende) Zeichen in Separatoren. Z.B, strtok("Hallo icmakes+Welt", " +")
gibt die Liste mit den drei Strings zurück "Hallo", "icmakes" und "Welt".

o Schnur strupr (Saite) s)
Gibt ein Duplikat von in Großbuchstaben zurück s.

o Schnur substr(Zeichenfolge Text, int Offset, int zählen)
Gibt eine Teilzeichenfolge von zurück Text, beginnt um Offset, bestehend aus zählen Zeichen. Wenn
Offset überschreitet (oder gleich) die Größe des Strings oder wenn zählen <= 0, dann eine leere Zeichenfolge
ist zurück gekommen. Wenn Offset kleiner als 0 ist, wird 0 verwendet.

o int System (Zeichenfolge Befehl)
Führt aus Befehl. Der Rückgabewert gibt den Exit-Wert des ausgeführten Befehls an. Die
Schnur Befehl kann Umleitungs- und/oder Piping-Zeichen enthalten.

o int System (int Überprüfung, Schnur Befehl)
Gleiche Funktionalität wie die vorherige Funktion, aber durch Angabe von Überprüfung as
NICHT GEPRÜFT die Funktion beendet das Skript nicht. Vielmehr wird es die zurückgeben
Exit-Status des aufgerufenen Befehls, oder 0x7f00 wenn der Befehl nicht gefunden wurde.

o Schnur trimmen (string s)
Gibt eine Kopie von zurück s ohne führende und nachgestellte Leerzeichen.

o Schnur trimlinks (String Str)
Gibt eine Kopie von zurück s ohne führende Leerzeichen.

o Schnur trimmen (string s)
Gibt eine Kopie von zurück s ohne nachfolgende Leerzeichen.

USER DEFINIERTE FUNKTIONEN


ungültig Haupt-

Ich mache Skripte müssen mit einer benutzerdefinierten Funktion versehen werden Haupt-. Die Funktion Haupt- hat
drei optionale Parameter, die beim letzten weggelassen werden können (envp) zum ersten
(Argc), wie in C. Sein vollständiger Prototyp ist (Hinweis: ungültig Rückgabetyp):

void main(int argc, list argv, list envp)

In Main(),

o Argc repräsentiert die Anzahl der Elemente in argv;

o argv enthält die Argumente, wobei Element 0 gleich dem Namen der .bim . ist
Datei;

o envp enthält die `environment'-Variablen. Die Funktion listenlen kann benutzt werden um
Bestimmen Sie die Anzahl seiner Elemente. Elemente in envp habe das Formular
Variable=Wert. Alternativ kann die Funktion getenv kann verwendet werden, um a . abzurufen
bestimmte Umgebungsvariable sofort. Beispiel:

void main(int argc, list argv)
{
list toCompile;
int idx;

wenn (argc == 1)
use(element(0, argv));

if (toCompile = altered("*.cc"))
{
for (idx = length(toCompile); idx--; )
compilieren(element(idx, toCompile));

if (getenv("dryrun")[0] == "0")
Verknüpfung (Element (2, argv));
}
}

Nachdem Sie alle globalen Variablen in der Reihenfolge ihrer Definitionen initialisiert haben Haupt- wird von aufgerufen
icmake's Laufzeitunterstützungssystem, um zusätzliche Aufgaben auszuführen.

zusätzlich definiert Benutzer Funktionen

Zusätzliche Funktionen können definiert werden. Einmal definiert, können diese Funktionen aufgerufen werden. Nach vorne
Referenzieren von Variablen oder Funktionen wird nicht unterstützt, aber rekursiv aufrufen
Funktionen ist. Da Funktionsdeklarationen nicht unterstützt werden, wird indirekte Rekursion nicht unterstützt
auch unterstützt.

Benutzerdefinierte Funktionen müssen die folgenden Elemente haben:

o Der Rückgabetyp der Funktion, der einer von . sein muss Leere, int, Schnur or Liste. Da
ist kein Standardtyp.

o Der Name der Funktion, z. kompilieren.

o Eine Parameterliste, die null oder mehr durch Kommas getrennte Parameter definiert. Die Parameter
selbst bestehen aus einem Typnamen (int, Schnur, oder Liste) gefolgt von dem
Kennung des Parameters. Z.B, (String Outfile, Schnur Quelle).

die a Körper umgeben von einem Paar geschweifter Klammern ({ und }).

Funktionskörper können (optional initialisierte) Variablendefinitionen enthalten. Variable
Definitionen beginnen mit einem Typnamen, gefolgt von einem oder mehreren Kommas getrennt (optional
initialisierte) Variablenbezeichner. Wenn eine Variable nicht explizit initialisiert wird, ist sie
standardmäßig initialisiert. Standardmäßig und int Variable wird auf 0 initialisiert, a Schnur is
initialisiert mit einem leeren String ("") Und eine Liste wird mit einer Liste von null Elementen initialisiert.

Neben Variablendefinitionen können Körper null oder mehr Anweisungen enthalten (vgl.
Abschnitt FLOW STEUERN). Beachten Sie, dass Variablen definiert (und optional initialisiert) werden können.
überall innerhalb von Funktionen und auch in ob, für und während Aussagen.

Das Verhalten von icmake-Skripte, die nicht-void-Funktionen verwenden, die keine Werte zurückgeben, ist es nicht
definiert.

Verwenden Sie icmun online mit den onworks.net-Diensten


Kostenlose Server & Workstations

Laden Sie Windows- und Linux-Apps herunter

Linux-Befehle

Ad