It's compiler dependent. That said, in general using " prioritizes headers in the current working directory over system headers. <> usually is used for system header. From to the spec (Section 6.10.2):
A preprocessing directive of the form
# include <h-char-sequence> new-linesearches 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-linecauses 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-linewith the identical contained sequence (including
>characters, if any) from the original directive.
So on most compilers, using the "" first checks your local directory, and if it doesn't find a match then moves on to check the system paths. Using <> starts the search with system headers.