我正在争论要使用什么 c include 样式。 This 建议将
#include <foo.h>
样式用于系统标题,而不是您编写的任何内容,并且 #include "bar.h"
样式用于任何用户编写的标题。然而,c 的 CLion 自动导入器与此相矛盾。
Cmake 将两个目录都定位为项目的包含目录,但自动导入器希望从 foo.c 添加
关于什么是正确的包含方式存在一些争议。我的理解是
<>
看起来自上而下的标题,而 ""
看起来本地,然后自上而下的标题。那么 clion 使用的优化是正确的,如果在这里,就看这里,如果不在这里,就从上往下看?
这主要是编码风格的问题。两种不同样式的约定和目的是,
#include <header.h>
适用于标准/系统库或编译器提供的其他库,#include "header.h"
适用于其他所有内容,包括您自己的代码和您正在使用的任何第三方库。
然而,C标准明确规定,当使用
#include "header.h"
时,编译器将首先在本地项目/用户目录中查找,如果找不到标头,则会在系统库中查找,就像您输入了 #include <header.h>
一样。意味着无论您包含什么标头,#include "header.h"
都将始终有效。尽管使用该形式包含标准/系统标头是不好的做法,因为这样做是非常规的。
如果某些 IDE 尝试以相反的方式进行操作,
#include <header.h>
对于用户标头,那么该 IDE 就会感到困惑并且行为不正确。