Initial revision
[gcc.git] / gcc / cp / g++.1
1 .\" Copyright (c) 1991, 1992 Free Software Foundation -*-Text-*-
2 .\" See section COPYING for conditions for redistribution
3 .\" FIXME: no info here on predefines. Should there be? extra for C++...
4 .TH G++ 1 "30apr1993" "GNU Tools" "GNU Tools"
5 .de BP
6 .sp
7 .ti \-.2i
8 \(**
9 ..
10 .SH NAME
11 g++ \- GNU project C++ Compiler (v2.4)
12 .SH SYNOPSIS
13 .RB g++ " [" \c
14 .IR option " | " filename " ].\|.\|.
15 .SH DESCRIPTION
16 The C and C++ compilers are integrated;
17 .B g++
18 is a script to call
19 .B gcc with options to recognize C++.
20 .B gcc
21 processes input files
22 through one or more of four stages: preprocessing, compilation,
23 assembly, and linking. This man page contains full descriptions for
24 .I only
25 C++ specific aspects of the compiler, though it also contains
26 summaries of some general-purpose options. For a fuller explanation
27 of the compiler, see
28 .BR gcc ( 1 ).
29
30 C++ source files use one of the suffixes `\|\c
31 .B .C\c
32 \&\|', `\|\c
33 .B .cc\c
34 \&\|', or `\|\c
35 .B .cxx\c
36 \&\|'; preprocessed C++ files use the suffix `\|\c
37 .B .ii\c
38 \&\|'.
39 .SH OPTIONS
40 There are many command-line options, including options to control
41 details of optimization, warnings, and code generation, which are
42 common to both
43 .B gcc
44 and
45 .B g++\c
46 \&. For full information on all options, see
47 .BR gcc ( 1 ).
48
49 Options must be separate: `\|\c
50 .B \-dr\c
51 \&\|' is quite different from `\|\c
52 .B \-d \-r
53 \&\|'.
54
55 Most `\|\c
56 .B \-f\c
57 \&\|' and `\|\c
58 .B \-W\c
59 \&\|' options have two contrary forms:
60 .BI \-f name
61 and
62 .BI \-fno\- name\c
63 \& (or
64 .BI \-W name
65 and
66 .BI \-Wno\- name\c
67 \&). Only the non-default forms are shown here.
68
69 .TP
70 .B \-c
71 Compile or assemble the source files, but do not link. The compiler
72 output is an object file corresponding to each source file.
73 .TP
74 .BI \-D macro
75 Define macro \c
76 .I macro\c
77 \& with the string `\|\c
78 .B 1\c
79 \&\|' as its definition.
80 .TP
81 .BI \-D macro = defn
82 Define macro \c
83 .I macro\c
84 \& as \c
85 .I defn\c
86 \&.
87 .TP
88 .B \-E
89 Stop after the preprocessing stage; do not run the compiler proper. The
90 output is preprocessed source code, which is sent to the
91 standard output.
92 .TP
93 .B \-fall\-virtual
94 Treat all possible member functions as virtual, implicitly. All
95 member functions (except for constructor functions and
96 .B new
97 or
98 .B delete
99 member operators) are treated as virtual functions of the class where
100 they appear.
101
102 This does not mean that all calls to these member functions will be
103 made through the internal table of virtual functions. Under some
104 circumstances, the compiler can determine that a call to a given
105 virtual function can be made directly; in these cases the calls are
106 direct in any case.
107 .TP
108 .B \-fdollars\-in\-identifiers
109 Permit the use of `\|\c
110 .B $\c
111 \&\|' in identifiers.
112 Traditional C allowed the character `\|\c
113 .B $\c
114 \&\|' to form part of identifiers; by default, GNU C also
115 allows this. However, ANSI C forbids `\|\c
116 .B $\c
117 \&\|' in identifiers, and GNU C++ also forbids it by default on most
118 platforms (though on some platforms it's enabled by default for GNU
119 C++ as well).
120 .TP
121 .B \-felide\-constructors
122 Use this option to instruct the compiler to be smarter about when it can
123 elide constructors. Without this flag, GNU C++ and cfront both
124 generate effectively the same code for:
125 .sp
126 .br
127 A\ foo\ ();
128 .br
129 A\ x\ (foo\ ());\ \ \ //\ x\ initialized\ by\ `foo\ ()',\ no\ ctor\ called
130 .br
131 A\ y\ =\ foo\ ();\ \ \ //\ call\ to\ `foo\ ()'\ heads\ to\ temporary,
132 .br
133 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ //\ y\ is\ initialized\ from\ the\ temporary.
134 .br
135 .sp
136 Note the difference! With this flag, GNU C++ initializes `\|\c
137 .B y\c
138 \&\|' directly
139 from the call to
140 .B foo ()
141 without going through a temporary.
142 .TP
143 .B \-fenum\-int\-equiv
144 Normally GNU C++ allows conversion of
145 .B enum
146 to
147 .B int\c
148 \&, but not the other way around. Use this option if you want GNU C++
149 to allow conversion of
150 .B int
151 to
152 .B enum
153 as well.
154 .TP
155 .B \-fexternal\-templates
156 Produce smaller code for template declarations, by generating only a
157 single copy of each template function where it is defined.
158 To use this option successfully, you must also mark all files that
159 use templates with either `\|\c
160 .B #pragma implementation\c
161 \&\|' (the definition) or
162 `\|\c
163 .B #pragma interface\c
164 \&\|' (declarations).
165
166 When your code is compiled with `\|\c
167 .B \-fexternal\-templates\c
168 \&\|', all
169 template instantiations are external. You must arrange for all
170 necessary instantiations to appear in the implementation file; you can
171 do this with a \c
172 .B typedef\c
173 \& that references each instantiation needed.
174 Conversely, when you compile using the default option
175 `\|\c
176 .B \-fno\-external\-templates\c
177 \&\|', all template instantiations are
178 explicitly internal.
179 .TP
180 .B \-fno\-gnu\-linker
181 Do not output global initializations (such as C++ constructors and
182 destructors) in the form used by the GNU linker (on systems where the GNU
183 linker is the standard method of handling them). Use this option when
184 you want to use a non-GNU linker, which also requires using the
185 .B collect2
186 program to make sure the system linker includes
187 constructors and destructors. (\c
188 .B collect2
189 is included in the GNU CC distribution.) For systems which
190 .I must
191 use
192 .B collect2\c
193 \&, the compiler driver
194 .B gcc
195 is configured to do this automatically.
196 .TP
197 .B \-fmemoize\-lookups
198 .TP
199 .B \-fsave\-memoized
200 These flags are used to get the compiler to compile programs faster
201 using heuristics. They are not on by default since they are only effective
202 about half the time. The other half of the time programs compile more
203 slowly (and take more memory).
204
205 The first time the compiler must build a call to a member function (or
206 reference to a data member), it must (1) determine whether the class
207 implements member functions of that name; (2) resolve which member
208 function to call (which involves figuring out what sorts of type
209 conversions need to be made); and (3) check the visibility of the member
210 function to the caller. All of this adds up to slower compilation.
211 Normally, the second time a call is made to that member function (or
212 reference to that data member), it must go through the same lengthy
213 process again. This means that code like this
214 .sp
215 .br
216 \ \ cout\ <<\ "This\ "\ <<\ p\ <<\ "\ has\ "\ <<\ n\ <<\ "\ legs.\en";
217 .br
218 .sp
219 makes six passes through all three steps. By using a software cache,
220 a ``hit'' significantly reduces this cost. Unfortunately, using the
221 cache introduces another layer of mechanisms which must be implemented,
222 and so incurs its own overhead. `\|\c
223 .B \-fmemoize\-lookups\c
224 \&\|' enables
225 the software cache.
226
227 Because access privileges (visibility) to members and member functions
228 may differ from one function context to the next,
229 .B g++
230 may need to flush the cache. With the `\|\c
231 .B \-fmemoize\-lookups\c
232 \&\|' flag, the cache is flushed after every
233 function that is compiled. The `\|\c
234 \-fsave\-memoized\c
235 \&\|' flag enables the same software cache, but when the compiler
236 determines that the context of the last function compiled would yield
237 the same access privileges of the next function to compile, it
238 preserves the cache.
239 This is most helpful when defining many member functions for the same
240 class: with the exception of member functions which are friends of
241 other classes, each member function has exactly the same access
242 privileges as every other, and the cache need not be flushed.
243 .TP
244 .B \-fno\-default\-inline
245 Do not make member functions inline by default merely because they are
246 defined inside the class scope. Otherwise, when you specify
247 .B \-O\c
248 \&, member functions defined inside class scope are compiled
249 inline by default; i.e., you don't need to add `\|\c
250 .B inline\c
251 \&\|' in front of
252 the member function name.
253 .TP
254 .B \-fno\-strict\-prototype
255 Consider the declaration \c
256 .B int foo ();\c
257 \&. In C++, this means that the
258 function \c
259 .B foo\c
260 \& takes no arguments. In ANSI C, this is declared
261 .B int foo(void);\c
262 \&. With the flag `\|\c
263 .B \-fno\-strict\-prototype\c
264 \&\|',
265 declaring functions with no arguments is equivalent to declaring its
266 argument list to be untyped, i.e., \c
267 .B int foo ();\c
268 \& is equivalent to
269 saying \c
270 .B int foo (...);\c
271 \&.
272 .TP
273 .B \-fnonnull\-objects
274 Normally, GNU C++ makes conservative assumptions about objects reached
275 through references. For example, the compiler must check that `\|\c
276 .B a\c
277 \&\|' is not null in code like the following:
278 .br
279 \ \ \ \ obj\ &a\ =\ g\ ();
280 .br
281 \ \ \ \ a.f\ (2);
282 .br
283 Checking that references of this sort have non-null values requires
284 extra code, however, and it is unnecessary for many programs. You can
285 use `\|\c
286 .B \-fnonnull\-objects\c
287 \&\|' to omit the checks for null, if your program doesn't require the
288 default checking.
289 .TP
290 .B \-fhandle\-signatures
291 .TP
292 .B \-fno\-handle\-signatures
293 These options control the recognition of the \c
294 .B signature\c
295 \& and \c
296 .B sigof\c
297 \& constructs for specifying abstract types. By default, these
298 constructs are not recognized.
299 .TP
300 .B \-fthis\-is\-variable
301 The incorporation of user-defined free store management into C++ has
302 made assignment to \c
303 .B this\c
304 \& an anachronism. Therefore, by default GNU
305 C++ treats the type of \c
306 .B this\c
307 \& in a member function of \c
308 .B class X\c
309 \&
310 to be \c
311 .B X *const\c
312 \&. In other words, it is illegal to assign to
313 \c
314 .B this\c
315 \& within a class member function. However, for backwards
316 compatibility, you can invoke the old behavior by using
317 \&`\|\c
318 .B \-fthis\-is\-variable\c
319 \&\|'.
320 .TP
321 .B \-g
322 Produce debugging information in the operating system's native format
323 (for DBX or SDB or DWARF). GDB also can work with this debugging
324 information. On most systems that use DBX format, `\|\c
325 .B \-g\c
326 \&\|' enables use
327 of extra debugging information that only GDB can use.
328
329 Unlike most other C compilers, GNU CC allows you to use `\|\c
330 .B \-g\c
331 \&\|' with
332 `\|\c
333 .B \-O\c
334 \&\|'. The shortcuts taken by optimized code may occasionally
335 produce surprising results: some variables you declared may not exist
336 at all; flow of control may briefly move where you did not expect it;
337 some statements may not be executed because they compute constant
338 results or their values were already at hand; some statements may
339 execute in different places because they were moved out of loops.
340
341 Nevertheless it proves possible to debug optimized output. This makes
342 it reasonable to use the optimizer for programs that might have bugs.
343 .TP
344 .BI "\-I" "dir"\c
345 \&
346 Append directory \c
347 .I dir\c
348 \& to the list of directories searched for include files.
349 .TP
350 .BI "\-L" "dir"\c
351 \&
352 Add directory \c
353 .I dir\c
354 \& to the list of directories to be searched
355 for `\|\c
356 .B \-l\c
357 \&\|'.
358 .TP
359 .BI \-l library\c
360 \&
361 Use the library named \c
362 .I library\c
363 \& when linking. (C++ programs often require `\|\c
364 \-lg++\c
365 \&\|' for successful linking.)
366 .TP
367 .B \-nostdinc
368 Do not search the standard system directories for header files. Only
369 the directories you have specified with
370 .B \-I
371 options (and the current directory, if appropriate) are searched.
372 .TP
373 .B \-nostdinc++
374 Do not search for header files in the standard directories specific to
375 C++, but do still search the other standard directories. (This option
376 is used when building libg++.)
377 .TP
378 .B \-O
379 Optimize. Optimizing compilation takes somewhat more time, and a lot
380 more memory for a large function.
381 .TP
382 .BI "\-o " file\c
383 \&
384 Place output in file \c
385 .I file\c
386 \&.
387 .TP
388 .B \-S
389 Stop after the stage of compilation proper; do not assemble. The output
390 is an assembler code file for each non-assembler input
391 file specified.
392 .TP
393 .B \-traditional
394 Attempt to support some aspects of traditional C compilers.
395
396 Specifically, for both C and C++ programs:
397 .TP
398 \ \ \ \(bu
399 In the preprocessor, comments convert to nothing at all, rather than
400 to a space. This allows traditional token concatenation.
401 .TP
402 \ \ \ \(bu
403 In the preprocessor, macro arguments are recognized within string
404 constants in a macro definition (and their values are stringified,
405 though without additional quote marks, when they appear in such a
406 context). The preprocessor always considers a string constant to end
407 at a newline.
408 .TP
409 \ \ \ \(bu
410 The preprocessor does not predefine the macro \c
411 .B __STDC__\c
412 \& when you use
413 `\|\c
414 .B \-traditional\c
415 \&\|', but still predefines\c
416 .B __GNUC__\c
417 \& (since the GNU extensions indicated by
418 .B __GNUC__\c
419 \& are not affected by
420 `\|\c
421 .B \-traditional\c
422 \&\|'). If you need to write header files that work
423 differently depending on whether `\|\c
424 .B \-traditional\c
425 \&\|' is in use, by
426 testing both of these predefined macros you can distinguish four
427 situations: GNU C, traditional GNU C, other ANSI C compilers, and
428 other old C compilers.
429 .TP
430 \ \ \ \(bu
431 In the preprocessor, comments convert to nothing at all, rather than
432 to a space. This allows traditional token concatenation.
433 .TP
434 \ \ \ \(bu
435 In the preprocessor, macro arguments are recognized within string
436 constants in a macro definition (and their values are stringified,
437 though without additional quote marks, when they appear in such a
438 context). The preprocessor always considers a string constant to end
439 at a newline.
440 .TP
441 \ \ \ \(bu
442 The preprocessor does not predefine the macro \c
443 .B __STDC__\c
444 \& when you use
445 `\|\c
446 .B \-traditional\c
447 \&\|', but still predefines\c
448 .B __GNUC__\c
449 \& (since the GNU extensions indicated by
450 .B __GNUC__\c
451 \& are not affected by
452 `\|\c
453 .B \-traditional\c
454 \&\|'). If you need to write header files that work
455 differently depending on whether `\|\c
456 .B \-traditional\c
457 \&\|' is in use, by
458 testing both of these predefined macros you can distinguish four
459 situations: GNU C, traditional GNU C, other ANSI C compilers, and
460 other old C compilers.
461 .PP
462 .TP
463 \ \ \ \(bu
464 String ``constants'' are not necessarily constant; they are stored in
465 writable space, and identical looking constants are allocated
466 separately.
467
468 For C++ programs only (not C), `\|\c
469 .B \-traditional\c
470 \&\|' has one additional effect: assignment to
471 .B this
472 is permitted. This is the same as the effect of `\|\c
473 .B \-fthis\-is\-variable\c
474 \&\|'.
475 .TP
476 .BI \-U macro
477 Undefine macro \c
478 .I macro\c
479 \&.
480 .TP
481 .B \-Wall
482 Issue warnings for conditions which pertain to usage that we recommend
483 avoiding and that we believe is easy to avoid, even in conjunction
484 with macros.
485 .TP
486 .B \-Wenum\-clash
487 Warn when converting between different enumeration types.
488 .TP
489 .B \-Woverloaded\-virtual
490 In a derived class, the definitions of virtual functions must match
491 the type signature of a virtual function declared in the base class.
492 Use this option to request warnings when a derived class declares a
493 function that may be an erroneous attempt to define a virtual
494 function: that is, warn when a function with the same name as a
495 virtual function in the base class, but with a type signature that
496 doesn't match any virtual functions from the base class.
497 .TP
498 .B \-Wtemplate\-debugging
499 When using templates in a C++ program, warn if debugging is not yet
500 fully available.
501 .TP
502 .B \-w
503 Inhibit all warning messages.
504 .TP
505 .BI +e N
506 Control how virtual function definitions are used, in a fashion
507 compatible with
508 .B cfront
509 1.x.
510 .PP
511
512 .SH PRAGMAS
513 Two `\|\c
514 .B #pragma\c
515 \&\|' directives are supported for GNU C++, to permit using the same
516 header file for two purposes: as a definition of interfaces to a given
517 object class, and as the full definition of the contents of that object class.
518 .TP
519 .B #pragma interface
520 Use this directive in header files that define object classes, to save
521 space in most of the object files that use those classes. Normally,
522 local copies of certain information (backup copies of inline member
523 functions, debugging information, and the internal tables that
524 implement virtual functions) must be kept in each object file that
525 includes class definitions. You can use this pragma to avoid such
526 duplication. When a header file containing `\|\c
527 .B #pragma interface\c
528 \&\|' is included in a compilation, this auxiliary information
529 will not be generated (unless the main input source file itself uses
530 `\|\c
531 .B #pragma implementation\c
532 \&\|'). Instead, the object files will contain references to be
533 resolved at link time.
534 .tr !"
535 .TP
536 .B #pragma implementation
537 .TP
538 .BI "#pragma implementation !" objects .h!
539 Use this pragma in a main input file, when you want full output from
540 included header files to be generated (and made globally visible).
541 The included header file, in turn, should use `\|\c
542 .B #pragma interface\c
543 \&\|'.
544 Backup copies of inline member functions, debugging information, and
545 the internal tables used to implement virtual functions are all
546 generated in implementation files.
547
548 If you use `\|\c
549 .B #pragma implementation\c
550 \&\|' with no argument, it applies to an include file with the same
551 basename as your source file; for example, in `\|\c
552 .B allclass.cc\c
553 \&\|', `\|\c
554 .B #pragma implementation\c
555 \&\|' by itself is equivalent to `\|\c
556 .B
557 #pragma implementation "allclass.h"\c
558 \&\|'. Use the string argument if you want a single implementation
559 file to include code from multiple header files.
560
561 There is no way to split up the contents of a single header file into
562 multiple implementation files.
563 .SH FILES
564 .ta \w'LIBDIR/g++\-include 'u
565 file.h C header (preprocessor) file
566 .br
567 file.i preprocessed C source file
568 .br
569 file.C C++ source file
570 .br
571 file.cc C++ source file
572 .br
573 file.cxx C++ source file
574 .br
575 file.s assembly language file
576 .br
577 file.o object file
578 .br
579 a.out link edited output
580 .br
581 \fITMPDIR\fR/cc\(** temporary files
582 .br
583 \fILIBDIR\fR/cpp preprocessor
584 .br
585 \fILIBDIR\fR/cc1plus compiler
586 .br
587 \fILIBDIR\fR/collect linker front end needed on some machines
588 .br
589 \fILIBDIR\fR/libgcc.a GCC subroutine library
590 .br
591 /lib/crt[01n].o start-up routine
592 .br
593 \fILIBDIR\fR/ccrt0 additional start-up routine for C++
594 .br
595 /lib/libc.a standard C library, see
596 .IR intro (3)
597 .br
598 /usr/include standard directory for
599 .B #include
600 files
601 .br
602 \fILIBDIR\fR/include standard gcc directory for
603 .B #include
604 files
605 .br
606 \fILIBDIR\fR/g++\-include additional g++ directory for
607 .B #include
608 .sp
609 .I LIBDIR
610 is usually
611 .B /usr/local/lib/\c
612 .IR machine / version .
613 .br
614 .I TMPDIR
615 comes from the environment variable
616 .B TMPDIR
617 (default
618 .B /usr/tmp
619 if available, else
620 .B /tmp\c
621 \&).
622 .SH "SEE ALSO"
623 gcc(1), cpp(1), as(1), ld(1), gdb(1), adb(1), dbx(1), sdb(1).
624 .br
625 .RB "`\|" gcc "\|', `\|" cpp \|',
626 .RB `\| as \|', `\| ld \|',
627 and
628 .RB `\| gdb \|'
629 entries in
630 .B info\c
631 \&.
632 .br
633 .I
634 Using and Porting GNU CC (for version 2.0)\c
635 , Richard M. Stallman;
636 .I
637 The C Preprocessor\c
638 , Richard M. Stallman;
639 .I
640 Debugging with GDB: the GNU Source-Level Debugger\c
641 , Richard M. Stallman and Roland H. Pesch;
642 .I
643 Using as: the GNU Assembler\c
644 , Dean Elsner, Jay Fenlason & friends;
645 .I
646 gld: the GNU linker\c
647 , Steve Chamberlain and Roland Pesch.
648
649 .SH BUGS
650 For instructions on how to report bugs, see the GCC manual.
651
652 .SH COPYING
653 Copyright (c) 1991, 1992, 1993 Free Software Foundation, Inc.
654 .PP
655 Permission is granted to make and distribute verbatim copies of
656 this manual provided the copyright notice and this permission notice
657 are preserved on all copies.
658 .PP
659 Permission is granted to copy and distribute modified versions of this
660 manual under the conditions for verbatim copying, provided that the
661 entire resulting derived work is distributed under the terms of a
662 permission notice identical to this one.
663 .PP
664 Permission is granted to copy and distribute translations of this
665 manual into another language, under the above conditions for modified
666 versions, except that this permission notice may be included in
667 translations approved by the Free Software Foundation instead of in
668 the original English.
669 .SH AUTHORS
670 See the GNU CC Manual for the contributors to GNU CC.