Foo*_*ron 5 c include c-preprocessor
src我有一个带有和目录的项目include。编译时,我include通过-I选项 ( gcc -Iinclude ...) 传递目录。
我应该使用双引号 ( ") 还是尖括号 ( <) 来包含我自己的头文件?
我试图寻找答案,发现这两个相互矛盾的陈述:
我认为陈述2更清楚。当包含带双引号的文件时,最明显的是它是我自己的标头。
我应该使用引号或括号来包含我自己的头文件吗?C 标准允许这两种可能性。那么最佳实践是什么?
共同的约定是:
\n< \xe2\x80\xa6 >属于 C 实现一部分的头文件或项目外部的 platform\xe2\x80\x94headers,例如 C 标准库、Unix 或 Windows 头文件以及通常为您的开发环境安装的库的头文件。" \xe2\x80\xa6 "属于项目一部分的标题。这并不完全由C标准决定;这是一般做法的问题。对于每个分隔符选择,编译器都有一个查找标头的位置列表(搜索路径)。这些搜索路径通常旨在促进上述使用,但它们可以通过命令行开关、环境变量、系统设置和/或构建编译器时进行的设置进行自定义(取决于您使用的编译器)。
\n以下是 C 标准在 C 2018 6.10.2 中对它们的描述。第 2 段说:
\n\n\n表单的预处理指令
\n\n
#include<h 字符序列>new-line在一系列实现定义的位置中搜索由
\n<和>分隔符之间的指定序列唯一标识的标头,并导致用标头的整个内容替换该指令。如何指定位置或标识标头是实现定义的。
第 3 段说:
\n\n\n表单的预处理指令
\n\n
#include"q-字符序列"换行符导致将该指令替换为由 " 分隔符之间的指定序列标识的源文件的全部内容。以实现定义的方式搜索指定的源文件。如果不支持此搜索,或者搜索失败,该指令被重新处理,就像它读取一样
\n\n
#include<h-字符序列>换行符\n
>具有与原始指令相同的包含序列(包括字符,如果有的话)。
请注意两者之间的一些差异:
\n标准中的这段文本相当宽松,两者都允许实现定义的方法来识别文件,因此可以将其中一个延伸为与另一个相同(尽管看到编译器抱怨括号中命名的标头是很有趣的)不是唯一的),并且编译器配置选项足够广泛,您可以在项目中以任何一种方式使用每个选项。然而,通常最好遵守惯例。
\n