变量的定义
C语言中的变量都必须在作用域开始的位置定义!! C++中更强调语言的“实用性”,所有的变量都可以在需要使用时再定义。
#include <iostream>
using namespace std;
int main11()
{
int i = 0;
printf("ddd");
int k; // 这段代码在vc6,C语言编译情况下就会报错。就是因为这里的定义
system("pause");
return 0;
}
对C语言register的增强
register关键字 请求编译器让变量a直接放在寄存器里面,速度快
在c语言中 register修饰的变量 不能取地址,但是在c++里面做了内容:
1.register关键字的变化
register关键字请求“编译器”将局部变量存储于寄存器中,C语言中无法取得register变量地址,在C++中依然register关键字,C++编译器有自己的优化方式,不使用register也可能做优化,C++中可以取得register变量的地址。
2.C++编译器发现程序中需要取register变量的地址时,register对变量的声明变得无效。
3.早期C语言编译器不会对代码进行优化,因此register变量是一个很好的补充。
demo
#include <iostream>
int main()
{
register int a = 0;
printf("&a = %xn", &a); // c语言这里会报错
for (int i = 1; i < 1000; i++) { // 而对于这种频繁使用i的情况自动进行优化,将i放入寄存器中
printf("%dn", i);
}
system("pause");
return 0;
}
对C语言的变量检测增强
在C语言中,重复定义多个同名的全局变量是合法的;在C++中,不允许定义多个同名的全局变量。
C语言中多个同名的全局变量最终会被链接到全局数据区的同一个地址空间上。
demo
#include <stdio.h>
int g_var;
int g_var = 1;
// C语言可以编译通过
// C++直接拒绝这种二义性
int main(int argc, char *argv[])
{
printf("g_var = %dn", g_var);
return 0;
}
struct类型增强
C语言的struct定义了一组变量的集合,C编译器并不认为这是一种新的类型。










