| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> |
| <html> |
| <!-- Copyright (C) 1988-2015 Free Software Foundation, Inc. |
| |
| 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 "Funding Free Software", the Front-Cover |
| Texts being (a) (see below), and with the Back-Cover Texts being (b) |
| (see below). A copy of the license is included in the section entitled |
| "GNU Free Documentation License". |
| |
| (a) The FSF's Front-Cover Text is: |
| |
| A GNU Manual |
| |
| (b) The FSF's Back-Cover Text is: |
| |
| You have freedom to copy and modify this GNU Manual, like GNU |
| software. Copies published by the Free Software Foundation raise |
| funds for GNU development. --> |
| <!-- Created by GNU Texinfo 5.2, http://www.gnu.org/software/texinfo/ --> |
| <head> |
| <title>Using the GNU Compiler Collection (GCC): Diagnostic Pragmas</title> |
| |
| <meta name="description" content="Using the GNU Compiler Collection (GCC): Diagnostic Pragmas"> |
| <meta name="keywords" content="Using the GNU Compiler Collection (GCC): Diagnostic Pragmas"> |
| <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="Option-Index.html#Option-Index" rel="index" title="Option Index"> |
| <link href="index.html#SEC_Contents" rel="contents" title="Table of Contents"> |
| <link href="Pragmas.html#Pragmas" rel="up" title="Pragmas"> |
| <link href="Visibility-Pragmas.html#Visibility-Pragmas" rel="next" title="Visibility Pragmas"> |
| <link href="Weak-Pragmas.html#Weak-Pragmas" rel="prev" title="Weak Pragmas"> |
| <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="Diagnostic-Pragmas"></a> |
| <div class="header"> |
| <p> |
| Next: <a href="Visibility-Pragmas.html#Visibility-Pragmas" accesskey="n" rel="next">Visibility Pragmas</a>, Previous: <a href="Weak-Pragmas.html#Weak-Pragmas" accesskey="p" rel="prev">Weak Pragmas</a>, Up: <a href="Pragmas.html#Pragmas" accesskey="u" rel="up">Pragmas</a> [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Option-Index.html#Option-Index" title="Index" rel="index">Index</a>]</p> |
| </div> |
| <hr> |
| <a name="Diagnostic-Pragmas-1"></a> |
| <h4 class="subsection">6.59.10 Diagnostic Pragmas</h4> |
| |
| <p>GCC allows the user to selectively enable or disable certain types of |
| diagnostics, and change the kind of the diagnostic. For example, a |
| project’s policy might require that all sources compile with |
| <samp>-Werror</samp> but certain files might have exceptions allowing |
| specific types of warnings. Or, a project might selectively enable |
| diagnostics and treat them as errors depending on which preprocessor |
| macros are defined. |
| </p> |
| <dl compact="compact"> |
| <dt><code>#pragma GCC diagnostic <var>kind</var> <var>option</var></code></dt> |
| <dd><a name="index-pragma_002c-diagnostic"></a> |
| |
| <p>Modifies the disposition of a diagnostic. Note that not all |
| diagnostics are modifiable; at the moment only warnings (normally |
| controlled by ‘<samp>-W…</samp>’) can be controlled, and not all of them. |
| Use <samp>-fdiagnostics-show-option</samp> to determine which diagnostics |
| are controllable and which option controls them. |
| </p> |
| <p><var>kind</var> is ‘<samp>error</samp>’ to treat this diagnostic as an error, |
| ‘<samp>warning</samp>’ to treat it like a warning (even if <samp>-Werror</samp> is |
| in effect), or ‘<samp>ignored</samp>’ if the diagnostic is to be ignored. |
| <var>option</var> is a double quoted string that matches the command-line |
| option. |
| </p> |
| <div class="smallexample"> |
| <pre class="smallexample">#pragma GCC diagnostic warning "-Wformat" |
| #pragma GCC diagnostic error "-Wformat" |
| #pragma GCC diagnostic ignored "-Wformat" |
| </pre></div> |
| |
| <p>Note that these pragmas override any command-line options. GCC keeps |
| track of the location of each pragma, and issues diagnostics according |
| to the state as of that point in the source file. Thus, pragmas occurring |
| after a line do not affect diagnostics caused by that line. |
| </p> |
| </dd> |
| <dt><code>#pragma GCC diagnostic push</code></dt> |
| <dt><code>#pragma GCC diagnostic pop</code></dt> |
| <dd> |
| <p>Causes GCC to remember the state of the diagnostics as of each |
| <code>push</code>, and restore to that point at each <code>pop</code>. If a |
| <code>pop</code> has no matching <code>push</code>, the command-line options are |
| restored. |
| </p> |
| <div class="smallexample"> |
| <pre class="smallexample">#pragma GCC diagnostic error "-Wuninitialized" |
| foo(a); /* error is given for this one */ |
| #pragma GCC diagnostic push |
| #pragma GCC diagnostic ignored "-Wuninitialized" |
| foo(b); /* no diagnostic for this one */ |
| #pragma GCC diagnostic pop |
| foo(c); /* error is given for this one */ |
| #pragma GCC diagnostic pop |
| foo(d); /* depends on command-line options */ |
| </pre></div> |
| |
| </dd> |
| </dl> |
| |
| <p>GCC also offers a simple mechanism for printing messages during |
| compilation. |
| </p> |
| <dl compact="compact"> |
| <dt><code>#pragma message <var>string</var></code></dt> |
| <dd><a name="index-pragma_002c-diagnostic-1"></a> |
| |
| <p>Prints <var>string</var> as a compiler message on compilation. The message |
| is informational only, and is neither a compilation warning nor an error. |
| </p> |
| <div class="smallexample"> |
| <pre class="smallexample">#pragma message "Compiling " __FILE__ "..." |
| </pre></div> |
| |
| <p><var>string</var> may be parenthesized, and is printed with location |
| information. For example, |
| </p> |
| <div class="smallexample"> |
| <pre class="smallexample">#define DO_PRAGMA(x) _Pragma (#x) |
| #define TODO(x) DO_PRAGMA(message ("TODO - " #x)) |
| |
| TODO(Remember to fix this) |
| </pre></div> |
| |
| <p>prints ‘<samp>/tmp/file.c:4: note: #pragma message: |
| TODO - Remember to fix this</samp>’. |
| </p> |
| </dd> |
| </dl> |
| |
| <hr> |
| <div class="header"> |
| <p> |
| Next: <a href="Visibility-Pragmas.html#Visibility-Pragmas" accesskey="n" rel="next">Visibility Pragmas</a>, Previous: <a href="Weak-Pragmas.html#Weak-Pragmas" accesskey="p" rel="prev">Weak Pragmas</a>, Up: <a href="Pragmas.html#Pragmas" accesskey="u" rel="up">Pragmas</a> [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Option-Index.html#Option-Index" title="Index" rel="index">Index</a>]</p> |
| </div> |
| |
| |
| |
| </body> |
| </html> |