OSDN Git Service

* doc/rtl.texi (Machine Modes): Document QQ, HQ, SQ, DQ, TQ,
[pf3gnuchains/gcc-fork.git] / gcc / doc / trouble.texi
1 @c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
2 @c 1999, 2000, 2001, 2003, 2004 Free Software Foundation, Inc.
3 @c This is part of the GCC manual.
4 @c For copying conditions, see the file gcc.texi.
5
6 @node Trouble
7 @chapter Known Causes of Trouble with GCC
8 @cindex bugs, known
9 @cindex installation trouble
10 @cindex known causes of trouble
11
12 This section describes known problems that affect users of GCC@.  Most
13 of these are not GCC bugs per se---if they were, we would fix them.
14 But the result for a user may be like the result of a bug.
15
16 Some of these problems are due to bugs in other software, some are
17 missing features that are too much work to add, and some are places
18 where people's opinions differ as to what is best.
19
20 @menu
21 * Actual Bugs::               Bugs we will fix later.
22 * Cross-Compiler Problems::   Common problems of cross compiling with GCC.
23 * Interoperation::      Problems using GCC with other compilers,
24                            and with certain linkers, assemblers and debuggers.
25 * Incompatibilities::   GCC is incompatible with traditional C.
26 * Fixed Headers::       GCC uses corrected versions of system header files.
27                            This is necessary, but doesn't always work smoothly.
28 * Standard Libraries::  GCC uses the system C library, which might not be
29                            compliant with the ISO C standard.
30 * Disappointments::     Regrettable things we can't change, but not quite bugs.
31 * C++ Misunderstandings::     Common misunderstandings with GNU C++.
32 * Protoize Caveats::    Things to watch out for when using @code{protoize}.
33 * Non-bugs::            Things we think are right, but some others disagree.
34 * Warnings and Errors:: Which problems in your code get warnings,
35                          and which get errors.
36 @end menu
37
38 @node Actual Bugs
39 @section Actual Bugs We Haven't Fixed Yet
40
41 @itemize @bullet
42 @item
43 The @code{fixincludes} script interacts badly with automounters; if the
44 directory of system header files is automounted, it tends to be
45 unmounted while @code{fixincludes} is running.  This would seem to be a
46 bug in the automounter.  We don't know any good way to work around it.
47
48 @item
49 The @code{fixproto} script will sometimes add prototypes for the
50 @code{sigsetjmp} and @code{siglongjmp} functions that reference the
51 @code{jmp_buf} type before that type is defined.  To work around this,
52 edit the offending file and place the typedef in front of the
53 prototypes.
54 @end itemize
55
56 @node Cross-Compiler Problems
57 @section Cross-Compiler Problems
58
59 You may run into problems with cross compilation on certain machines,
60 for several reasons.
61
62 @itemize @bullet
63 @item
64 At present, the program @file{mips-tfile} which adds debug
65 support to object files on MIPS systems does not work in a cross
66 compile environment.
67 @end itemize
68
69 @node Interoperation
70 @section Interoperation
71
72 This section lists various difficulties encountered in using GCC
73 together with other compilers or with the assemblers, linkers,
74 libraries and debuggers on certain systems.
75
76 @itemize @bullet
77 @item
78 On many platforms, GCC supports a different ABI for C++ than do other
79 compilers, so the object files compiled by GCC cannot be used with object
80 files generated by another C++ compiler.
81
82 An area where the difference is most apparent is name mangling.  The use
83 of different name mangling is intentional, to protect you from more subtle
84 problems.
85 Compilers differ as to many internal details of C++ implementation,
86 including: how class instances are laid out, how multiple inheritance is
87 implemented, and how virtual function calls are handled.  If the name
88 encoding were made the same, your programs would link against libraries
89 provided from other compilers---but the programs would then crash when
90 run.  Incompatible libraries are then detected at link time, rather than
91 at run time.
92
93 @item
94 On some BSD systems, including some versions of Ultrix, use of profiling
95 causes static variable destructors (currently used only in C++) not to
96 be run.
97
98 @item
99 On some SGI systems, when you use @option{-lgl_s} as an option,
100 it gets translated magically to @samp{-lgl_s -lX11_s -lc_s}.
101 Naturally, this does not happen when you use GCC@.
102 You must specify all three options explicitly.
103
104 @item
105 On a SPARC, GCC aligns all values of type @code{double} on an 8-byte
106 boundary, and it expects every @code{double} to be so aligned.  The Sun
107 compiler usually gives @code{double} values 8-byte alignment, with one
108 exception: function arguments of type @code{double} may not be aligned.
109
110 As a result, if a function compiled with Sun CC takes the address of an
111 argument of type @code{double} and passes this pointer of type
112 @code{double *} to a function compiled with GCC, dereferencing the
113 pointer may cause a fatal signal.
114
115 One way to solve this problem is to compile your entire program with GCC@.
116 Another solution is to modify the function that is compiled with
117 Sun CC to copy the argument into a local variable; local variables
118 are always properly aligned.  A third solution is to modify the function
119 that uses the pointer to dereference it via the following function
120 @code{access_double} instead of directly with @samp{*}:
121
122 @smallexample
123 inline double
124 access_double (double *unaligned_ptr)
125 @{
126   union d2i @{ double d; int i[2]; @};
127
128   union d2i *p = (union d2i *) unaligned_ptr;
129   union d2i u;
130
131   u.i[0] = p->i[0];
132   u.i[1] = p->i[1];
133
134   return u.d;
135 @}
136 @end smallexample
137
138 @noindent
139 Storing into the pointer can be done likewise with the same union.
140
141 @item
142 On Solaris, the @code{malloc} function in the @file{libmalloc.a} library
143 may allocate memory that is only 4 byte aligned.  Since GCC on the
144 SPARC assumes that doubles are 8 byte aligned, this may result in a
145 fatal signal if doubles are stored in memory allocated by the
146 @file{libmalloc.a} library.
147
148 The solution is to not use the @file{libmalloc.a} library.  Use instead
149 @code{malloc} and related functions from @file{libc.a}; they do not have
150 this problem.
151
152 @item
153 On the HP PA machine, ADB sometimes fails to work on functions compiled
154 with GCC@.  Specifically, it fails to work on functions that use
155 @code{alloca} or variable-size arrays.  This is because GCC doesn't
156 generate HP-UX unwind descriptors for such functions.  It may even be
157 impossible to generate them.
158
159 @item
160 Debugging (@option{-g}) is not supported on the HP PA machine, unless you use
161 the preliminary GNU tools.
162
163 @item
164 Taking the address of a label may generate errors from the HP-UX
165 PA assembler.  GAS for the PA does not have this problem.
166
167 @item
168 Using floating point parameters for indirect calls to static functions
169 will not work when using the HP assembler.  There simply is no way for GCC
170 to specify what registers hold arguments for static functions when using
171 the HP assembler.  GAS for the PA does not have this problem.
172
173 @item
174 In extremely rare cases involving some very large functions you may
175 receive errors from the HP linker complaining about an out of bounds
176 unconditional branch offset.  This used to occur more often in previous
177 versions of GCC, but is now exceptionally rare.  If you should run
178 into it, you can work around by making your function smaller.
179
180 @item
181 GCC compiled code sometimes emits warnings from the HP-UX assembler of
182 the form:
183
184 @smallexample
185 (warning) Use of GR3 when
186   frame >= 8192 may cause conflict.
187 @end smallexample
188
189 These warnings are harmless and can be safely ignored.
190
191 @item
192 In extremely rare cases involving some very large functions you may
193 receive errors from the AIX Assembler complaining about a displacement
194 that is too large.  If you should run into it, you can work around by
195 making your function smaller.
196
197 @item
198 The @file{libstdc++.a} library in GCC relies on the SVR4 dynamic
199 linker semantics which merges global symbols between libraries and
200 applications, especially necessary for C++ streams functionality.
201 This is not the default behavior of AIX shared libraries and dynamic
202 linking.  @file{libstdc++.a} is built on AIX with ``runtime-linking''
203 enabled so that symbol merging can occur.  To utilize this feature,
204 the application linked with @file{libstdc++.a} must include the
205 @option{-Wl,-brtl} flag on the link line.  G++ cannot impose this
206 because this option may interfere with the semantics of the user
207 program and users may not always use @samp{g++} to link his or her
208 application.  Applications are not required to use the
209 @option{-Wl,-brtl} flag on the link line---the rest of the
210 @file{libstdc++.a} library which is not dependent on the symbol
211 merging semantics will continue to function correctly.
212
213 @item
214 An application can interpose its own definition of functions for
215 functions invoked by @file{libstdc++.a} with ``runtime-linking''
216 enabled on AIX@.  To accomplish this the application must be linked
217 with ``runtime-linking'' option and the functions explicitly must be
218 exported by the application (@option{-Wl,-brtl,-bE:exportfile}).
219
220 @item
221 AIX on the RS/6000 provides support (NLS) for environments outside of
222 the United States.  Compilers and assemblers use NLS to support
223 locale-specific representations of various objects including
224 floating-point numbers (@samp{.} vs @samp{,} for separating decimal
225 fractions).  There have been problems reported where the library linked
226 with GCC does not produce the same floating-point formats that the
227 assembler accepts.  If you have this problem, set the @env{LANG}
228 environment variable to @samp{C} or @samp{En_US}.
229
230 @item
231 @opindex fdollars-in-identifiers
232 Even if you specify @option{-fdollars-in-identifiers},
233 you cannot successfully use @samp{$} in identifiers on the RS/6000 due
234 to a restriction in the IBM assembler.  GAS supports these
235 identifiers.
236
237 @end itemize
238
239 @node Incompatibilities
240 @section Incompatibilities of GCC
241 @cindex incompatibilities of GCC
242 @opindex traditional
243
244 There are several noteworthy incompatibilities between GNU C and K&R
245 (non-ISO) versions of C@.
246
247 @itemize @bullet
248 @cindex string constants
249 @cindex read-only strings
250 @cindex shared strings
251 @item
252 GCC normally makes string constants read-only.  If several
253 identical-looking string constants are used, GCC stores only one
254 copy of the string.
255
256 @cindex @code{mktemp}, and constant strings
257 One consequence is that you cannot call @code{mktemp} with a string
258 constant argument.  The function @code{mktemp} always alters the
259 string its argument points to.
260
261 @cindex @code{sscanf}, and constant strings
262 @cindex @code{fscanf}, and constant strings
263 @cindex @code{scanf}, and constant strings
264 Another consequence is that @code{sscanf} does not work on some very
265 old systems when passed a string constant as its format control string
266 or input.  This is because @code{sscanf} incorrectly tries to write
267 into the string constant.  Likewise @code{fscanf} and @code{scanf}.
268
269 The solution to these problems is to change the program to use
270 @code{char}-array variables with initialization strings for these
271 purposes instead of string constants.
272
273 @item
274 @code{-2147483648} is positive.
275
276 This is because 2147483648 cannot fit in the type @code{int}, so
277 (following the ISO C rules) its data type is @code{unsigned long int}.
278 Negating this value yields 2147483648 again.
279
280 @item
281 GCC does not substitute macro arguments when they appear inside of
282 string constants.  For example, the following macro in GCC
283
284 @smallexample
285 #define foo(a) "a"
286 @end smallexample
287
288 @noindent
289 will produce output @code{"a"} regardless of what the argument @var{a} is.
290
291 @cindex @code{setjmp} incompatibilities
292 @cindex @code{longjmp} incompatibilities
293 @item
294 When you use @code{setjmp} and @code{longjmp}, the only automatic
295 variables guaranteed to remain valid are those declared
296 @code{volatile}.  This is a consequence of automatic register
297 allocation.  Consider this function:
298
299 @smallexample
300 jmp_buf j;
301
302 foo ()
303 @{
304   int a, b;
305
306   a = fun1 ();
307   if (setjmp (j))
308     return a;
309
310   a = fun2 ();
311   /* @r{@code{longjmp (j)} may occur in @code{fun3}.} */
312   return a + fun3 ();
313 @}
314 @end smallexample
315
316 Here @code{a} may or may not be restored to its first value when the
317 @code{longjmp} occurs.  If @code{a} is allocated in a register, then
318 its first value is restored; otherwise, it keeps the last value stored
319 in it.
320
321 @opindex W
322 If you use the @option{-W} option with the @option{-O} option, you will
323 get a warning when GCC thinks such a problem might be possible.
324
325 @item
326 Programs that use preprocessing directives in the middle of macro
327 arguments do not work with GCC@.  For example, a program like this
328 will not work:
329
330 @smallexample
331 @group
332 foobar (
333 #define luser
334         hack)
335 @end group
336 @end smallexample
337
338 ISO C does not permit such a construct.
339
340 @item
341 K&R compilers allow comments to cross over an inclusion boundary
342 (i.e.@: started in an include file and ended in the including file).
343
344 @cindex external declaration scope
345 @cindex scope of external declarations
346 @cindex declaration scope
347 @item
348 Declarations of external variables and functions within a block apply
349 only to the block containing the declaration.  In other words, they
350 have the same scope as any other declaration in the same place.
351
352 In some other C compilers, a @code{extern} declaration affects all the
353 rest of the file even if it happens within a block.
354
355 @item
356 In traditional C, you can combine @code{long}, etc., with a typedef name,
357 as shown here:
358
359 @smallexample
360 typedef int foo;
361 typedef long foo bar;
362 @end smallexample
363
364 In ISO C, this is not allowed: @code{long} and other type modifiers
365 require an explicit @code{int}.
366
367 @cindex typedef names as function parameters
368 @item
369 PCC allows typedef names to be used as function parameters.
370
371 @item
372 Traditional C allows the following erroneous pair of declarations to
373 appear together in a given scope:
374
375 @smallexample
376 typedef int foo;
377 typedef foo foo;
378 @end smallexample
379
380 @item
381 GCC treats all characters of identifiers as significant.  According to
382 K&R-1 (2.2), ``No more than the first eight characters are significant,
383 although more may be used.''.  Also according to K&R-1 (2.2), ``An
384 identifier is a sequence of letters and digits; the first character must
385 be a letter.  The underscore _ counts as a letter.'', but GCC also
386 allows dollar signs in identifiers.
387
388 @cindex whitespace
389 @item
390 PCC allows whitespace in the middle of compound assignment operators
391 such as @samp{+=}.  GCC, following the ISO standard, does not
392 allow this.
393
394 @cindex apostrophes
395 @cindex '
396 @item
397 GCC complains about unterminated character constants inside of
398 preprocessing conditionals that fail.  Some programs have English
399 comments enclosed in conditionals that are guaranteed to fail; if these
400 comments contain apostrophes, GCC will probably report an error.  For
401 example, this code would produce an error:
402
403 @smallexample
404 #if 0
405 You can't expect this to work.
406 #endif
407 @end smallexample
408
409 The best solution to such a problem is to put the text into an actual
410 C comment delimited by @samp{/*@dots{}*/}.
411
412 @item
413 Many user programs contain the declaration @samp{long time ();}.  In the
414 past, the system header files on many systems did not actually declare
415 @code{time}, so it did not matter what type your program declared it to
416 return.  But in systems with ISO C headers, @code{time} is declared to
417 return @code{time_t}, and if that is not the same as @code{long}, then
418 @samp{long time ();} is erroneous.
419
420 The solution is to change your program to use appropriate system headers
421 (@code{<time.h>} on systems with ISO C headers) and not to declare
422 @code{time} if the system header files declare it, or failing that to
423 use @code{time_t} as the return type of @code{time}.
424
425 @cindex @code{float} as function value type
426 @item
427 When compiling functions that return @code{float}, PCC converts it to
428 a double.  GCC actually returns a @code{float}.  If you are concerned
429 with PCC compatibility, you should declare your functions to return
430 @code{double}; you might as well say what you mean.
431
432 @cindex structures
433 @cindex unions
434 @item
435 When compiling functions that return structures or unions, GCC
436 output code normally uses a method different from that used on most
437 versions of Unix.  As a result, code compiled with GCC cannot call
438 a structure-returning function compiled with PCC, and vice versa.
439
440 The method used by GCC is as follows: a structure or union which is
441 1, 2, 4 or 8 bytes long is returned like a scalar.  A structure or union
442 with any other size is stored into an address supplied by the caller
443 (usually in a special, fixed register, but on some machines it is passed
444 on the stack).  The target hook @code{TARGET_STRUCT_VALUE_RTX}
445 tells GCC where to pass this address.
446
447 By contrast, PCC on most target machines returns structures and unions
448 of any size by copying the data into an area of static storage, and then
449 returning the address of that storage as if it were a pointer value.
450 The caller must copy the data from that memory area to the place where
451 the value is wanted.  GCC does not use this method because it is
452 slower and nonreentrant.
453
454 On some newer machines, PCC uses a reentrant convention for all
455 structure and union returning.  GCC on most of these machines uses a
456 compatible convention when returning structures and unions in memory,
457 but still returns small structures and unions in registers.
458
459 @opindex fpcc-struct-return
460 You can tell GCC to use a compatible convention for all structure and
461 union returning with the option @option{-fpcc-struct-return}.
462
463 @cindex preprocessing tokens
464 @cindex preprocessing numbers
465 @item
466 GCC complains about program fragments such as @samp{0x74ae-0x4000}
467 which appear to be two hexadecimal constants separated by the minus
468 operator.  Actually, this string is a single @dfn{preprocessing token}.
469 Each such token must correspond to one token in C@.  Since this does not,
470 GCC prints an error message.  Although it may appear obvious that what
471 is meant is an operator and two values, the ISO C standard specifically
472 requires that this be treated as erroneous.
473
474 A @dfn{preprocessing token} is a @dfn{preprocessing number} if it
475 begins with a digit and is followed by letters, underscores, digits,
476 periods and @samp{e+}, @samp{e-}, @samp{E+}, @samp{E-}, @samp{p+},
477 @samp{p-}, @samp{P+}, or @samp{P-} character sequences.  (In strict C89
478 mode, the sequences @samp{p+}, @samp{p-}, @samp{P+} and @samp{P-} cannot
479 appear in preprocessing numbers.)
480
481 To make the above program fragment valid, place whitespace in front of
482 the minus sign.  This whitespace will end the preprocessing number.
483 @end itemize
484
485 @node Fixed Headers
486 @section Fixed Header Files
487
488 GCC needs to install corrected versions of some system header files.
489 This is because most target systems have some header files that won't
490 work with GCC unless they are changed.  Some have bugs, some are
491 incompatible with ISO C, and some depend on special features of other
492 compilers.
493
494 Installing GCC automatically creates and installs the fixed header
495 files, by running a program called @code{fixincludes}.  Normally, you
496 don't need to pay attention to this.  But there are cases where it
497 doesn't do the right thing automatically.
498
499 @itemize @bullet
500 @item
501 If you update the system's header files, such as by installing a new
502 system version, the fixed header files of GCC are not automatically
503 updated.  They can be updated using the @command{mkheaders} script
504 installed in
505 @file{@var{libexecdir}/gcc/@var{target}/@var{version}/install-tools/}.
506
507 @item
508 On some systems, header file directories contain
509 machine-specific symbolic links in certain places.  This makes it
510 possible to share most of the header files among hosts running the
511 same version of the system on different machine models.
512
513 The programs that fix the header files do not understand this special
514 way of using symbolic links; therefore, the directory of fixed header
515 files is good only for the machine model used to build it.
516
517 It is possible to make separate sets of fixed header files for the
518 different machine models, and arrange a structure of symbolic links so
519 as to use the proper set, but you'll have to do this by hand.
520 @end itemize
521
522 @node Standard Libraries
523 @section Standard Libraries
524
525 @opindex Wall
526 GCC by itself attempts to be a conforming freestanding implementation.
527 @xref{Standards,,Language Standards Supported by GCC}, for details of
528 what this means.  Beyond the library facilities required of such an
529 implementation, the rest of the C library is supplied by the vendor of
530 the operating system.  If that C library doesn't conform to the C
531 standards, then your programs might get warnings (especially when using
532 @option{-Wall}) that you don't expect.
533
534 For example, the @code{sprintf} function on SunOS 4.1.3 returns
535 @code{char *} while the C standard says that @code{sprintf} returns an
536 @code{int}.  The @code{fixincludes} program could make the prototype for
537 this function match the Standard, but that would be wrong, since the
538 function will still return @code{char *}.
539
540 If you need a Standard compliant library, then you need to find one, as
541 GCC does not provide one.  The GNU C library (called @code{glibc})
542 provides ISO C, POSIX, BSD, SystemV and X/Open compatibility for
543 GNU/Linux and HURD-based GNU systems; no recent version of it supports
544 other systems, though some very old versions did.  Version 2.2 of the
545 GNU C library includes nearly complete C99 support.  You could also ask
546 your operating system vendor if newer libraries are available.
547
548 @node Disappointments
549 @section Disappointments and Misunderstandings
550
551 These problems are perhaps regrettable, but we don't know any practical
552 way around them.
553
554 @itemize @bullet
555 @item
556 Certain local variables aren't recognized by debuggers when you compile
557 with optimization.
558
559 This occurs because sometimes GCC optimizes the variable out of
560 existence.  There is no way to tell the debugger how to compute the
561 value such a variable ``would have had'', and it is not clear that would
562 be desirable anyway.  So GCC simply does not mention the eliminated
563 variable when it writes debugging information.
564
565 You have to expect a certain amount of disagreement between the
566 executable and your source code, when you use optimization.
567
568 @cindex conflicting types
569 @cindex scope of declaration
570 @item
571 Users often think it is a bug when GCC reports an error for code
572 like this:
573
574 @smallexample
575 int foo (struct mumble *);
576
577 struct mumble @{ @dots{} @};
578
579 int foo (struct mumble *x)
580 @{ @dots{} @}
581 @end smallexample
582
583 This code really is erroneous, because the scope of @code{struct
584 mumble} in the prototype is limited to the argument list containing it.
585 It does not refer to the @code{struct mumble} defined with file scope
586 immediately below---they are two unrelated types with similar names in
587 different scopes.
588
589 But in the definition of @code{foo}, the file-scope type is used
590 because that is available to be inherited.  Thus, the definition and
591 the prototype do not match, and you get an error.
592
593 This behavior may seem silly, but it's what the ISO standard specifies.
594 It is easy enough for you to make your code work by moving the
595 definition of @code{struct mumble} above the prototype.  It's not worth
596 being incompatible with ISO C just to avoid an error for the example
597 shown above.
598
599 @item
600 Accesses to bit-fields even in volatile objects works by accessing larger
601 objects, such as a byte or a word.  You cannot rely on what size of
602 object is accessed in order to read or write the bit-field; it may even
603 vary for a given bit-field according to the precise usage.
604
605 If you care about controlling the amount of memory that is accessed, use
606 volatile but do not use bit-fields.
607
608 @item
609 GCC comes with shell scripts to fix certain known problems in system
610 header files.  They install corrected copies of various header files in
611 a special directory where only GCC will normally look for them.  The
612 scripts adapt to various systems by searching all the system header
613 files for the problem cases that we know about.
614
615 If new system header files are installed, nothing automatically arranges
616 to update the corrected header files.  They can be updated using the
617 @command{mkheaders} script installed in
618 @file{@var{libexecdir}/gcc/@var{target}/@var{version}/install-tools/}.
619
620 @item
621 @cindex floating point precision
622 On 68000 and x86 systems, for instance, you can get paradoxical results
623 if you test the precise values of floating point numbers.  For example,
624 you can find that a floating point value which is not a NaN is not equal
625 to itself.  This results from the fact that the floating point registers
626 hold a few more bits of precision than fit in a @code{double} in memory.
627 Compiled code moves values between memory and floating point registers
628 at its convenience, and moving them into memory truncates them.
629
630 @opindex ffloat-store
631 You can partially avoid this problem by using the @option{-ffloat-store}
632 option (@pxref{Optimize Options}).
633
634 @item
635 On AIX and other platforms without weak symbol support, templates
636 need to be instantiated explicitly and symbols for static members
637 of templates will not be generated.
638
639 @item
640 On AIX, GCC scans object files and library archives for static
641 constructors and destructors when linking an application before the
642 linker prunes unreferenced symbols.  This is necessary to prevent the
643 AIX linker from mistakenly assuming that static constructor or
644 destructor are unused and removing them before the scanning can occur.
645 All static constructors and destructors found will be referenced even
646 though the modules in which they occur may not be used by the program.
647 This may lead to both increased executable size and unexpected symbol
648 references.
649 @end itemize
650
651 @node C++ Misunderstandings
652 @section Common Misunderstandings with GNU C++
653
654 @cindex misunderstandings in C++
655 @cindex surprises in C++
656 @cindex C++ misunderstandings
657 C++ is a complex language and an evolving one, and its standard
658 definition (the ISO C++ standard) was only recently completed.  As a
659 result, your C++ compiler may occasionally surprise you, even when its
660 behavior is correct.  This section discusses some areas that frequently
661 give rise to questions of this sort.
662
663 @menu
664 * Static Definitions::  Static member declarations are not definitions
665 * Name lookup::         Name lookup, templates, and accessing members of base classes
666 * Temporaries::         Temporaries may vanish before you expect
667 * Copy Assignment::     Copy Assignment operators copy virtual bases twice
668 @end menu
669
670 @node Static Definitions
671 @subsection Declare @emph{and} Define Static Members
672
673 @cindex C++ static data, declaring and defining
674 @cindex static data in C++, declaring and defining
675 @cindex declaring static data in C++
676 @cindex defining static data in C++
677 When a class has static data members, it is not enough to @emph{declare}
678 the static member; you must also @emph{define} it.  For example:
679
680 @smallexample
681 class Foo
682 @{
683   @dots{}
684   void method();
685   static int bar;
686 @};
687 @end smallexample
688
689 This declaration only establishes that the class @code{Foo} has an
690 @code{int} named @code{Foo::bar}, and a member function named
691 @code{Foo::method}.  But you still need to define @emph{both}
692 @code{method} and @code{bar} elsewhere.  According to the ISO
693 standard, you must supply an initializer in one (and only one) source
694 file, such as:
695
696 @smallexample
697 int Foo::bar = 0;
698 @end smallexample
699
700 Other C++ compilers may not correctly implement the standard behavior.
701 As a result, when you switch to @command{g++} from one of these compilers,
702 you may discover that a program that appeared to work correctly in fact
703 does not conform to the standard: @command{g++} reports as undefined
704 symbols any static data members that lack definitions.
705
706
707 @node Name lookup
708 @subsection Name lookup, templates, and accessing members of base classes
709
710 @cindex base class members
711 @cindex two-stage name lookup
712 @cindex dependent name lookup
713
714 The C++ standard prescribes that all names that are not dependent on
715 template parameters are bound to their present definitions when parsing
716 a template function or class.@footnote{The C++ standard just uses the
717 term ``dependent'' for names that depend on the type or value of
718 template parameters.  This shorter term will also be used in the rest of
719 this section.}  Only names that are dependent are looked up at the point
720 of instantiation.  For example, consider
721
722 @smallexample
723   void foo(double);
724
725   struct A @{
726     template <typename T>
727     void f () @{
728       foo (1);        // @r{1}
729       int i = N;      // @r{2}
730       T t;
731       t.bar();        // @r{3}
732       foo (t);        // @r{4}
733     @}
734
735     static const int N;
736   @};
737 @end smallexample
738
739 Here, the names @code{foo} and @code{N} appear in a context that does
740 not depend on the type of @code{T}.  The compiler will thus require that
741 they are defined in the context of use in the template, not only before
742 the point of instantiation, and will here use @code{::foo(double)} and
743 @code{A::N}, respectively.  In particular, it will convert the integer
744 value to a @code{double} when passing it to @code{::foo(double)}.
745
746 Conversely, @code{bar} and the call to @code{foo} in the fourth marked
747 line are used in contexts that do depend on the type of @code{T}, so
748 they are only looked up at the point of instantiation, and you can
749 provide declarations for them after declaring the template, but before
750 instantiating it.  In particular, if you instantiate @code{A::f<int>},
751 the last line will call an overloaded @code{::foo(int)} if one was
752 provided, even if after the declaration of @code{struct A}.
753
754 This distinction between lookup of dependent and non-dependent names is
755 called two-stage (or dependent) name lookup.  G++ implements it
756 since version 3.4.
757
758 Two-stage name lookup sometimes leads to situations with behavior
759 different from non-template codes.  The most common is probably this:
760
761 @smallexample
762   template <typename T> struct Base @{
763     int i;
764   @};
765
766   template <typename T> struct Derived : public Base<T> @{
767     int get_i() @{ return i; @}
768   @};
769 @end smallexample
770
771 In @code{get_i()}, @code{i} is not used in a dependent context, so the
772 compiler will look for a name declared at the enclosing namespace scope
773 (which is the global scope here).  It will not look into the base class,
774 since that is dependent and you may declare specializations of
775 @code{Base} even after declaring @code{Derived}, so the compiler can't
776 really know what @code{i} would refer to.  If there is no global
777 variable @code{i}, then you will get an error message.
778
779 In order to make it clear that you want the member of the base class,
780 you need to defer lookup until instantiation time, at which the base
781 class is known.  For this, you need to access @code{i} in a dependent
782 context, by either using @code{this->i} (remember that @code{this} is of
783 type @code{Derived<T>*}, so is obviously dependent), or using
784 @code{Base<T>::i}.  Alternatively, @code{Base<T>::i} might be brought
785 into scope by a @code{using}-declaration.
786
787 Another, similar example involves calling member functions of a base
788 class:
789
790 @smallexample
791   template <typename T> struct Base @{
792       int f();
793   @};
794
795   template <typename T> struct Derived : Base<T> @{
796       int g() @{ return f(); @};
797   @};
798 @end smallexample
799
800 Again, the call to @code{f()} is not dependent on template arguments
801 (there are no arguments that depend on the type @code{T}, and it is also
802 not otherwise specified that the call should be in a dependent context).
803 Thus a global declaration of such a function must be available, since
804 the one in the base class is not visible until instantiation time.  The
805 compiler will consequently produce the following error message:
806
807 @smallexample
808   x.cc: In member function `int Derived<T>::g()':
809   x.cc:6: error: there are no arguments to `f' that depend on a template
810      parameter, so a declaration of `f' must be available
811   x.cc:6: error: (if you use `-fpermissive', G++ will accept your code, but
812      allowing the use of an undeclared name is deprecated)
813 @end smallexample
814
815 To make the code valid either use @code{this->f()}, or
816 @code{Base<T>::f()}.  Using the @option{-fpermissive} flag will also let
817 the compiler accept the code, by marking all function calls for which no
818 declaration is visible at the time of definition of the template for
819 later lookup at instantiation time, as if it were a dependent call.
820 We do not recommend using @option{-fpermissive} to work around invalid
821 code, and it will also only catch cases where functions in base classes
822 are called, not where variables in base classes are used (as in the
823 example above).
824
825 Note that some compilers (including G++ versions prior to 3.4) get these
826 examples wrong and accept above code without an error.  Those compilers
827 do not implement two-stage name lookup correctly.
828
829
830 @node Temporaries
831 @subsection Temporaries May Vanish Before You Expect
832
833 @cindex temporaries, lifetime of
834 @cindex portions of temporary objects, pointers to
835 It is dangerous to use pointers or references to @emph{portions} of a
836 temporary object.  The compiler may very well delete the object before
837 you expect it to, leaving a pointer to garbage.  The most common place
838 where this problem crops up is in classes like string classes,
839 especially ones that define a conversion function to type @code{char *}
840 or @code{const char *}---which is one reason why the standard
841 @code{string} class requires you to call the @code{c_str} member
842 function.  However, any class that returns a pointer to some internal
843 structure is potentially subject to this problem.
844
845 For example, a program may use a function @code{strfunc} that returns
846 @code{string} objects, and another function @code{charfunc} that
847 operates on pointers to @code{char}:
848
849 @smallexample
850 string strfunc ();
851 void charfunc (const char *);
852
853 void
854 f ()
855 @{
856   const char *p = strfunc().c_str();
857   @dots{}
858   charfunc (p);
859   @dots{}
860   charfunc (p);
861 @}
862 @end smallexample
863
864 @noindent
865 In this situation, it may seem reasonable to save a pointer to the C
866 string returned by the @code{c_str} member function and use that rather
867 than call @code{c_str} repeatedly.  However, the temporary string
868 created by the call to @code{strfunc} is destroyed after @code{p} is
869 initialized, at which point @code{p} is left pointing to freed memory.
870
871 Code like this may run successfully under some other compilers,
872 particularly obsolete cfront-based compilers that delete temporaries
873 along with normal local variables.  However, the GNU C++ behavior is
874 standard-conforming, so if your program depends on late destruction of
875 temporaries it is not portable.
876
877 The safe way to write such code is to give the temporary a name, which
878 forces it to remain until the end of the scope of the name.  For
879 example:
880
881 @smallexample
882 const string& tmp = strfunc ();
883 charfunc (tmp.c_str ());
884 @end smallexample
885
886 @node Copy Assignment
887 @subsection Implicit Copy-Assignment for Virtual Bases
888
889 When a base class is virtual, only one subobject of the base class
890 belongs to each full object.  Also, the constructors and destructors are
891 invoked only once, and called from the most-derived class.  However, such
892 objects behave unspecified when being assigned.  For example:
893
894 @smallexample
895 struct Base@{
896   char *name;
897   Base(char *n) : name(strdup(n))@{@}
898   Base& operator= (const Base& other)@{
899    free (name);
900    name = strdup (other.name);
901   @}
902 @};
903
904 struct A:virtual Base@{
905   int val;
906   A():Base("A")@{@}
907 @};
908
909 struct B:virtual Base@{
910   int bval;
911   B():Base("B")@{@}
912 @};
913
914 struct Derived:public A, public B@{
915   Derived():Base("Derived")@{@}
916 @};
917
918 void func(Derived &d1, Derived &d2)
919 @{
920   d1 = d2;
921 @}
922 @end smallexample
923
924 The C++ standard specifies that @samp{Base::Base} is only called once
925 when constructing or copy-constructing a Derived object.  It is
926 unspecified whether @samp{Base::operator=} is called more than once when
927 the implicit copy-assignment for Derived objects is invoked (as it is
928 inside @samp{func} in the example).
929
930 G++ implements the ``intuitive'' algorithm for copy-assignment: assign all
931 direct bases, then assign all members.  In that algorithm, the virtual
932 base subobject can be encountered more than once.  In the example, copying
933 proceeds in the following order: @samp{val}, @samp{name} (via
934 @code{strdup}), @samp{bval}, and @samp{name} again.
935
936 If application code relies on copy-assignment, a user-defined
937 copy-assignment operator removes any uncertainties.  With such an
938 operator, the application can define whether and how the virtual base
939 subobject is assigned.
940
941 @node Protoize Caveats
942 @section Caveats of using @command{protoize}
943
944 The conversion programs @command{protoize} and @command{unprotoize} can
945 sometimes change a source file in a way that won't work unless you
946 rearrange it.
947
948 @itemize @bullet
949 @item
950 @command{protoize} can insert references to a type name or type tag before
951 the definition, or in a file where they are not defined.
952
953 If this happens, compiler error messages should show you where the new
954 references are, so fixing the file by hand is straightforward.
955
956 @item
957 There are some C constructs which @command{protoize} cannot figure out.
958 For example, it can't determine argument types for declaring a
959 pointer-to-function variable; this you must do by hand.  @command{protoize}
960 inserts a comment containing @samp{???} each time it finds such a
961 variable; so you can find all such variables by searching for this
962 string.  ISO C does not require declaring the argument types of
963 pointer-to-function types.
964
965 @item
966 Using @command{unprotoize} can easily introduce bugs.  If the program
967 relied on prototypes to bring about conversion of arguments, these
968 conversions will not take place in the program without prototypes.
969 One case in which you can be sure @command{unprotoize} is safe is when
970 you are removing prototypes that were made with @command{protoize}; if
971 the program worked before without any prototypes, it will work again
972 without them.
973
974 @opindex Wtraditional-conversion
975 You can find all the places where this problem might occur by compiling
976 the program with the @option{-Wtraditional-conversion} option.  It
977 prints a warning whenever an argument is converted.
978
979 @item
980 Both conversion programs can be confused if there are macro calls in and
981 around the text to be converted.  In other words, the standard syntax
982 for a declaration or definition must not result from expanding a macro.
983 This problem is inherent in the design of C and cannot be fixed.  If
984 only a few functions have confusing macro calls, you can easily convert
985 them manually.
986
987 @item
988 @command{protoize} cannot get the argument types for a function whose
989 definition was not actually compiled due to preprocessing conditionals.
990 When this happens, @command{protoize} changes nothing in regard to such
991 a function.  @command{protoize} tries to detect such instances and warn
992 about them.
993
994 You can generally work around this problem by using @command{protoize} step
995 by step, each time specifying a different set of @option{-D} options for
996 compilation, until all of the functions have been converted.  There is
997 no automatic way to verify that you have got them all, however.
998
999 @item
1000 Confusion may result if there is an occasion to convert a function
1001 declaration or definition in a region of source code where there is more
1002 than one formal parameter list present.  Thus, attempts to convert code
1003 containing multiple (conditionally compiled) versions of a single
1004 function header (in the same vicinity) may not produce the desired (or
1005 expected) results.
1006
1007 If you plan on converting source files which contain such code, it is
1008 recommended that you first make sure that each conditionally compiled
1009 region of source code which contains an alternative function header also
1010 contains at least one additional follower token (past the final right
1011 parenthesis of the function header).  This should circumvent the
1012 problem.
1013
1014 @item
1015 @command{unprotoize} can become confused when trying to convert a function
1016 definition or declaration which contains a declaration for a
1017 pointer-to-function formal argument which has the same name as the
1018 function being defined or declared.  We recommend you avoid such choices
1019 of formal parameter names.
1020
1021 @item
1022 You might also want to correct some of the indentation by hand and break
1023 long lines.  (The conversion programs don't write lines longer than
1024 eighty characters in any case.)
1025 @end itemize
1026
1027 @node Non-bugs
1028 @section Certain Changes We Don't Want to Make
1029
1030 This section lists changes that people frequently request, but which
1031 we do not make because we think GCC is better without them.
1032
1033 @itemize @bullet
1034 @item
1035 Checking the number and type of arguments to a function which has an
1036 old-fashioned definition and no prototype.
1037
1038 Such a feature would work only occasionally---only for calls that appear
1039 in the same file as the called function, following the definition.  The
1040 only way to check all calls reliably is to add a prototype for the
1041 function.  But adding a prototype eliminates the motivation for this
1042 feature.  So the feature is not worthwhile.
1043
1044 @item
1045 Warning about using an expression whose type is signed as a shift count.
1046
1047 Shift count operands are probably signed more often than unsigned.
1048 Warning about this would cause far more annoyance than good.
1049
1050 @item
1051 Warning about assigning a signed value to an unsigned variable.
1052
1053 Such assignments must be very common; warning about them would cause
1054 more annoyance than good.
1055
1056 @item
1057 Warning when a non-void function value is ignored.
1058
1059 C contains many standard functions that return a value that most
1060 programs choose to ignore.  One obvious example is @code{printf}.
1061 Warning about this practice only leads the defensive programmer to
1062 clutter programs with dozens of casts to @code{void}.  Such casts are
1063 required so frequently that they become visual noise.  Writing those
1064 casts becomes so automatic that they no longer convey useful
1065 information about the intentions of the programmer.  For functions
1066 where the return value should never be ignored, use the
1067 @code{warn_unused_result} function attribute (@pxref{Function
1068 Attributes}).
1069
1070 @item
1071 @opindex fshort-enums
1072 Making @option{-fshort-enums} the default.
1073
1074 This would cause storage layout to be incompatible with most other C
1075 compilers.  And it doesn't seem very important, given that you can get
1076 the same result in other ways.  The case where it matters most is when
1077 the enumeration-valued object is inside a structure, and in that case
1078 you can specify a field width explicitly.
1079
1080 @item
1081 Making bit-fields unsigned by default on particular machines where ``the
1082 ABI standard'' says to do so.
1083
1084 The ISO C standard leaves it up to the implementation whether a bit-field
1085 declared plain @code{int} is signed or not.  This in effect creates two
1086 alternative dialects of C@.
1087
1088 @opindex fsigned-bitfields
1089 @opindex funsigned-bitfields
1090 The GNU C compiler supports both dialects; you can specify the signed
1091 dialect with @option{-fsigned-bitfields} and the unsigned dialect with
1092 @option{-funsigned-bitfields}.  However, this leaves open the question of
1093 which dialect to use by default.
1094
1095 Currently, the preferred dialect makes plain bit-fields signed, because
1096 this is simplest.  Since @code{int} is the same as @code{signed int} in
1097 every other context, it is cleanest for them to be the same in bit-fields
1098 as well.
1099
1100 Some computer manufacturers have published Application Binary Interface
1101 standards which specify that plain bit-fields should be unsigned.  It is
1102 a mistake, however, to say anything about this issue in an ABI@.  This is
1103 because the handling of plain bit-fields distinguishes two dialects of C@.
1104 Both dialects are meaningful on every type of machine.  Whether a
1105 particular object file was compiled using signed bit-fields or unsigned
1106 is of no concern to other object files, even if they access the same
1107 bit-fields in the same data structures.
1108
1109 A given program is written in one or the other of these two dialects.
1110 The program stands a chance to work on most any machine if it is
1111 compiled with the proper dialect.  It is unlikely to work at all if
1112 compiled with the wrong dialect.
1113
1114 Many users appreciate the GNU C compiler because it provides an
1115 environment that is uniform across machines.  These users would be
1116 inconvenienced if the compiler treated plain bit-fields differently on
1117 certain machines.
1118
1119 Occasionally users write programs intended only for a particular machine
1120 type.  On these occasions, the users would benefit if the GNU C compiler
1121 were to support by default the same dialect as the other compilers on
1122 that machine.  But such applications are rare.  And users writing a
1123 program to run on more than one type of machine cannot possibly benefit
1124 from this kind of compatibility.
1125
1126 This is why GCC does and will treat plain bit-fields in the same
1127 fashion on all types of machines (by default).
1128
1129 There are some arguments for making bit-fields unsigned by default on all
1130 machines.  If, for example, this becomes a universal de facto standard,
1131 it would make sense for GCC to go along with it.  This is something
1132 to be considered in the future.
1133
1134 (Of course, users strongly concerned about portability should indicate
1135 explicitly in each bit-field whether it is signed or not.  In this way,
1136 they write programs which have the same meaning in both C dialects.)
1137
1138 @item
1139 @opindex ansi
1140 @opindex std
1141 Undefining @code{__STDC__} when @option{-ansi} is not used.
1142
1143 Currently, GCC defines @code{__STDC__} unconditionally.  This provides
1144 good results in practice.
1145
1146 Programmers normally use conditionals on @code{__STDC__} to ask whether
1147 it is safe to use certain features of ISO C, such as function
1148 prototypes or ISO token concatenation.  Since plain @command{gcc} supports
1149 all the features of ISO C, the correct answer to these questions is
1150 ``yes''.
1151
1152 Some users try to use @code{__STDC__} to check for the availability of
1153 certain library facilities.  This is actually incorrect usage in an ISO
1154 C program, because the ISO C standard says that a conforming
1155 freestanding implementation should define @code{__STDC__} even though it
1156 does not have the library facilities.  @samp{gcc -ansi -pedantic} is a
1157 conforming freestanding implementation, and it is therefore required to
1158 define @code{__STDC__}, even though it does not come with an ISO C
1159 library.
1160
1161 Sometimes people say that defining @code{__STDC__} in a compiler that
1162 does not completely conform to the ISO C standard somehow violates the
1163 standard.  This is illogical.  The standard is a standard for compilers
1164 that claim to support ISO C, such as @samp{gcc -ansi}---not for other
1165 compilers such as plain @command{gcc}.  Whatever the ISO C standard says
1166 is relevant to the design of plain @command{gcc} without @option{-ansi} only
1167 for pragmatic reasons, not as a requirement.
1168
1169 GCC normally defines @code{__STDC__} to be 1, and in addition
1170 defines @code{__STRICT_ANSI__} if you specify the @option{-ansi} option,
1171 or a @option{-std} option for strict conformance to some version of ISO C@.
1172 On some hosts, system include files use a different convention, where
1173 @code{__STDC__} is normally 0, but is 1 if the user specifies strict
1174 conformance to the C Standard.  GCC follows the host convention when
1175 processing system include files, but when processing user files it follows
1176 the usual GNU C convention.
1177
1178 @item
1179 Undefining @code{__STDC__} in C++.
1180
1181 Programs written to compile with C++-to-C translators get the
1182 value of @code{__STDC__} that goes with the C compiler that is
1183 subsequently used.  These programs must test @code{__STDC__}
1184 to determine what kind of C preprocessor that compiler uses:
1185 whether they should concatenate tokens in the ISO C fashion
1186 or in the traditional fashion.
1187
1188 These programs work properly with GNU C++ if @code{__STDC__} is defined.
1189 They would not work otherwise.
1190
1191 In addition, many header files are written to provide prototypes in ISO
1192 C but not in traditional C@.  Many of these header files can work without
1193 change in C++ provided @code{__STDC__} is defined.  If @code{__STDC__}
1194 is not defined, they will all fail, and will all need to be changed to
1195 test explicitly for C++ as well.
1196
1197 @item
1198 Deleting ``empty'' loops.
1199
1200 Historically, GCC has not deleted ``empty'' loops under the
1201 assumption that the most likely reason you would put one in a program is
1202 to have a delay, so deleting them will not make real programs run any
1203 faster.
1204
1205 However, the rationale here is that optimization of a nonempty loop
1206 cannot produce an empty one. This held for carefully written C compiled
1207 with less powerful optimizers but is not always the case for carefully
1208 written C++ or with more powerful optimizers.
1209 Thus GCC will remove operations from loops whenever it can determine
1210 those operations are not externally visible (apart from the time taken
1211 to execute them, of course).  In case the loop can be proved to be finite,
1212 GCC will also remove the loop itself.
1213
1214 Be aware of this when performing timing tests, for instance the
1215 following loop can be completely removed, provided
1216 @code{some_expression} can provably not change any global state.
1217
1218 @smallexample
1219 @{
1220    int sum = 0;
1221    int ix;
1222
1223    for (ix = 0; ix != 10000; ix++)
1224       sum += some_expression;
1225 @}
1226 @end smallexample
1227
1228 Even though @code{sum} is accumulated in the loop, no use is made of
1229 that summation, so the accumulation can be removed.
1230
1231 @item
1232 Making side effects happen in the same order as in some other compiler.
1233
1234 @cindex side effects, order of evaluation
1235 @cindex order of evaluation, side effects
1236 It is never safe to depend on the order of evaluation of side effects.
1237 For example, a function call like this may very well behave differently
1238 from one compiler to another:
1239
1240 @smallexample
1241 void func (int, int);
1242
1243 int i = 2;
1244 func (i++, i++);
1245 @end smallexample
1246
1247 There is no guarantee (in either the C or the C++ standard language
1248 definitions) that the increments will be evaluated in any particular
1249 order.  Either increment might happen first.  @code{func} might get the
1250 arguments @samp{2, 3}, or it might get @samp{3, 2}, or even @samp{2, 2}.
1251
1252 @item
1253 Making certain warnings into errors by default.
1254
1255 Some ISO C testsuites report failure when the compiler does not produce
1256 an error message for a certain program.
1257
1258 @opindex pedantic-errors
1259 ISO C requires a ``diagnostic'' message for certain kinds of invalid
1260 programs, but a warning is defined by GCC to count as a diagnostic.  If
1261 GCC produces a warning but not an error, that is correct ISO C support.
1262 If testsuites call this ``failure'', they should be run with the GCC
1263 option @option{-pedantic-errors}, which will turn these warnings into
1264 errors.
1265
1266 @end itemize
1267
1268 @node Warnings and Errors
1269 @section Warning Messages and Error Messages
1270
1271 @cindex error messages
1272 @cindex warnings vs errors
1273 @cindex messages, warning and error
1274 The GNU compiler can produce two kinds of diagnostics: errors and
1275 warnings.  Each kind has a different purpose:
1276
1277 @itemize @w{}
1278 @item
1279 @dfn{Errors} report problems that make it impossible to compile your
1280 program.  GCC reports errors with the source file name and line
1281 number where the problem is apparent.
1282
1283 @item
1284 @dfn{Warnings} report other unusual conditions in your code that
1285 @emph{may} indicate a problem, although compilation can (and does)
1286 proceed.  Warning messages also report the source file name and line
1287 number, but include the text @samp{warning:} to distinguish them
1288 from error messages.
1289 @end itemize
1290
1291 Warnings may indicate danger points where you should check to make sure
1292 that your program really does what you intend; or the use of obsolete
1293 features; or the use of nonstandard features of GNU C or C++.  Many
1294 warnings are issued only if you ask for them, with one of the @option{-W}
1295 options (for instance, @option{-Wall} requests a variety of useful
1296 warnings).
1297
1298 @opindex pedantic
1299 @opindex pedantic-errors
1300 GCC always tries to compile your program if possible; it never
1301 gratuitously rejects a program whose meaning is clear merely because
1302 (for instance) it fails to conform to a standard.  In some cases,
1303 however, the C and C++ standards specify that certain extensions are
1304 forbidden, and a diagnostic @emph{must} be issued by a conforming
1305 compiler.  The @option{-pedantic} option tells GCC to issue warnings in
1306 such cases; @option{-pedantic-errors} says to make them errors instead.
1307 This does not mean that @emph{all} non-ISO constructs get warnings
1308 or errors.
1309
1310 @xref{Warning Options,,Options to Request or Suppress Warnings}, for
1311 more detail on these and related command-line options.