Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Konzept der Namens-Adaptermodule im C-Laufzeitsystem

&pagelevel(3)&pagelevel

Bezüglich der C-Bibliotheksfunktionen besteht das Problem, dass einerseits die Namen, mit denen die Funktionen auf Quellprogrammebene angesprochen werden, durch Standards vorgeschrieben sind (z.B. printf, fopen), dass andererseits die BS2000-Namenskonventionen Entry-Namen verlangen, die mit dem Präfix „IC“ beginnen. Außerdem ist gefordert, dass die C-Bibliotheksfunktionen durch benutzereigene Funktionen ersetzt werden können, in denen die Entry-Namen aus dem Funktionsnamen ohne das Präfix „IC“ gebildet werden.

Dieses Problem wurde bis zur CRTE-Version 1.0B dadurch gelöst, dass der Compiler mithilfe einer Tabelle die Funktionsnamen erkannt und entsprechend umgesetzt hat. Dies hatte zur Folge, dass Änderungen im C-Laufzeitsystem immer mit Änderungen im Compiler verbunden waren. Diese Technik wird aus Kompatibilitätsgründen für die bis dahin im C-Laufzeitsystem vorhandenen C-Bibliotheksfunktionen (Funktionen des C90-Standards sowie ca. 50 BS2000-spezifische Erweiterungen) beibehalten. Für alle mit CRTE ab V2.0A namentlich neu hinzugekommenen POSIX-Funktionen und in Zukunft neu hinzukommenden Funktionen wird das Problem compilerunabhängig mit Namens-Adaptermodulen gelöst. Diese Adaptermodule enthalten den aus dem Funktionsnamen abgeleiteten Entry-Namen ohne das Präfix „IC“ und rufen die eigentliche „Standard“-Funktion mit dem Entry-Namen IC... auf.

Pro C-Bibliotheksfunktion stehen folgende Adaptermodule zur Verfügung:

  • Ein Objektmodul (OM) mit dem ggf. auf 8 Zeichen verkürzten Funktionsnamen als Entry-Name, in dem die Kleinbuchstaben in Großbuchstaben und der Unterstrich in das Dollarzeichen umgewandelt sind. Z.B. FPATHKON für die Funktion fpathkonv.

    Diese sind nur noch relevant, wenn Objektmodule gebunden werden, die mit den C/C++-Vorgänger-Compilern (bis V2.2) erzeugt wurden. C/C++ ab V3 erzeugt ausschließlich Module im LLM-Format.

  • Bis zu vier LLMs, in denen jeweils der unverkürzte Funktionsname als Entry-Name enthalten ist, aber einmal in Kleinbuchstaben oder in Großbuchstaben, einmal mit beibehaltenem oder mit umgewandeltem Unterstrich (vgl. die Optionen LOWER-CASE-NAMES und SPECIAL-CHARACTERS in der MODIFY-MODULE-PROPERTIES-Anweisung).

    Z.B. liegen für die Funktion fpathkonv zwei LLMs vor, die die Entry-Namen FPATHKONV bzw. fpathkonv enthalten.

Die Adaptermodule gehören zu den nicht vorladbaren Bestandteilen des C-Laufzeitsystems und müssen deshalb in das Anwendungsprogramm eingebunden werden. Sie sind sowohl in der Bibliothek SYSLNK.CRTE als auch in der Bibliothek SYSLNK.CRTE.PARTIAL-BIND enthalten.

Wenn an Stelle der Bibliotheksfunktion die benutzereigene Funktion aufgerufen werden soll, muss das entsprechende Benutzermodul vorrangig vor der Bibliothek SYSLNK.CRTE bzw. SYSLNK.CRTE.PARTIAL-BIND eingebunden werden. Das Benutzermodul kann ein Objektmodul oder ein LLM (mit oder ohne Umwandlung der Kleinbuchstaben und des Unterstrichs) sein.