C&C++
C和C++的部分差别
1.存储类
存储类定义程序中变量/函数的范围(可见性)和生命周期。
C++比较C多了mutable和thread_local类型
mutable 说明符仅适用于类的对象,
使用 thread_local 说明符声明的变量仅可在它在其上创建的线程上访问。
注意:
从 C++ 17 开始,auto 关键字不再是 C++ 存储类说明符,且 register 关键字被弃用。
thread_local用于C++11
2.函数参数的调用
C++可以指针调用。
该方法把参数的地址赋值给形式参数。在函数内,该地址用于访问调用中要用到的实际参数。这意味着,修改形式参数会影响实际参数。
C不可以使用指针调用。
3.指针
C++比较C能够支持空指针。NULL 指针是一个定义在标准库中的值为零的常量。
4.头文件
【C】
#include <stdio.h> 引用系统头文件。它在系统目录的标准列表中搜索名为 file 的文件。
#include "xxxxx" 引用用户头文件。它在包含当前文件的目录中搜索名为 file 的文件。
【C++】
头文件 函数和描述
iostream 该文件定义了 cin、cout、cerr 和 clog 对象,分别对应于标准输入流、标准输出流、非缓冲标准错误流和缓冲标准错误流。
iomanip 该文件通过所谓的参数化的流操纵器(比如 setw 和 setprecision),来声明对执行标准化 I/O 有用的服务。
fstream 该文件为用户控制的文件处理声明服务。我们将在文件和流的相关章节讨论它的细节。
5.输入输出
【C】 【C++】
标准输入 stdin cin 键盘
标准输出 stdout cout 屏幕
标准错误 stderr cerr 您的屏幕
6.文件读写
C与C++的文件操作都属于面向对象,使用起来较为繁琐,需要记住很多函数。
对文件的操作都分为三个步骤:打开文件>操作文件>关闭文件
【C】
FILE *fopen( const char *filename, const char *mode );
//要打开的文件名,不指定路径,则在当前文件夹找
//打开的模式 读r 写w 或追加a
//返回值:打开失败返回NULL,打开成功则返回指向文件的标识符
int fputc( int c, FILE *fp );
//写入文件
int fclose( FILE *fp );
//关闭文件
【C++】
int main() {
fstream file;
file.open("filename",ios::mode); //以只写模式打开文件
char buf[] = "内容";
file.write(buf,sizeof(buf)); //写入文件末尾
file.read(buf,mode); //读文件
file.close(); //关闭文件
}
//mode
app 每次写入前寻位到流结尾
binary 以二进制模式打开
in 以读打开
out 以写打开
trunc 在打开时舍弃流的内容
ate 打开后立即寻位到流结尾
7.异常处理
C++有一个应对出现错误的机制,叫做异常处理。当程序运行发生错误时,可以抛出一个异常,异常处理程序会捕捉它并采取相应的措施。C语言并没有内置的异常机制。
8.编译器
C语言和C++语言的编译器可不同。尽管有些编译器支持两种语言,但某些特征可能仅仅由一个语言所支持。
9.名称空间
C++有一个关键字叫做namespace,用于区分相同名称的函数和变量。C语言中没有这个特性。
10.头文件
在C++中,头文件可以有任何扩展名,而在C语言中,它们必须是.h扩展名。
11.默认变量初始化
在C++中,类的成员变量默认情况下会被初始化。而在C语言中,变量的内容是未定义的,程序可能会因此出现意外错误。
总结
C++语言是C语言的扩展,它包含了所有C语言的特性,并增加了一些特有的特性。C++是一个更为现代化的语言,用于更复杂的编程环境,特别是当需要面向对象编程时,C++是首选语言。而C语言则侧重于系统编程,嵌入式编程等。