Geoff Chappell - Software Analyst
A command-line token that does not begin with a hyphen, forward slash or @ sign (and, exceptionally, is not an argument for some earlier option) names an input file. CL recognises several types of input file. The type is ordinarily inferred from the (case-insensitive) extension in the name as given.
|.c||C source file|
|.cpp||C++ source file|
|.cxx||C++ source file|
|.def||linker input file (via /def option)|
|.exp||linker input file|
|.lib||linker input file|
|.obj||linker input file|
|.res||linker input file|
However, this inference of the type from the file extension is abandoned under the influence of the /TC, /TO and /TP options, which each set one type (C source file, object file and C++ source file, respectively) for all input files that are named in their own command-line tokens, whatever the file extensions.
An input file can also be named through the /Tc, /To or /Tp options, with the file type then being implied by the option (C source file, object file or C++ source file, respectively).
An input file whose type is not decided by the above rules is ordinarily treated as an object file, after a warning (D4024). However, if the compiler is limited to pre-processing because of a /E or /EP option (though not the otherwise closely related /P), unrecognised input files are instead treated as C source files, with no warning.
Each of the different types of input file has a different selection of compiler modules (including the linker) that can be involved with the file.
|Input File Type||Compiling (C1)||Compiling (C1XX)||Processing||Generating Code (C2)||Linking (LINK)|
|C source file||yes||no||yes||yes||yes|
|C++ source file||no||yes||yes||yes||yes|
|linker input file||no||no||no||no||yes|
Under the action of various compiler options (/B1_5, /BK, /c, /E, /EP, /P, /Zg, /Zs and /ZX), one or more modules can be disabled. If it turns out that the modules wanted for working with some input file are all disabled, the file is ignored after a warning (D4027).