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

C++11兼容C语言的标准库头文件,允许直接使用如<stdio.h>,也可通过<cstdio>引入。两种方式在全局作用域下都能访问C标准库,但<cstdio>将定义置于std命名空间。使用<cfilename>可以避免命名冲突,适应新C++特性,并可能成为未来趋势。旧的<hfilename>仍可用,但不推荐,主要为兼容性和老编译器考虑。
摘要由CSDN通过智能技术生成

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

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

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

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

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

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

#include <stdio.h>

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

$ g++ -o test test.cpp
$ ./test
Hello world!
#include <cstdio>
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)将来可能会消失。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜流冰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值