The GNU compiler can produce two kinds of diagnostics: errors and warnings. Each kind has a different purpose:
Errors report problems that make it impossible to compile your program. The compiler reports errors with the source file name and line number where the problem is apparent.
Warnings report other unusual conditions in your code that may indicate a problem, although compilation can (and does) proceed. Warning messages also report the source file name and line number, but include the text "warning:" to distinguish them from error messages.
Warnings may indicate danger points where you should check to make sure that your program really does what you intend; or the use of obsolete features; or the use of nonstandard features of GNU C or C++. Many warnings are issued only if you ask for them, with one of the -W options (for instance, -Wall requests a variety of useful warnings).
The compiler always tries to compile your program if possible; it never gratuitously rejects a program whose meaning is clear merely because (for instance) it fails to conform to a standard. In some cases, however, the C and C++ standards specify that certain extensions are forbidden, and a diagnostic must be issued by a conforming compiler. The -pedantic option tells the compiler to issue warnings in such cases; -pedantic-errors says to make them errors instead. This does not mean that all non-ANSI constructs get warnings or errors.
See Section 1.6, for more detail on these and related command-line options.