C语言与C++的区别

关注我们 做新生代程序员!
1、前言
在很大程度上,C++是C的超集,这意味着一个有效的C程序也是一个有效的C++程序 。
C和C++的主要区别是:C++支持许多附加特性 。但是,C++中有许多规则与C稍有不同 。这些不同使得C程序作为C++程序编译时可能以不同的方式运行或根本不能运行 。如果把C代码作为C++程序编译的话,会导致产生错误的消息 。
C99标准的发布使得问题更加复杂,因为有些情况下使得C更接近C++ 。
例如,新增了变长数组和关键字restrict 。C11缩小了与C++的差异 。
我们要了解C90、C99、C11之间的区别,还要了解C++11与这些标准之间的区别,以及每个标准与C标准之间的区别 。当然,C++也正在发展,因此,C和C++的异同也在不断变化 。
2、函数原型
在C++中,函数原型必不可少,但是在C中是可选的 。这一区别在声明一个函数时让函数名后面的圆括号为空,就可以看出来 。
在C中,空圆括号说明这是前置原型,但是在C++中则说明该函数没有参数 。
也就是说,在C++中,intslice;和int slice(void);相同 。例如,下面旧风格的代码在C中可以接受,但是在C++中会产生错误:
int slice;int main{...slice(20, 50);...}int slice(int a, int b){...}
在C中,编译器假定用户使用旧风格声明函数 。在C++中,编译器假定slice与slice(void)相同,且未声明slice(int,int)函数 。
另外,C++允许用户声明多个同名函数,只要它们的参数列表不同即可 。
3、char常量
C把char常量视为int类型,而C++将其视为char类型 。例如,考虑下面的语句:
char ch = 'A';
在C中,常量'A'被储存在int大小的内存块中,更精确地说,字符编码被储存为一个int类型的值 。相同的数值也储存在变量ch中,但是在ch中该值只占内存的1字节 。
在C++中,'A'和ch都占用1字节 。它们的区别不会影响本书中的示例 。但是,有些C程序利用Char常量被视为int类型这一特性,用字符来表示整数值 。例如,如果一个系统中的int是4字节,就可以这样编写C代码:
【C语言与C++的区别】int x = 'ABCD'; /*对于int是4字节的系统,该语句出现在C程序中没问题,但是出现在C++程序中会出错 */
'ABCD'表示一个4字节的int类型值,其中第1个字节储存A的字符编码,第2个字节储存B的字符编码,以此类推 。注意,'ABCD'和"ABCD"不同 。前者只是书写int类型值的一种方式,而后者是一个字符串,它对应一个5字节内存块的地址 。考虑下面的代码:
int x = 'ABCD';char c = 'ABCD';printf("%d %d %c %c\n", x, 'ABCD', c, 'ABCD');
在我们的系统中,得到的输出如下:
可以这样使用的原因是C提供了一种方法可单独设置int类型中的每个字节,因为每个字符都对应一个字节 。但是,由于要依赖特定的字符编码,所以更好的方法是使用十六进制的整型常量,因为每两位十六进制数对应一个字节 。第15章详细介绍过相关内容(C的早期版本不提供十六进制记法,这也许是多字符常量技术首先得到发展的原因) 。
4、const限定符
在C中,全局的const具有外部链接,但是在C++中,具有内部链接 。也就是说,下面C++的声明:
const double PI = 3.14159;
相当于下面C中的声明:
static const double PI = 3.14159;
假设这两条声明都在所有函数的外部 。C++规则的意图是为了在头文件更加方便地使用const 。如果const变量是内部链接,每个包含该头文件的文件都会获得一份const变量的备份 。如果const变量是外部链接,就必须在一个文件中进行定义式声明,然后在其他文件中使用关键字extern进行引用式声明 。


以上关于本文的内容,仅作参考!温馨提示:如遇专业性较强的问题(如:疾病、健康、理财等),还请咨询专业人士给予相关指导!

「辽宁龙网」www.liaoninglong.com小编还为您精选了以下内容,希望对您有所帮助: