//区别①:实用性增强 #include<iostream> using namespace std; //C语言中的变量都必须在作用域开始的位置定义!! //C++中更强调语言的“实用性”,所有的变量都可以在需要使用时再定义。 void main(){ int a = 1; printf("ddddd"); int kk;//这样定义KK,C语言会在在VC6.0中会报错,在vs2013不会;但是c++却支持这种定义 system("pause"); }
//区别②:register关键字增强(C++版本) #include<iostream> using namespace std; //register关键字 请求编译器让变量a直接放在寄存器里面,速度快 //在c语言中 register修饰的变量 不能取地址,但是在c++里面做了内容 //register关键字的变化 //register关键字请求“编译器”将局部变量存储于寄存器中 //C语言中无法取得register变量地址 //在C++中依然支持register关键字 //C++编译器有自己的优化方式,不使用register也可能做优化 //C++中可以取得register变量的地址 //C++编译器发现程序中需要取register变量的地址时,register对变量的声明变得无效。 //早期C语言编译器不会对代码进行优化,因此register变量是一个很好的补充。 void main(){ //在c++中,如果一个变量多次出现或者经常使用,c++编译器会自动对这个变量使用register做优化 //这里的i,c++编译器就会自动对i用register优化 //register int i = 0; int i = 0; for (i = 0; i < 3; i++) { ; } printf("register修饰变量的地址是%x\n", &i); //C++编译器发现程序中需要取register变量的地址时,register对变量的声明变得无效。 //此时c++编译器会对i变量做处理,使得register对变量i的声明变得无效 system("pause"); }
//区别②:register关键字增强(C语言版本) #include<stdio.h> #include<stdlib.h> #include<string.h> void main(){ register int i = 0; for (i = 0; i < 3; i++) { ; } printf("register修饰变量的地址是%x\n",&i);// 打印 error C2103 : 寄存器变量上的“&” //register关键字请求“编译器”将局部变量存储于寄存器中,寄存器上当然取不到内存的地址 //所以C语言中无法取得register变量地址 system("pause"); }
//区别③:全局变量检测增强(C++版本) #include<iostream> using namespace std; //在C++中,不允许定义多个同名的全局变量 //C++直接拒绝这种二义性的做法。 int g_var; int g_var; int g_var = 1; void main(){ system("pause"); }
//区别③:全局变量检测增强(C语言版本) #include<stdio.h> #include<stdlib.h> #include<string.h> //在C语言中,重复定义多个同名的全局变量是合法的 //C语言中多个同名的全局变量最终会被链接到全局数据区的同一个地址空间上 int g_var; int g_var; int g_var=1; void main(){ system("pause"); }
时间: 2024-10-25 08:45:18