Joined: 06 Jun 2008 Posts: 8280 Location: Dubuque, Iowa, USA
Site standards are typically the driving force. If modules B and C are dynamically called, there's no requirement to recompile any but the changed module -- but site standards may dictate otherwise.
Sites may mandate, for example, that all programs that use a copy book be recompiled if the copy book changes -- even if there's no length change involved -- just to ensure that all programs are current with the copy book.
There can be many reasons why an installation decides to do things a particular way.
1) The 'called' modules are linkedited with NCAL, so the 'driver' program - Program A - resolves all references. Since Program B didn't change, the unchanged version will be included at linkedit.
2) If the 'called' modules are not linkedited with NCAL, then Program B resolves the changed Program C at linkedit. Program B is then resolved by Program A's linkedit.
3) In this scenario, I'd say that the 'called' programs are dynamically called (FETCHed). These programs are not resolved at linkedit, being resolved at execution time. There is no dependency on the programs being 'online'.
From my point of view, if resolving modules at linkedit, it is preferable to specify NCAL for the sub-modules. Where multiple modules resolve a program name, which copy of that module is in effect is dependent on the linkage editor's selection. All copies, however, contribute to the load module size. Using NCAL for submodules removes the uncertainty and results in a smaller load module.