Mercurial > hg > Members > kono > nitros9-code
view docs/ccguide/chap1.chapter @ 575:10b50f909a23
All function prototypes are added.
author | roug |
---|---|
date | Fri, 01 Nov 2002 10:02:34 +0000 |
parents | c43b678c0055 |
children | b8ed2006640e |
line wrap: on
line source
<chapter> <title>The C Compiler System</title> <section> <title>Introduction</title> <para> The "C" programming language is rapidly growing in popularity and seems destined to become one of the most popular programming languages used for microcomputers. The rapid rise in the use of C is not surprising. C is an incredibly versatile and efficient language that can handle tasks that previously would have required complex assembly language programming. </para> <para> C was originally developed at Bell Telephone Laboratories as an implementation language for the UNIX operating system by Brian Kernighan and Dennis Ritchie. They also wrote a book titled <quote>The C Programming Language</quote> which is universally accepted as the standard for the language. It is an interesting reflection on the language that although no formal industry-wide <quote>standard</quote> was ever developed for C, programs written in C tend to be far more portable between radically different computer systems as compared to so-called <quote>standardized</quote> languages such as BASIC, COBOL, and PASCAL. The reason C is so portable is that the language is so inherently expandable that is some special function is required, the user can create a portable extension to the language, as opposed to the common practice of adding additional statements to the language. For example, the number of special-purpose BASIC dialects defies all reason. A lesser factor is the underlying UNIX operating system, which is also sufficiently versatile to discourage bastardization of the language. Indeed, standard C compilers and Unix are intimately related. </para> <para> Fortunately, the 6809 microprocessor, the OS-9 operating system, and the C language form an outstanding combination. The 6809 was specifically designed to efficiently run high-level languages, and its stack-oriented instruction set and versatile repertoire of addressing modes handle the C language very well. As mentioned previously, UNIX and C are closely related, and because OS-9 is derived from UNIX, it also supports C to the degree that almost any application written in C can be transported from a UNIX system to an OS-9 system, recompiled, and correctly executed. </para> </section> <section> <title>The Language Implementation</title> <para> OS-9 C is implemented almost exactly as described in 'The C Programming Language' by Kernighan and Ritchie (hereafter referred to as K&R). </para> <para> Allthough this version of C follows the specification faithfully, there are some differences. The differences mostly reflect parts of C that are obsolete or the constraints imposed by memory size limitations. </para> </section> <section> <title>Differences from the K & R Specification</title> <para> </para> </section> <section> <title>Enhancements and Extensions</title> <section> <title>The <quote>Direct</quote> Storage Class</title> <para> </para> </section> <section> <title>Embedded Assembly Language</title> <para> </para> </section> <section> <title>Control Character Escape Sequences</title> <para> </para> </section> </section> <section> <title>Implementation-dependent Characteristics</title> <para> </para> <section> <title>Data Representation and Storage Requirements</title> <para> </para> </section> <section> <title>Register Variables</title> <para> </para> </section> <section> <title>Access To Command Line Parameters</title> <para> </para> </section> </section> <section> <title>System Calls and the Standard Library</title> <section> <title>Operating System Calls</title> <para> </para> </section> <section> <title>The Standard Library</title> <para> </para> </section> </section> <section> <title>Run-time Arithmetic Error Handling</title> <para> </para> </section> <section> <title>Achieving Maximum Program Performance</title> <para> </para> <section> <title>Programming Considerations</title> <para> </para> </section> <section> <title>The Optimizer Pass</title> <para> </para> </section> <section> <title>The Profiler</title> <para> </para> </section> </section> <section> <title>C Compiler Component Files and File Usage</title> <para> </para> <section> <title>Temporary Files</title> <para> </para> </section> </section> <section> <title>Running the Compiler</title> <para> </para> </section> <section> <title>Compiler Option Flags</title> <para> The compiler recognizes several command-line option flags which modify the compilation process where needed. All flags are recognized before compilation commences so the flags may be placed anywhere on the command line. Flags may be ran together as in "-ro", except where a flag is followed by something else; see "-f=" and "-d" for examples. </para> <para> -A suppresses assembly, leaving the output as assembler code in a file whose name is postfixed ".a". </para> <para> -E=<number> Set the edition number constant byte to the number given. This is an OS-9 convention for memory modules. </para> <para> -O inhibits the assembly code optimizer pass. The optimizer will shorten object code by about 11% with a comparable increase in speed and is recommended for production versions of de-bugged programs. </para> <para> -P invokes the profiler to generate function frequency statistics after program execution. </para> <para> -R suppresses linking library modules into an executable program. Outputs are left in files with postfixes ".r". </para> <para> -M=<memory size> will instruct the linker to allocate <memory size> for data, stack, and parameter area. Memory size may be expressed in pages (an integer) or in kilobytes by appending "k" to an integer. For more details of the use of this option, see the "Memory Management" section of this manual. </para> <para> -L=<filename> specifies a library to be searched by the linker before the Standard Library and system interface. </para> <para> -F=<path> overrides the above output file naming. The output file will be left with <filename> as its name. This flag does not make sense in multiple source mode, and either the -a or -r flag is also present. The module will be called the last name in <path>. </para> <para> -C will output the source code as comments with the assembler code. </para> <para> -S stops the generation of stack-checking code. -S should only be used with great care when the appication is extremely time-critical and when the use of the stack by compiler generated code is fully understood. </para> <para> -D<identifier> is equivalent to "#define <identifier>" written in the source file. -D is useful where different versions of a program are maintained in one source file and differentiated by means of the "#ifdef" of "#ifndef" pre-processor directives. If the <identifier> is used as a macro for expansion by the pre-processor, "1"(one) will be the expanded "value" unless the form "-d<identifier>=<string>" is used in which case the expansion will be <string>. </para> <table frame="none"> <title>Command Line and Option Flag Examples</title> <tgroup cols="3"> <colspec colwidth="1.5in" colname="c1"> <colspec colwidth="1.5in" colname="c2"> <colspec colwidth="1.5in" colname="c3"> <thead> <row> <entry>command line</entry> <entry>action</entry> <entry>output file(s)</entry> </row> </thead> <tbody> <row> <entry>cc prg.c</entry> <entry>compile to an executable program</entry> <entry>prg</entry> <entry></entry> </row> <row> <entry>cc prg.c -a</entry> <entry>compile to assembly language source code</entry> <entry>prg.a</entry> </row> <row> <entry>cc prg.c -r</entry> <entry>compile to relocatable module</entry> <entry>prg.r</entry> </row> <row> <entry>cc prg1.c prg2.c prg3.c</entry> <entry>compile to executable program</entry> <entry>prg1.r, prg2.r, prg3.r, output</entry> </row> <row> <entry>cc prg1.c prg2.a prg3.r</entry> <entry>compile prg1.c, assemble prg2.a and combine all into and executable program</entry> <entry>prg1.r, prg2.r</entry> </row> <row> <entry>cc prg1.c prg2.c -a</entry> <entry>compile to assembly language source code</entry> <entry>prg1.a, prg2.a</entry> </row> <row> <entry>cc prg1.c prg2.c -f=prg</entry> <entry>compile to executable program</entry> <entry>prg</entry> </row> </tbody> </tgroup> </table> </section> </chapter>