Declare a list of procedure or user-defined function names to the linker
EXTERNAL <idProcedure list>
<idProcedure list> is the list of procedures, user-defined functions, or format procedures to add to the list of routines that will be linked into the current executable (.EXE) file.
EXTERNAL is a declaration statement that specifies uncoded references to the linker. Like all other declaration statements, an EXTERNAL statement must be specified before any executable statements in either the program file, or a procedure or user-defined function definition.
During the compilation of Harbour source code, all explicit references to procedures and user-defined functions are made to the linker. In some instances, there may be no references made to procedure or user-defined function names until runtime. EXTERNAL resolves this by forcing the named procedures or user-defined functions to be linked even if they are not explicitly referenced in the source file. This is important in several instances:
. Procedures, user-defined functions, or formats referenced with macro expressions or variables
. Procedures and user-defined functions used in REPORT and LABEL FORMs and not referenced in the source code . User-defined functions used in index keys and not referenced in the source code
. ACHOICE(), DBEDIT(), or MEMOEDIT() user functions
To group common EXTERNAL declarations together, place them in a header file and then include (#include) the header file into each program (.prg) file that might indirectly use them.
EXTERNAL is a compatibility statement and therefore not recommended. It is superseded by the REQUEST statement that defines a list of module identifiers to the linker.
. These examples are equivalent header files consisting of common EXTERNAL references for REPORT FORMs: // Externals.ch EXTERNAL HARDCR EXTERNAL TONE EXTERNAL MEMOTRAN EXTERNAL STRTRAN // Externals.ch EXTERNAL HARDCR, TONE, MEMOTRAN, STRTRAN