• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/toolchains/hndtools-armeabi-2011.09/share/doc/arm-arm-none-eabi/html/gcc/
1<html lang="en">
2<head>
3<title>Diagnostic Pragmas - Using the GNU Compiler Collection (GCC)</title>
4<meta http-equiv="Content-Type" content="text/html">
5<meta name="description" content="Using the GNU Compiler Collection (GCC)">
6<meta name="generator" content="makeinfo 4.13">
7<link title="Top" rel="start" href="index.html#Top">
8<link rel="up" href="Pragmas.html#Pragmas" title="Pragmas">
9<link rel="prev" href="Weak-Pragmas.html#Weak-Pragmas" title="Weak Pragmas">
10<link rel="next" href="Visibility-Pragmas.html#Visibility-Pragmas" title="Visibility Pragmas">
11<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
12<!--
13Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997,
141998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
152010 Free Software Foundation, Inc.
16
17Permission is granted to copy, distribute and/or modify this document
18under the terms of the GNU Free Documentation License, Version 1.3 or
19any later version published by the Free Software Foundation; with the
20Invariant Sections being ``Funding Free Software'', the Front-Cover
21Texts being (a) (see below), and with the Back-Cover Texts being (b)
22(see below).  A copy of the license is included in the section entitled
23``GNU Free Documentation License''.
24
25(a) The FSF's Front-Cover Text is:
26
27     A GNU Manual
28
29(b) The FSF's Back-Cover Text is:
30
31     You have freedom to copy and modify this GNU Manual, like GNU
32     software.  Copies published by the Free Software Foundation raise
33     funds for GNU development.-->
34<meta http-equiv="Content-Style-Type" content="text/css">
35<style type="text/css"><!--
36  pre.display { font-family:inherit }
37  pre.format  { font-family:inherit }
38  pre.smalldisplay { font-family:inherit; font-size:smaller }
39  pre.smallformat  { font-family:inherit; font-size:smaller }
40  pre.smallexample { font-size:smaller }
41  pre.smalllisp    { font-size:smaller }
42  span.sc    { font-variant:small-caps }
43  span.roman { font-family:serif; font-weight:normal; } 
44  span.sansserif { font-family:sans-serif; font-weight:normal; } 
45--></style>
46<link rel="stylesheet" type="text/css" href="../cs.css">
47</head>
48<body>
49<div class="node">
50<a name="Diagnostic-Pragmas"></a>
51<p>
52Next:&nbsp;<a rel="next" accesskey="n" href="Visibility-Pragmas.html#Visibility-Pragmas">Visibility Pragmas</a>,
53Previous:&nbsp;<a rel="previous" accesskey="p" href="Weak-Pragmas.html#Weak-Pragmas">Weak Pragmas</a>,
54Up:&nbsp;<a rel="up" accesskey="u" href="Pragmas.html#Pragmas">Pragmas</a>
55<hr>
56</div>
57
58<h4 class="subsection">6.56.10 Diagnostic Pragmas</h4>
59
60<p>GCC allows the user to selectively enable or disable certain types of
61diagnostics, and change the kind of the diagnostic.  For example, a
62project's policy might require that all sources compile with
63<samp><span class="option">-Werror</span></samp> but certain files might have exceptions allowing
64specific types of warnings.  Or, a project might selectively enable
65diagnostics and treat them as errors depending on which preprocessor
66macros are defined.
67
68     <dl>
69<dt><code>#pragma GCC diagnostic </code><var>kind</var> <var>option</var><dd><a name="index-pragma_002c-diagnostic-3235"></a>
70Modifies the disposition of a diagnostic.  Note that not all
71diagnostics are modifiable; at the moment only warnings (normally
72controlled by &lsquo;<samp><span class="samp">-W...</span></samp>&rsquo;) can be controlled, and not all of them. 
73Use <samp><span class="option">-fdiagnostics-show-option</span></samp> to determine which diagnostics
74are controllable and which option controls them.
75
76     <p><var>kind</var> is &lsquo;<samp><span class="samp">error</span></samp>&rsquo; to treat this diagnostic as an error,
77&lsquo;<samp><span class="samp">warning</span></samp>&rsquo; to treat it like a warning (even if <samp><span class="option">-Werror</span></samp> is
78in effect), or &lsquo;<samp><span class="samp">ignored</span></samp>&rsquo; if the diagnostic is to be ignored. 
79<var>option</var> is a double quoted string which matches the command-line
80option.
81
82     <pre class="example">          #pragma GCC diagnostic warning "-Wformat"
83          #pragma GCC diagnostic error "-Wformat"
84          #pragma GCC diagnostic ignored "-Wformat"
85</pre>
86     <p>Note that these pragmas override any command-line options.  GCC keeps
87track of the location of each pragma, and issues diagnostics according
88to the state as of that point in the source file.  Thus, pragmas occurring
89after a line do not affect diagnostics caused by that line.
90
91     <br><dt><code>#pragma GCC diagnostic push</code><dt><code>#pragma GCC diagnostic pop</code><dd>
92Causes GCC to remember the state of the diagnostics as of each
93<code>push</code>, and restore to that point at each <code>pop</code>.  If a
94<code>pop</code> has no matching <code>push</code>, the command line options are
95restored.
96
97     <pre class="example">          #pragma GCC diagnostic error "-Wuninitialized"
98            foo(a);			/* error is given for this one */
99          #pragma GCC diagnostic push
100          #pragma GCC diagnostic ignored "-Wuninitialized"
101            foo(b);			/* no diagnostic for this one */
102          #pragma GCC diagnostic pop
103            foo(c);			/* error is given for this one */
104          #pragma GCC diagnostic pop
105            foo(d);			/* depends on command line options */
106</pre>
107     </dl>
108
109 <p>GCC also offers a simple mechanism for printing messages during
110compilation.
111
112     <dl>
113<dt><code>#pragma message </code><var>string</var><dd><a name="index-pragma_002c-diagnostic-3236"></a>
114Prints <var>string</var> as a compiler message on compilation.  The message
115is informational only, and is neither a compilation warning nor an error.
116
117     <pre class="smallexample">          #pragma message "Compiling " __FILE__ "..."
118</pre>
119     <p><var>string</var> may be parenthesized, and is printed with location
120information.  For example,
121
122     <pre class="smallexample">          #define DO_PRAGMA(x) _Pragma (#x)
123          #define TODO(x) DO_PRAGMA(message ("TODO - " #x))
124          
125          TODO(Remember to fix this)
126</pre>
127     <p>prints &lsquo;<samp><span class="samp">/tmp/file.c:4: note: #pragma message:
128TODO - Remember to fix this</span></samp>&rsquo;.
129
130 </dl>
131
132 </body></html>
133
134