C与C++的关系

  • C++继承了所有的C特性
  • C++在C的基础上提供了更多的语法和特性
  • C++的设计目标是运行效率与开发效率的统一

以C语言为基础,+面对对象支持,+类型加强、函数加强、异常处理等等 = C + +

C到C++的升级

变量定义

  • C++更强调语言的实用性
  • 所有变量都可以在需要使用时在定义,对比C语言中的所有变量必须在作用域开始的位置定义

register关键字

  • register关键字请求编译器将局部变量存储在寄存器中,在C++中依然支持register关键字,但是在C++编译器有自己的优化方式,C语言中无法获取register变量的地址,C++中可以取得register变量的地址
  • C++编译器发现程序中需要取register变量的地址时,register对变量的声明变得无效
  • 在早期C语言编译器不会对代码进行优化,因此register变量是一个很好的补充

全局变量的定义

  • 在C语言中,重复定义多个同名的全局变量是合法的。C语言中多个同名的全局变量最终会被链接到同一个地址空间上
  • 在C++中,不允许定义多个同名的全局变量

struct关键词的加强

  • C语言中的struct定义了一组变量的集合
  • C语言中的struct定义的标识符并不是一种新的类型
  • C++中的struct用于定义一个全新的类型

C语言中的struct

struct _tag_student//这只是定义一个标签,并不是一个全新的类型
{
    const char* name;
    int age;
} ;
typedef struct _tag_student Student;//C语言只是利用typedef把一个标签变成一个类型,
                            //只是当做一个类型来用,而C语言并不认为Student是一个类型

C++中的struct

struct Student//直接就是一个全新的类型
{
    const char* name;
    int age;
};

int f()与int f(void)的区别

类型

  • C++中所有的标识符都必须显示的声明类型
  • C语言中的默认类型在C++中是不合法的
f(i)
{
    printf("i = %d\n",i);
}

g()
{
    return 5;
}
//函数f的返回值和参数分别是什么类型?函数在没有给出返回值时,默认类型为int
//函数g可以接受多少个参数?任意多的参数

思考题:int f() 与 int f(void)有什么区别? 解答:他们有没有区别看什么编译器

  • 如果是C语言编译器,那么$f()$就是接受任意多的参数,并且返回值是int类型的函数,$f(void)$是不接收参数并且返回值是int类型的函数
  • 如果是C++编译器,那它们两个就没什么区别

在C语言中

  • int f() 表示返回值为int类型,接受任意参数的函数
  • f(void)表示返回值为int的无参函数

在C++中

  • int f() 和 int f(void)具有相同的意义,表示返回值为int的无参函数

小结

  • C++更强调实用性,可以在任意地方声明变量
  • C++中的register只是一个兼容的作用,C++兼容C语言只是为了兼容C语言,因为C++有自己的优化方式,他不需要register这个关键字来指示优化
  • C++编译器能够更好的进行优化
  • C++中任意的标识符都必须显示的指明类型