浅谈C语言与C++语言

· · 个人记录

一、两种语言简介

C语言: C 语言是一种通用的、面向过程式的计算机程序设计语言。1972 年,为了移植与开发 UNIX 操作系统,丹尼斯·里奇在贝尔电话实验室设计开发了 C 语言。C 语言是一种广泛使用的计算机语言,它与 Java 编程语言一样普及,二者在现代软件程序员之间都得到广泛使用。当前最新的 C 语言标准为 C18,在它之前的 C 语言标准有 C17、C11...C99 等。

C++: C++ 是一种中级语言,它是由 Bjarne Stroustrup 于 1979 年在贝尔实验室开始设计开发的。C++ 进一步扩充和完善了 C 语言,是一种面向对象的程序设计语言。C++ 可运行于多种平台上,如 Windows、MAC 操作系统以及 UNIX 的各种版本。

二、区别与联系

1、区别:

C语言是不支持面向对象的,这也是它和C++的最大的区别。C是纯过程式(procedural)编程语言,而C++是既支持过程式又支持面向对象的混合编程语言。以下是C和C++的其他不同点。C++作为C的扩展,意味着它可以运行大部分C代码。但是反过来,C去运行C++的代码,就不行了。作为一种面向对象的语言,C++支持多态(polymorphism)、封装(encapsulation)和继承(inheritance),但是C不支持。 在C中,数据和函数是“自由的实体”(free entities),这意味着你可以使用外部代码来操作它们。

2、联系

对语言本身而言,C是C++的子集,那么是什么样的一个子集?从上文可以看出, C实现了C++中过程化控制及其它相关功能,而在C++中的C(我称它为“C+”),相对于原来的C还有所加强,引入了重载、内联函数、异常处理等等玩艺儿,C++更是拓展了面向对象设计的内容,如类、继承、虚函数、模板和包容器类等等。再提高一点,在C++中,数据封装、类型这些东东已不是什么新鲜事了,需要考虑的是诸如:对象粒度的选择、对象接口的设计和继承、组合与继承的使用等等问题。

三、贡献手工试毒

我们暂且来看一道题:

酷町堂大楼里有一部电梯。已知电梯上升一层耗时6秒,下降一层耗时4秒,并且停下电梯也会耗时,每次停下耗时5秒。现有一份由n个正整数组成的列表。这n个数表示电梯将会以列表中输入数字的顺序在这些数字对应的楼层停下。

输入一个电梯楼层列表,请计算出完成列表里的请求总共花费的时间。一开始电梯在0层。电梯按照列表中楼层全部完成时,不需要回到最低层。

这是我们用C++写的标准代码:

#include "stdio.h"
#include "cstdlib"
const int up=6;
const int down=4;
const int stay=5;
int n, fl[10004];
long long final_tim=0;
int yunsuan(int a1, int a0)
{
    int k=0;
    k += abs(a1-a0)*(a1>a0?up:down);
    k += stay;
    return k;
}
int main()
{
    scanf("%d", &n);
    for(int i=1; i<=n; i++)
        scanf("%d", &fl[i]);
    fl[0]=0;
    for(int i=1; i<=n; i++)
    {
        int sumi = yunsuan(fl[i], fl[i-1]);
        final_tim += sumi;
    }
    printf("%d", final_tim);
    return 0;
}

但是,这种类似C语言的写法在C语言里提交任然适用吗?

提交后,错误信息是这样的:

main.cpp:2:19: fatal error: cstdlib: No such file or directory
 #include "cstdlib"
                   ^
compilation terminated.

这是C语言里没有这个头文件。去了呢?

错误信息:

main.cpp: In function 'main':
main.cpp:17:3: error: 'for' loop initial declarations are only allowed in C99 mode
   for(int i=1; i<=n; i++)
   ^
main.cpp:17:3: note: use option -std=c99 or -std=gnu99 to compile your code
main.cpp:20:11: error: redefinition of 'i'
   for(int i=1; i<=n; i++)
           ^
main.cpp:17:11: note: previous definition of 'i' was here
   for(int i=1; i<=n; i++)
           ^
main.cpp:20:3: error: 'for' loop initial declarations are only allowed in C99 mode
   for(int i=1; i<=n; i++)
   ^
main.cpp:25:2: warning: format '%d' expects argument of type 'int', but argument 2 has type 'long long int' [-Wformat=]
  printf("%d", final_tim);
  ^

无法识别for以及printf等函数。加上cstdio呢?

main.cpp:2:18: fatal error: cstdio: No such file or directory
 #include "cstdio"
                  ^
compilation terminated.

同样,没有这个头文件。

看来,C++里的许多基础头文件在C里无法使用。

怎么修改呢?我也不知道,靠你们了qwq。

四、后记

写今天的日报,许多是贴的。但是三的尝毒过程,我是煞费苦心。勿喷,共同进步。