File: GCC-warning-options-for-numerical-programs.html

package info (click to toggle)
gsl-ref-html 2.3-1
  • links: PTS
  • area: non-free
  • in suites: bullseye, buster, sid
  • size: 6,876 kB
  • ctags: 4,574
  • sloc: makefile: 35
file content (192 lines) | stat: -rw-r--r-- 8,818 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 The GSL Team.

Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being "GNU General Public License" and "Free Software
Needs Free Documentation", the Front-Cover text being "A GNU Manual",
and with the Back-Cover Text being (a) (see below). A copy of the
license is included in the section entitled "GNU Free Documentation
License".

(a) The Back-Cover Text is: "You have the freedom to copy and modify this
GNU Manual." -->
<!-- Created by GNU Texinfo 5.1, http://www.gnu.org/software/texinfo/ -->
<head>
<title>GNU Scientific Library &ndash; Reference Manual: GCC warning options for numerical programs</title>

<meta name="description" content="GNU Scientific Library &ndash; Reference Manual: GCC warning options for numerical programs">
<meta name="keywords" content="GNU Scientific Library &ndash; Reference Manual: GCC warning options for numerical programs">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="index.html#Top" rel="start" title="Top">
<link href="Function-Index.html#Function-Index" rel="index" title="Function Index">
<link href="Debugging-Numerical-Programs.html#Debugging-Numerical-Programs" rel="up" title="Debugging Numerical Programs">
<link href="Debugging-References.html#Debugging-References" rel="next" title="Debugging References">
<link href="Handling-floating-point-exceptions.html#Handling-floating-point-exceptions" rel="previous" title="Handling floating point exceptions">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.indentedblock {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
div.smalllisp {margin-left: 3.2em}
kbd {font-style:oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
pre.smalldisplay {font-family: inherit; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: inherit; font-size: smaller}
pre.smalllisp {font-size: smaller}
span.nocodebreak {white-space:nowrap}
span.nolinebreak {white-space:nowrap}
span.roman {font-family:serif; font-weight:normal}
span.sansserif {font-family:sans-serif; font-weight:normal}
ul.no-bullet {list-style: none}
-->
</style>


</head>

<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
<a name="GCC-warning-options-for-numerical-programs"></a>
<div class="header">
<p>
Next: <a href="Debugging-References.html#Debugging-References" accesskey="n" rel="next">Debugging References</a>, Previous: <a href="Handling-floating-point-exceptions.html#Handling-floating-point-exceptions" accesskey="p" rel="previous">Handling floating point exceptions</a>, Up: <a href="Debugging-Numerical-Programs.html#Debugging-Numerical-Programs" accesskey="u" rel="up">Debugging Numerical Programs</a> &nbsp; [<a href="Function-Index.html#Function-Index" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<a name="GCC-warning-options-for-numerical-programs-1"></a>
<h3 class="section">A.4 GCC warning options for numerical programs</h3>
<a name="index-warning-options"></a>
<a name="index-gcc-warning-options"></a>

<p>Writing reliable numerical programs in C requires great care.  The
following GCC warning options are recommended when compiling numerical
programs:
</p>










<div class="example">
<pre class="example">gcc -ansi -pedantic -Werror -Wall -W 
  -Wmissing-prototypes -Wstrict-prototypes 
  -Wconversion -Wshadow -Wpointer-arith 
  -Wcast-qual -Wcast-align 
  -Wwrite-strings -Wnested-externs 
  -fshort-enums -fno-common -Dinline= -g -O2
</pre></div>

<p>For details of each option consult the manual <cite>Using and Porting
GCC</cite>.  The following table gives a brief explanation of what types of
errors these options catch.
</p>
<dl compact="compact">
<dt><code>-ansi -pedantic</code></dt>
<dd><p>Use ANSI C, and reject any non-ANSI extensions.  These flags help in
writing portable programs that will compile on other systems.
</p></dd>
<dt><code>-Werror</code></dt>
<dd><p>Consider warnings to be errors, so that compilation stops.  This prevents
warnings from scrolling off the top of the screen and being lost.  You
won&rsquo;t be able to compile the program until it is completely
warning-free.
</p></dd>
<dt><code>-Wall</code></dt>
<dd><p>This turns on a set of warnings for common programming problems.  You
need <code>-Wall</code>, but it is not enough on its own.
</p></dd>
<dt><code>-O2</code></dt>
<dd><p>Turn on optimization.  The warnings for uninitialized variables in
<code>-Wall</code> rely on the optimizer to analyze the code.  If there is no
optimization then these warnings aren&rsquo;t generated.
</p></dd>
<dt><code>-W</code></dt>
<dd><p>This turns on some extra warnings not included in <code>-Wall</code>, such as
missing return values and comparisons between signed and unsigned
integers.
</p></dd>
<dt><code>-Wmissing-prototypes -Wstrict-prototypes</code></dt>
<dd><p>Warn if there are any missing or inconsistent prototypes.  Without
prototypes it is harder to detect problems with incorrect arguments. 
</p></dd>
<dt><code>-Wconversion</code></dt>
<dd><p>The main use of this option is to warn about conversions from signed to
unsigned integers.  For example, <code>unsigned int x = -1</code>.  If you need
to perform such a conversion you can use an explicit cast.
</p></dd>
<dt><code>-Wshadow</code></dt>
<dd><p>This warns whenever a local variable shadows another local variable.  If
two variables have the same name then it is a potential source of
confusion.
</p></dd>
<dt><code>-Wpointer-arith -Wcast-qual -Wcast-align</code></dt>
<dd><p>These options warn if you try to do pointer arithmetic for types which
don&rsquo;t have a size, such as <code>void</code>, if you remove a <code>const</code>
cast from a pointer, or if you cast a pointer to a type which has a
different size, causing an invalid alignment.
</p></dd>
<dt><code>-Wwrite-strings</code></dt>
<dd><p>This option gives string constants a <code>const</code> qualifier so that it
will be a compile-time error to attempt to overwrite them.
</p></dd>
<dt><code>-fshort-enums</code></dt>
<dd><p>This option makes the type of <code>enum</code> as short as possible.  Normally
this makes an <code>enum</code> different from an <code>int</code>.  Consequently any
attempts to assign a pointer-to-int to a pointer-to-enum will generate a
cast-alignment warning.
</p></dd>
<dt><code>-fno-common</code></dt>
<dd><p>This option prevents global variables being simultaneously defined in
different object files (you get an error at link time).  Such a variable
should be defined in one file and referred to in other files with an
<code>extern</code> declaration.
</p></dd>
<dt><code>-Wnested-externs</code></dt>
<dd><p>This warns if an <code>extern</code> declaration is encountered within a
function.
</p></dd>
<dt><code>-Dinline=</code></dt>
<dd><p>The <code>inline</code> keyword is not part of ANSI C. Thus if you want to use
<code>-ansi</code> with a program which uses inline functions you can use this
preprocessor definition to remove the <code>inline</code> keywords.
</p></dd>
<dt><code>-g</code></dt>
<dd><p>It always makes sense to put debugging symbols in the executable so that
you can debug it using <code>gdb</code>.  The only effect of debugging symbols
is to increase the size of the file, and you can use the <code>strip</code>
command to remove them later if necessary.
</p></dd>
</dl>




<hr>
<div class="header">
<p>
Next: <a href="Debugging-References.html#Debugging-References" accesskey="n" rel="next">Debugging References</a>, Previous: <a href="Handling-floating-point-exceptions.html#Handling-floating-point-exceptions" accesskey="p" rel="previous">Handling floating point exceptions</a>, Up: <a href="Debugging-Numerical-Programs.html#Debugging-Numerical-Programs" accesskey="u" rel="up">Debugging Numerical Programs</a> &nbsp; [<a href="Function-Index.html#Function-Index" title="Index" rel="index">Index</a>]</p>
</div>



</body>
</html>