C++ C++;标题,foo.h vs cfoo

C++ C++;标题,foo.h vs cfoo,c++,include,standards,C++,Include,Standards,如果确实希望将函数放置到全局命名空间中,那么使用这种样式有什么好处: #include <cfoo> using namespace std; #包括 使用名称空间std; 或者一个人能做什么 #include <foo.h> #包括 对于相同的效果,< P>如果“Fo.H”不是用C++编写的,“在C++环境中它不会很好地工作”。p> “CFOO”样式头用于使内容“适合”C++。旧样式的头文件主要是为了保持兼容性 这两种解决方案都相当糟糕,因为当您稍后发现刚刚发生

如果确实希望将函数放置到全局命名空间中,那么使用这种样式有什么好处:

#include <cfoo>
using namespace std;
#包括
使用名称空间std;
或者一个人能做什么

#include <foo.h>
#包括

对于相同的效果,

< P>如果“Fo.H”不是用C++编写的,“在C++环境中它不会很好地工作”。p>

“CFOO”样式头用于使内容“适合”C++。旧样式的头文件主要是为了保持兼容性

这两种解决方案都相当糟糕,因为当您稍后发现刚刚发生名称冲突时,所有对
foo
的调用都需要更新,以使用
bleh::foo
std::foo
确保您知道这是哪一个

但至少如果您有
使用名称空间std
,那么您就有一些东西可以搜索。如果你想找到所有的“.h”文件,你可能会找到你自己的.h文件,一些“ncurses.h”和类似的文件,它们不是你想要的

因此,总而言之,两者都不是好的解决方案,但

#include <cfoo>; 
using namespace std;
#包括;
使用名称空间std;

有点不那么糟糕

我很想知道“合适”到底是什么意思?主要是,它是否更具风格上的“合适”,或者是真正的技术差异,我可能真正关心?这是一个技术问题:C++“Mangle”函数名(允许同名的函数采用不同类型的参数)。所以如果你有一个
intfoo(intx,双y)实际名称可能是
\u iFoo\u iD
。C不会这样做。因此,C++编译器所包含的C样式头文件需要在<>代码> c>代码>“翻转”的任何函数下都有<代码>外部> C > {<代码> >和代码> } /代码>。如果你不这样做,你会得到一组“X.CPP”中没有发现的符号“IfoooID”。我相信,两个代码< >包括和 < < < /Cord> >都要求对C++程序正确工作。不同之处在于,
将声明放在全局名称空间中(也可以选择性地将它们放在
std::
下),而
将声明放在
std::
下(也可以选择性地将它们放在全局名称空间中)。我开始感觉到,就我的目的而言,它们实际上是相同的,我还可以使用.h标题。有趣。顺便说一句,我倾向于使用.h头的原因是因为我在为UNIX编程,并且我使用了很多在std::namespace中不存在的POSIXAPI。因此,目前我的代码在某些地方有类似std::memcpy()的内容,但在其他地方只有普通的strerror\u r()。或者在某些地方使用std::realloc(),但在其他地方只使用普通write()。我想把它统一起来,因为我不能把strerror_r()或write()之类的东西放到std::中,我想为了我所有的C API使用的统一性,我只需要所有东西的全局非std::版本。