ful*_*ton 12 c++ compiler-construction include
除了编译器搜索路径的方式之外,两个#include语法之间是否存在根本区别?
我觉得英特尔的编译器没有提供完全相同的输出.
unw*_*ind 23
根本区别在于搜索哪些路径.
您应该使用"系统"包含的尖括号形式,以及项目本地包含的常规引号.
Dan*_*ing 22
C语言标准表示<>将用于"标题",并""用于"源文件".现在,不要全神贯注于"源文件"的事情.当标准说"源文件"时,它并不意味着你的想法.标准中使用的术语"源文件"包含我们通俗地称之为"头文件"的内容(除了我们通常称之为"源文件"的内容).
当标准谈到"标题"时,它根本不是专门讨论文件.该标准不要求标题作为文件存在.它们可以内置于编译器中以用于所有标准维护.
所以,真正的区别<>和""是<>用于头和""用于文件.如果你知道你将要包含的来源是一个文件,那么你应该使用"".
在实践中,编译器使用不同的搜索算法<>对"".标准允许这样做,因为用于任何一个的搜索算法是实现定义的.但这不是标准所表达的真正差异.
Dan Molding做对了; 放松,黑客和尼克巴斯汀弄错了.抱歉.
#include <...>
Run Code Online (Sandbox Code Playgroud)
是标题,甚至不需要是文件系统中的文件,但可以是例如编译器内部的.
#include "..."
Run Code Online (Sandbox Code Playgroud)
是用于文件,并且只有在找不到这样的文件时,它才会默认返回#include <...>.
查找这些头文件和文件的方式和位置,以及<>是否应该用于系统文件和""用于项目文件,这确实是一种常见的约定,完全取决于编译器和项目.
C标准(ISO/IEC 9899:1999)说(强调我的):
6.10.2源文件包含
约束
甲
#include指示字应识别能够由实现待处理的报头或源文件.语义
表单的预处理指令
#include <h-char-sequence> new-line搜索一系列实现定义的位置,以查找由 <和>分隔符之间的指定序列唯一标识的标头,并使标头的整个内容替换该指令.如何指定场所或标识的头是实现定义的.
表单的预处理指令
#include "q-char-sequence" new-line导致由"delimiters"之间的指定序列标识的源文件的全部内容替换该指令 .以实现定义的方式搜索指定的源文件.如果不支持此搜索,或者搜索失败后,指令被重新处理,就像它读取一样
#include <h-char-sequence> new-line使用原始指令中相同的包含序列(包括>字符,如果有的话).
引用指示首先在当前目录中搜索,然后在系统目录中搜索(在编译器/预处理器中硬编码的路径或指定的路径-I).通过使用尖括号,您可以选择不先搜索当前目录.
编译器输出肯定不依赖于引号,因为它是在预处理阶段处理的.除了由于更改的搜索行为导致的情况,包括不同的文件.
| 归档时间: |
|
| 查看次数: |
2383 次 |
| 最近记录: |