【发布时间】:2015-07-04 04:54:02
【问题描述】:
阅读各种 C/C++ 代码,我可以说我对这两种在代码中包含头文件的方式感到困惑。
#include <stdio.h>
和
#include "stdio.h"
一些文本编辑器具有自动完成功能。我大部分时间都被推荐后者。但在各种程序示例中,也建议使用尖括号。
在编写 C/C++ 程序时应该选择哪一个?两者有什么区别?它们是特定语言的吗?
【问题讨论】:
阅读各种 C/C++ 代码,我可以说我对这两种在代码中包含头文件的方式感到困惑。
#include <stdio.h>
和
#include "stdio.h"
一些文本编辑器具有自动完成功能。我大部分时间都被推荐后者。但在各种程序示例中,也建议使用尖括号。
在编写 C/C++ 程序时应该选择哪一个?两者有什么区别?它们是特定语言的吗?
【问题讨论】:
不,它们不是特定于语言的。 C 和 C++ 都使用它们。
https://gcc.gnu.org/onlinedocs/gcc-3.1/cpp/Include-Syntax.html
使用预处理包含用户和系统头文件 指令“#include”。它有两种变体:
#include <file>此变体用于系统头文件。它搜索文件 系统目录的标准列表中的命名文件。你可以预先 使用 -I 选项将目录添加到此列表中(请参阅调用)。
#include "file"此变体用于您自己程序的头文件。它搜索 对于包含当前文件的目录中名为 file first 的文件 文件,然后在引用目录中,然后在使用的相同目录中 为
<file>。您可以将目录添加到报价列表中 带有-i引用选项的目录。#include的论点, 无论是用引号还是尖括号分隔,都表现得像 无法识别 cmet 中的字符串常量,并且宏名称 没有展开。因此,#include <x/*y>指定包含一个 名为x/*y的系统头文件。但是,如果文件中出现反斜杠,则将它们视为 普通文本字符,而不是转义字符。一个字符都没有 处理适合于 C 中字符串常量的转义序列。 因此,
#include "x\n\\y"指定一个包含三个 反斜杠。 (某些系统将\解释为路径名分隔符。所有 其中也以同样的方式解释/。它最便携使用 只有/。)如果有任何东西(除了 cmets)在行上是错误的 在文件名之后。
【讨论】:
-I 和当前目录等,甚至不需要作为“真实”文件存在的标头 :-) 整个事情都是特定于实现的。