What is the difference between "" and <> when a header file is included in a program? [duplicate]
Possible Duplicate:
what is the difference between #include <filename> and #include “filename”
I would like to know what's the difference between
#include "stdio.h"
and
#include <stdio.h>
Use <whatever>
for system headers, and "whatever"
for your own headers.
The difference is that when it's enclosed in quotes, the compiler will look in the local directory, but with <>
, it won't. If you want to get technical, the C standard doesn't guarantee that, but it's how essentially all compilers work.
""
searches in current file's path.
<>
searches in global include paths.
Edit: You asked for absolute path and relative path.
Assume you have a file structure as follows:
folderX
-fileX.a
-fileX.b
-folderX.Y
-fileX.Y.a
-fileX.Y.b
-folderX.Z
-fileX.Z.a
Then, the absolute path of fileX.Z.a
would be folderX/folderX.Z/fileX.Z.a
, assuming that folderX
is the topmost directory available. The relative path of fileX.Z.a
relative to e.g. fileX.a
is just the part folderX.Z/fileX.Z.a
, i.e. you start the path in the directory where fileX.a
lies.
#include <file>
This variant is used for system header files. It searches for a file named file in a standard list of system directories. You can prepend directories to this list with the `-I' option.
#include "file"
This variant is used for header files of your own program. It searches for a file named file first in the directory containing the current file, then in the same directories used for .
The argument of #include
, whether delimited with quote marks or angle brackets, behaves like a string constant in that comments are not recognized, and macro names are not expanded. Thus, #include specifies inclusion of a system header file named `x/*y'.
However, if backslashes occur within filename, they are considered ordinary text characters, not escape characters. None of the character escape sequences appropriate to string constants in C are processed.
Reference:
精彩评论