C和C++的主要区别在于C是过程式编程语言,不支持类和对象,而C++是过程式和面向对象编程语言的结合;因此C++可以被称为混合语言。
使用VS或者g++作为编译器,.c和.cpp可以相互调用,gcc编译器不能编译.cpp中超过c语言特性的东西.
下面是使用vs作为编译器,.c和.cpp相互调用的例子.
.cpp调用.c
main.cpp
#include <iostream>
using namespace std;
extern "C" int add();
int main()
{
cout << add() << endl;
return 0;
}
add.c
int add()
{
return 3;
}
.c调用.cpp
main.c
#include <stdio.h>
int add();
int main()
{
printf("%d\n", add());
return 0;
}
add.cpp
#include <iostream>
using namespace std;
extern "C" int add()
{
cout << "add call" << endl;
return 3;
}
C | C++ |
---|---|
C 由丹尼斯·里奇 (Dennis Ritchie) 于 1969 年至 1973 年在 AT&T 贝尔实验室开发。 | C++ 由 Bjarne Stroustrup 于 1979 年与 C++ 的前身“C with Classes”一起开发。 |
与 C++ 相比,C 是 C++ 的子集。 | C++是C的超集。C++可以运行大部分C代码,而C不能运行C++代码。 |
C 支持用于代码开发的过程式编程范式。 | C++ 支持面向过程和面向对象的编程范式;因此C++也被称为混合语言。 |
C 不支持面向对象编程;因此它不支持多态、封装和继承。 | 作为一种面向对象的编程语言,C++ 支持多态、封装和继承。 |
在 C 中(因为它是一种过程编程语言),数据和函数是独立且自由的实体。 | 在C++中(当它用作面向对象的编程语言时),数据和函数以对象的形式封装在一起。为创建对象类提供了对象结构的蓝图。 |
在 C 中,数据是自由实体,可以由外部代码操作。这是因为 C 不支持信息隐藏。 | 在 C++ 中,封装隐藏数据以确保按预期使用数据结构和运算符。 |
C,作为过程式编程,它是一种函数驱动的语言。 | 而C++作为一种面向对象的编程,它是一种对象驱动的语言。 |
C 不支持函数和运算符重载。 | C++ 支持函数和运算符重载。 |
C 不允许在结构内部定义函数。 | 在 C++ 中,函数可以在结构内部使用。 |
C 没有命名空间功能。 | C++ 使用 NAMESPACE 来避免名称冲突。 命名空间是一个声明性区域,为其中的标识符(类型、函数、变量等的名称)提供范围。命名空间用于将代码组织成逻辑组并防止可能发生的名称冲突,尤其是当您的代码库包含多个库时。命名空间范围内的所有标识符彼此可见,无需限定。命名空间之外的标识符可以通过使用每个标识符的完全限定名称来访问成员。 |
C 使用函数进行输入/输出。例如 | C++ 使用对象作为输入输出。例如 |
C 不支持引用变量。 | C++ 支持引用变量。 |
C 不支持虚拟和友元函数。 | C++ 支持虚函数和友元函数。 |
C提供 | C++ 提供 |
C 不直接支持错误处理(也称为异常处理) | C++ 提供对异常处理的支持。异常用于使代码不正确的“硬”错误。 |