diff options
Diffstat (limited to 'man/10/2c')
| -rw-r--r-- | man/10/2c | 437 |
1 files changed, 437 insertions, 0 deletions
diff --git a/man/10/2c b/man/10/2c new file mode 100644 index 00000000..1e4d9f0a --- /dev/null +++ b/man/10/2c @@ -0,0 +1,437 @@ +.TH 2C 10.1 +.SH NAME +0c, 1c, 2c, 5c, 6c, 7c, 8c, kc, qc, vc \- C compilers +.SH SYNOPSIS +.B 2c +[ +.I option ... +] +[ +.I file ... +] +.br +etc. +.SH DESCRIPTION +These commands compile the named C +.I files +into object files for the corresponding architecture. +Associated with each compiler is a string +.IR objtype , +for example +.TP 1.5i +.B "0c spim +Little-endian MIPS +.TP +.B "1c 68000 +Motorola MC68000 +.TP +.B "2c 68020 +Motorola MC68020 +.TP +.B "5c arm +ARM 7500 +.TP +.B "6c amd64 +AMD64 extension to x86 +.TP +.B "7c alpha +Digital Alpha APX +.TP +.B "8c 386 +Intel i386, i486, Pentium, etc. +.TP +.B "kc sparc +Sun SPARC +.TP +.B "qc power +Power PC, +.TP +.B "vc mips +big-endian MIPS 3000 family +.PP +Let the first letter of the compiler name be +.IR O = +.BR 0 , +.BR 1 , +.BR 2 , +.BR 5 , +.BR 6 , +.BR 7 , +.BR 8 , +.BR k , +.BR q , +or +.BR v . +The output object files end in +.RI . O . +The letter is also the prefix of related programs: +.IB O a +is the assembler, +.IB O l +is the loader. +.PP +Plan 9 conventionally sets the +.B $objtype +environment variable to the +.I objtype +string appropriate to the current machine's type. +Plan 9 also conventionally has +.RI / objtype +directories, which contain among other things: +.BR include , +for machine-dependent include files; +.BR lib , +for public object code libraries; +.BR bin , +for public programs; +and +.BR mkfile , +for preconditioning +.IR mk (10.1). +.PP +For Inferno cross-compilation on all platforms, not just Plan 9, both +.B $objtype +and +.B $OBJTYPE +are set by every native kernel +.B mkfile +to correspond to the target processor type. +The Inferno +.B mkfiles +also set the +.B -I +option appropriately to search the Inferno include directories, +since the Plan 9 defaults are inappropriate. +.PP +The compiler options are: +.TP 1i +.BI -o " obj" +Place output in file +.I obj +(allowed only if there is just one input file). +Default is to take the last element of the input file name, +strip any trailing +.BR .c , +and append +.RI . O . +.TP +.B -w +Print warning messages about unused variables, etc. +.TP +.B -B +Accept functions without a new-style +ANSI C function prototype. +By default, the compilers reject functions +used without a defined prototype, +although ANSI C permits them. +.TP +.BI -D\*S name=def +.br +.ns +.TP +.BI -D \*Sname +Define the +.I name +to the preprocessor, +as if by +.LR #define . +If no definition is given, the name is defined as +.LR 1 . +.TP +.B -F +Warn when the elements of a format +(eg, those used by +.IR print ) +disagree with in type or size with the corresponding parameter, +or there is a mismatch in number. +See the discussion of extensions, below. +.TP +.BI -I \*Sdir +An +.L #include +file whose name does not begin with +slash +or is enclosed in double quotes +is always +sought first in the directory +of the +.I file +argument. If this fails, +the +.I -. +flag is given or the name is enclosed in +.BR <> , +it is then sought +in directories named in +.B -I +options, +then in +.BR /sys/include , +and finally in +.BR /$objtype/include . +.TP +.B -. +Suppress the automatic searching for include files in +the directory of the file argument. +.TP +.B -N +Suppress automatic registerization and optimization. +.TP +.B -S +Print an assembly language version of the object code +on standard output as well as generating the +.RI . O +file. +.TP +.B -T +Pass type signatures on all external and global entities. +The signature is based on the C +.B signof +operator, +an extension in this compiler. +See +.IR dynld (10.2). +.TP +.B -V +By default, the compilers are non-standardly lax about type equality between +.B void* +values and other pointers; this flag requires ANSI C conformance. +.TP +.B -a +Instead of compiling, print on standard output acid functions (see +.IR acid (10.1)) +for examining structures declared in the source files. +.TP +.B -aa +Like +.B -a +except suppress information about structures +declared in included header files. +.PP +The compilers handle most preprocessing directives themselves, but support +excludes the +.B #if +and +.B #elif +directives, and the +.B ## +preprocessor operation. +.PP +The compilers support several extensions to ANSI C: +.TP +\- +A structure or union may contain unnamed substructures and subunions. +The fields of the substructures or +subunions can then be used as if they were members of the parent +structure or union (the resolution of a name conflict is unspecified). +When a pointer to the outer structure or union is used in a context +that is only legal for the unnamed substructure, the compiler promotes +the type and adjusts the pointer value to point at the substructure. +If the unnamed structure or union is of a type with a tag name specified by a +.B typedef +statement, +the unnamed structure or union can be explicitly referenced +by <struct variable>.<tagname>. +.TP +\- +A structure value can be formed with an expression such as +.EX + (struct S){v1, v2, v3} +.EE +where the list elements are values for the fields of struct +.BR S . +.TP +\- +Array initializers can specify the indices of the array in square +brackets, as +.EX + int a[] = { [3] 1, [10] 5 }; +.EE +which initializes the third and tenth elements of the eleven-element array +.BR a . +.TP +\- +Structure initializers can specify the structure element by using the name +following a period, as +.EX + struct { int x; int y; } s = { .y 1, .x 5 }; +.EE +which initializes elements +.B y +and then +.B x +of the structure +.BR s . +These forms also accept the new ANSI C notation, which includes an equal sign: +.EX + int a[] = { [3] = 1, [10] = 5 }; + struct { int x; int y; } s = { .y = 1, .x = 5 }; +.EE +.TP +\- +A global variable can be dedicated to a register +by declaring it +.B "extern register" +in +.I all +modules and libraries. +.TP +\- +A +.B #pragma +of the form +.EX + #pragma lib "libbio.a" +.EE +records that the program needs to be loaded with file +.BR /$objtype/lib/libbio.a ; +such lines, typically placed in library header files, obviate the +.B -l +option of the loaders. To help identify files in non-standard directories, +within the file names in the +.B #pragmas +the string +.B $M +represents the name of the architecture +(e.g., +.BR mips ) +and +.B $O +represents its identifying character +(e.g., +.BR v ). +.TP +\- +Two +.B #pragma +requests to define rules for checking +.IR print -like +formats (see the +.B -F +option above). +One +.B #pragma +tells for a given routine which argument is the format. +For example: +.EX + #pragma varargck argpos print 1 + #pragma varargck argpos sprint 2 +.EE +say that +.I print +has a format as its first argument, +and +.I sprint +has one as its second. +Another +.B #pragma +associates format character sequences and types: +.EX + #pragma varargck type "lld" vlong + #pragma varargck type "lx" void* + #pragma varargck type "S" Rune* +.EE +where the format characters are those following the +.B % +in the format (ignoring any preceding formatting flags). +Note the assumption that all formats arguments are compatible. +The system include files have appropriate +.B #pragma +lines for the standard format elements and formatting functions. +.TP +\- +A +.B #pragma +of the form +.EX + #pragma incomplete \fItype\fP +.EE +tells the compiler that +.I type +should have its signature calculated as an incomplete type +even when it is fully defined. +This allows the type signature mechanism to work in the presence +of opaque types declared in header files, with their full definitions +visible only to the code which manipulates them. +With some imported software it might be necessary to turn off the +signature generation completely for a large body of code (typically +at the start and end of a particular include file). +If +.I type +is the word +.BR _off_ , +signature generation is turned off; if +.I type +is the word +.BR _on_ , +the compiler will generate signatures. +.TP +\- +The C++ comment +.RB ( // +to end of line) +is accepted as well as the normal +convention of +.B /* +.BR */ . +.TP +\- +The compilers accept +.B long +.B long +variables as a 64-bit type. +The standard header typedefs this to +.BR vlong . +Arithmetic on +.B vlong +values is usually emulated by a run-time library. +.SH EXAMPLE +For the 68020, produce a program +.B prog +from C files +.BR main.c +and +.BR sub.c : +.IP +.EX +2c -FVw main.c sub.c +2l -o prog main.2 sub.2 +.EE +.SH FILES +.TF /$objtype/include +.TP +.B /sys/include +host system area for machine-independent +.B #include +directives. +.TP +.B /$objtype/include +host system area for machine-dependent +.B #include +directives. +.SH SOURCE +.TF /utils/2c,\ etc. +.TP +.B /utils/cc +machine-independent part +.TP +.BR /utils/2c ,\ etc. +machine-dependent part +.SH "SEE ALSO" +.IR 2a (10.1), +.IR 2l (10.1), +.IR mk (10.1), +.IR inm (10.1), +.IR acid (10.1), +.PP +Rob Pike, +``How to Use the Plan 9 C Compiler'' +.SH BUGS +The preprocessor only handles +.LR #define , +.LR #include , +.LR #undef , +.LR #ifdef , +.LR #line , +and +.LR #ifndef . |
