6 Chapter 2. Basic Principles of the ToolsFor more information on the GNU compiler and its options, refer to Using the GNU Compiler Col-lection (GCC).2.5. cpp, the GNU Preprocessorcpp is a C-compatible macro preprocessor that works with the GNU compiler to direct the parsing ofC preprocessor directives. Preprocessing directives are the lines in your program that start with a #directive name (a # sign followed by an identifier). For instance, cpp merges #include files, expandsmacro definitions, and processes #ifdef sections. Another example is #define, a directive thatdefines a macro (#define must be followed by a macro name and the macro’s intended expansion).To refer to the output of cpp, invoke gcc with the -E option; the preprocessed file will print onstdoutThe C preprocessor provides the following separate facilities:• Inclusion of header files — Declarations that can be substituted into your program.• Macro expansion When defining macros, which are abbreviations for arbitrary fragments of C code,the C preprocessor replaces them with their definitions throughout a program.• Conditional compilation — Using special preprocessing directives, include or exclude parts of aprogram according to replaceableious conditions.• Line control — Using a program to combine or rearrange source files into an intermediate file thatis then compiled, use line control to provide a source line’s origin.There are two convenient options to assemble files that require C-style preprocessing. Both optionsdepend on using the compiler driver program, gcc, instead of directly calling the assembler.• Name the source file using the extension .S (capitalized), rather than .s (the .S indicates an as-sembly language program that requires C-style preprocessing).• Specify a source language explicitly for a situation, using the -xassembler-with-cpp option.For more information on cpp, refer to Using cpp, the C Preprocessor.2.6. as, the GNU Assembleras, the GNU assembler, translates text-based assembly language source files into binary-based objectfiles. Normally it operates without you being aware of it, as the compiler driver program (gcc) invokesit automatically. However, if you are creating your own assembler source files, you must invoke asdirectly.If, while using gcc, you want to pass special command-line options to the assembler to control its be-havior, you need to use the ‘-Wa,’ command-line option. This option passes directlyto the assembler’s command line. For example:gcc -c -g -O -Wa,-alh,-L file.cpasses the -alh command line option on to the assembler. (This causes the assembler to emit a listingfile that shows the assembler source generated by the compiler for each line of the C source filefile.c).For more information, refer to Using as, the Gnu Assembler.