Wie Birgitta schon geschrieben hat (nur eben im Detail) erzeugt CONST eben eine temporäre Variable in der definierten Länge und kopiert bei Aufruf den angegeben Parameter da hinein.
Die Übergabe erfolgt dann per Reference.
Die Angabe von VARSIZE ist bei Const nur Dokumentation und unnötig.

Die Definition CONST und VALUE sind bei RPGLE ziemlich gleichbedeutend.
In beiden Fällen wird mit einer Kopie gearbeitet. Einzig die interne Übergabe erfolgt etwas anders.
Bei Prozeduren können VALUE-Werte direkt übergeben werden wärend bei CONST wiederum nur die Adresse, also die Referenz auf die Kopie übergeben wird.
Bei externen Programmen kann VALUE nicht angegeben werden, da hier grundsätzlich per Referenz übergeben werden muss.

Noch mal zurück zu VARSIZE.
Übergibt man per Referenz eine Variable, muss ohne VARSIZE immer die Variable entsprechend der Deklaration definiert werden.
Gibt man VARSIZE an, wird nun jede Variable mit Ihrer Adresse akzeptiert (sogar Konstanten), so dass das gerufene Programm auf alles mögliche Zugreifen kann.

Und was das "so falsch" angeht, so mag der Ton falsch angekommen sein, die Aussage ist aber trotzdem korrekt. Ich entschuldige mich bei allen, die das falsch aufgenommen haben.
Wenn ihr euch die Definition von VARSIZE und VARYING mal genau anseht, so kann man das eine mit dem anderen wirklich nicht ersetzen oder austauschen.
Dies betraf allerdings nur diese Aussage:
"Ganz kurz gesagt, das eine benutzt man bei der Variablendefinition das andere bei der Interfache-Parameterdefinition."

Wenn ich eine VARYING-Variable an eine Prozedur mit VARSIZE ohne CONST übergebe, wird die Adresse des Längenattributes und nicht die Adresse des Inhaltes übergeben.
Mit CONST wird eine Kopie ohne Längenattribut in voller Länge übergeben.

Der Compiler sichert überhaupt nichts ab sondern versucht nur die Definitionen zu überprüfen und bei Abweichungen eben abzulehnen. Wenn die Definitionen der beiden betroffenen Komponenten nicht übereinstimmen kommt es häufig genug zu Laufzeitfehlern, die allerdings durchaus auch verspätet aufschlagen. Eine Runtime-Prüfung auf unterschiedlich definierte Schnittstellen erfolgt generell nicht.