Grenzen des Verfahrens (PL/I)
PL/I-Include PLIINCL
%IF PREP_VAR = 1 %THEN %INCLUDE PLINCL1 ;
%ELSE %INCLUDE PLINCL2 ;
BPLI1: PROC OPTIONS(MAIN);
%DECLARE PREP_VAR FIXED ;
%PREP_VAR = 0 ;
%INCLUDE PLIINCL ;
END;
BPLI2: PROC OPTIONS(MAIN);
%DECLARE PREP_VAR FIXED ;
%PREP_VAR = 1 ;
%INCLUDE PLIINCL ;
END;
Welche Includes werden mit PLIINCL zusammen
aufgenommen?
Notes:
In diesem Beispiel steckt das Problem im Include PLIINCL. Die Definition zeigt, dass in Abhängigkeit von einer Preprocessor-Variablen entweder die eine oder die andere Include-Strecke angezogen wird. Es ist tatsächlich denkbar, dass die Include-Strecken PLIINCL1 und PLIINCL2 für verschiedene Sachgebiete eine unterschiedliche Ausprägung haben, der darumliegende Programmcode jedoch identisch ist. Je nach Sachgebiet würden die Aufrufer dann die Preprocessor-Variable unterschiedlich setzen.
Der SCLM-Parser nimmt einfach bei Includes PLIINCL1 und PLIINCL2 in den Account-Satz zu PLIINCL auf. Das führt allerdings zu zwei unerwünschten Effekten:
- Änderungen an PLIINCL1 führen auch zu einem "reason for rebuild“ bei BPLI2.
- Der Promote von BPLI1 nimmt u.U. auch das Include PLIINCL2 (aus dem fremden Sachgebiet) mit.