一、实用性”增强
1.C语言中的变量都必须在作用域开始的位置定义!!
2.C++中更强调语言的“实用性”,所有的变量都可以在需要使用时再定义。
比如:如下代码.
int main()
{
int i = 0;
printf("ddd");
int k;
system("pause");
return 0;
}
二、register关键字增强
1.register关键字的变化:register关键字请求“编译器”将局部变量存储于寄存器中,C语言中无法取得register变量地址,在C++中依然支持register关键字
C++编译器有自己的优化方式,不使用register也可能做优化,C++中可以取得register变量的地址。
2.C++编译器发现程序中需要取register变量的地址时,register对变量的声明变得无效。
3.早期C语言编译器不会对代码进行优化,因此register变量是一个很好的补充。
int main22()
{
register int a = 0;
printf("&a = %x\n", &a);
system("pause");
return 0;
}
三、函数检测增强
在C语言中,重复定义多个同名的全局变量是合法的,在C++中,不允许定义多个同名的全局变量。C语言中多个同名的全局变量最终会被链接到全局数据区的同一个地址空间上。
int g_var;
int g_var = 1;
C++直接拒绝这种二义性的做法。
四、struct类型加强
C语言的struct定义了一组变量的集合,C编译器并不认为这是一种新的类型,C++中的struct是一个新类型的定义声明。
struct Student
{
char name[100];
int age;
};
int main(int argc, char *argv[])
{
Student s1 = {"wang", 1};
Student s2 = {"wang2", 2};
return 0;
}
五、C++中所有的变量和函数都必须有类型
C++中所有的变量和函数都必须有类型,C语言中的默认类型在C++中是不合法的。
函数f的返回值是什么类型,参数又是什么类型?函数g可以接受多少个参数?
f(i)
{
printf("i = %d\n", i);
}
g()
{
return 5;
}
int main(int argc, char *argv[])
{
f(10);
printf("g() = %d\n", g(1, 2, 3, 4, 5));
getchar();
return 0;
}
在C语言中,int f( );表示返回值为int,接受任意参数;
int f(void):表示返回值为int的无参函数
在C++中int f( );和int f(void)具有相同的意义,都表示返回值为int的无参函数
C++更加强调类型,任意的程序元素都必须显示指明类型