C++实操 - 使用C标准库的头文件

在C++11标准中,对如何兼容使用C语言的标准库头文件进行了说明:

C++实操 - 使用C标准库的头文件_第1张图片

就是你在C++程序里使用C语言的头文件,在使用C++编译器进行编译时,是OK的。

这时因为C++里面也存放了上面列的26个C语言标准库头文件,可以直接使用,同时这些头文件定义的东西都是在全局作用域里的。

另外一种C++下使用C头文件的的方式,是#include 形式,比如#include

这种方式和上面的作用是一样的,都在全局作用域下可以使用C标准库头文件里定义的东西。

但同时,这种方式将这些头文件的定义也放在std作用域里。

#include 

int main()
{
  printf("Hello world!\n");
  return 0;
}

$ g++ -o test test.cpp
$ ./test
Hello world!
#include 
int main()
{
  printf("Hello world!\n");
  std::printf("Hello world!\n");
  return 0;
}


$ g++ -o test test.cpp
$ ./test
Hello world!
Hello world!

总结:

只在C++标准中有的头文件,不使用filename.h。因为从第一个C++标准开始(1998年),就是用的是filename作为头文件。

比如,在ubuntu中发现的头文件:

$ ls /usr/include/c++/9/iostream  -l

-rw-r--r-- 1 root root 2695 8月   8  2020 /usr/include/c++/9/iostream

那些从C标准继承过来的头文件,从filename.h变成了cfilename,并且filename.h头文件已经被不建议使用,但仍然是C++标准的一部分。

stddef.h和cstddef,前面的符号(不包括宏)是在全局命名空间,后面的是在std命名空间里。

所以引用的话有不同:

::size_t  in stddef.h

std::size_t  in cstddef

这两种都是C++标准所支持的,但第一种已经被淘汰。

为什么要使用`filename.h`?

 - 与C语言编译器的兼容性

 - 与非常老的C++编译器兼容

为什么要使用`cfilename`?

 - 名称都在std::的命名空间内。没有名字冲突了。

 - 新的C++特性(例如float, long的重载数学函数)

 - C兼容头文件(filename.h)将来可能会消失。

 

你可能感兴趣的:(编程,c++,c语言)