Dan Moulding got it right; unwind, hacker, and Nick Bastin got it wrong. Sorry.
#include <...>
is for headers, which need not even be files in the filesystem, but could e.g. be internal to the compiler.
#include "..."
is for files, and only if no such file can be found, does it default back to #include <...>
.
How and where these headers and files are looked for, and whether < > should be used for system files and " " for project files, which is indeed a common convention, is completely up to the compiler and the project.
The C Standard (ISO/IEC 9899:1999) says (emphasis mine):
6.10.2 Source file inclusion
Constraints
A #include
directive
shall identify a header or source file
that can be processed by the
implementation.
Semantics
A preprocessing directive of the form
#include <h-char-sequence> new-line
searches a sequence of
implementation-defined places for a
header identified uniquely by the
specified sequence between the < and >
delimiters, and causes the replacement
of that directive by the entire
contents of the header. How the places
are specified or the header identified
is implementation-defined.
A preprocessing directive of the form
#include "q-char-sequence" new-line
causes the replacement of that
directive by the entire contents of
the source file identified by the
specified sequence between the "
delimiters. The named source file is
searched for in an > implementation-defined manner.
If this
search is not supported, or if the
search fails, the directive is
reprocessed as if it read
#include <h-char-sequence> new-line
with the identical
contained sequence (including >
characters, if any) from the original
directive.