免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2045 | 回复: 3
打印 上一主题 下一主题

[C++] C、C++的区别与联系 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-06-24 11:11 |只看该作者 |倒序浏览
C、C++的区别与联系
aqiaoboy
一 引言
   本文旨在说明C与C++语言的一些基本区别和联系,为C程序和C++程序之间的移植做些简单清晰的帮助。
   此文一般不涉及C到C++的设计思想上的转变。
   本文主要内容来自C++编程思想一书。

二 区别
1 早联编与晚联编

     非OOP编译器通常采用早联编,编译器对特定的函数名产生调用,而连接器确定调用可执行函数的决定地址。在程序运行前,编译器已经确定了执行代码的地址。
  OOP编译器则采用晚联编,编译器只是保证这个调用函数存在,编译器在真正调用的地方插入一段特殊的二进制代码,通过使用存放在对象中的信息,这段代码在程序时才计算被调用函数的地址。   

2 C++中必须先说明函数才能够调用 ,使编译器能够检查他们的使用情况。
C中函数声明时,参数名可给也可不不给出,但定义时参数必须。
但C++中定义时参数不一定要给出。

3 C++存在引用,他允许对函数参数和返回值的地址进行更方便的处理。


4 C++存在命名空间概念,加强了对名字的控制,有效防止了名字冲突。
C对于函数使用单个名字空间,所以当连接器找一个函数名,只在一个单独的主表中寻找。在C中如果同时引用两个第三方的库,函数名可能冲突,标准C规定应该给出一个出错。但有的编译器只是寻找第一个找到的函数名,很可能造成不可预料的后果。

5 C与C++程序的速度大概在+-10%之内。

6 C++中的非成员函数必须定义返回值,没有显式返回值的声明或定义将编译出错。
但类中的构造函数又不能指定返回类型,甚至不能返回void。见C++ PRIMER
      此处需要实验证明!
C中如果不定义返回值,缺省为int类型

     7 C++ 中int fork() 等价int fork(void)
      C中不支持前者。
8 C++允许在局部程序块中使用变量前的任意位置定义变量,
C要求一律在局部程序块开始的位置定义变量。
   
9 在C中不允许直接FOR表达式中直接定义循环变量,C++是允许的。
for(int j = 0; j < 100; j++) {
    cout << "j = " << j << endl;
}
而且在标准C++中,上面的j在for循环结束后立即无效。

10 用const代替define,因为const提供类型检查

11 C++中对枚举进行严格的类型检查,如果你定义了一个枚举变量为a,在C中你可以a++,但C++中不可以。

12 C中不能用const作为数组下标,C++中可以,因为C++编译器通常把const常量放到符号表里面,不分配存储空间。

13在C++中不允许这样使用
const int bufsize
因为C++中缺省为内部连接,也就是仅本文件内可见,你必须在定义时就给它赋值,除非你显式地声明一个外部变量
extern const int bufsize;

在C中const缺省为外部连接,也就是说
const int bufsize;
在C中就等于
extern const int bufsize;

论坛徽章:
0
2 [报告]
发表于 2003-06-24 11:22 |只看该作者

C、C++的区别与联系

写出了语言方面的区别

9 在C中不允许直接FOR表达式中直接定义循环变量,C++是允许的。
for(int j = 0; j < 100; j++) {
cout << "j = " << j << endl;
}

为里的j只是在这个作用域内起作用
赋相还可以写成
[code]
void b()

{

    int x=0;
...
{
   int j=0;     //这里k也是只在这个作用域内起作用
   for(;j<10;j++)
    printf(""d" ,j);
}
}
[code]

上面那种情况是在如果只想临时使用一下某变量
而不想让这个变量长久存在于此函数时可以使用

或是在goto 后又想使用一些临时变量

但是如果这样的代码很多的话,那么可读性会很差

论坛徽章:
0
3 [报告]
发表于 2003-06-24 13:16 |只看该作者

C、C++的区别与联系

呵呵!无双老大,写错了,is [\code]

论坛徽章:
0
4 [报告]
发表于 2003-06-24 13:30 |只看该作者

C、C++的区别与联系


谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP