Die Builddeskriptoroption v60NumWithCharBehavior wirkt sich auf die EGL-Handhabung des Typs NUM in Zuordnungen und Vergleichen aus.
Ab Version 7 wird der Typ NUM in Zuordnungen und Vergleichen mit CHAR-Werten von EGL wie andere numerische Typen behandelt.
Ist die Builddeskriptoroption v60NumWithCharBehavior mit YES definiert, entspricht die EGL-Verarbeitung von Variablen des Typs NUM der in früheren Versionen und in VisualAge Generator üblichen Verarbeitung. Die Unterschiede im Verhalten sind subtil und komplex. Definieren Sie diese Option nur mit YES, wenn VisualAge Generator emuliert werden muss. Weitere Informationen hierzu können Sie den in diesem Abschnitt angegebenen Beispielen entnehmen.
VisualAge Generator und Version 6.0 verhalten sich für generierte OBOL-Programmen beim Verschieben und Zuweisen von Daten unterschiedlich. In VisualAge Generator wurde das Zeichen des numerischen Werts im Gegensatz zu Version 6.0 nicht vor dem Verschieben oder Zuweisen der Daten geändert. Anders gesagt wurde in VisualAge Generator eine Byte-Verschiebung mit keinerlei Änderungen durchgeführt, während in Version 6.0 zwar auch eine Byte-Verschiebung stattfindet, jedoch erst, nachdem das Zeichen als anzeigbarer NUM-Wert festgelegt wurde. In den meisten Fällen ist dieser Unterschied nicht offensichtlich, er kann sich jedoch auf Verschiebungen auswirken, wenn das NUM-Feld ein Byte enthält, dessen höchstwertiges Halbbyte ein heximales C (x'Cx') enthält. Wenn das gewünschte Ergebnis ist, das Verhalten von VisualAge vollständig zu emulieren, muss der zusätzliche symbolische Parameter VAGNUMWITHCHARBEHAVIOR daher auch auf den Wert 'YES' gesetzt werden.
Die Option v60NumWithCharBehavior kann sich auf das Verhalten anderer Builddeskriptoroptionen, z. B. spacesZero und blanksAsZero, auswirken. Weitere Informationen hierzu finden Sie in spacesZero und blanksAsZero.
In den meisten Fällen ist es nicht erforderlich, die Builddeskriptoroption v60NumWithCharBehavior manuell zu definieren.
if( "2009-03-26" > 0)
...
end
Die Null wird für den Vergleich in "0" geändert. Beim Verhalten von Version 7 ist 0 eine Zahl und der Vergleich schlägt fehl, da "2009-03-26" eine ungültige Zahl ist.
num_var NUM = -4;
char_var CHAR(1);
char_var = num_var; // value of char_var is 't'
Beim Verhalten von Version 7 ergäbe sich der Wert '4' für char_var.