- 全局变量检测增强
int a;
int a=10;//C下不报错,C++会报错重定义 - 函数检测增强
函数返回值类型检测
形参类型检测
是否有返回值检测
调用的时候参数传参个数检测增强
//test.c
//1.函数增强检测 ,可以不写返回值类型
getSum(int length,int width)
{
return length*width;
}
//2.函数增强检测 ,可以不写形参类型
getSum(length,width)
{
return length*width;
}
//3.函数增强检测 ,可以不写return语句
int getSum(length,width)
{
}
//4.这样调用不报错
int main(){
getSum(10,20,30);
}
- 类型检测增强
char *p=malloc(888);//C++会报错
char *p=(char *)malloc(888);//C++应该这样写 - struct增强
C++:可以在函数内定义结构体
C++:使用时可以省去关键字struct - bool类型增强
C语言没有bool类型 - 三目运算符增强
C返回—值
C++返回—变量
//.c
int a=2,b=1;
a>b:a?b=100;//C语言下报错
printf("%d",b);
//如果想实现,可以这样做
*(a>b:&a?&b)=100;
//.cpp
int a=2,b=1;
a>b:a?b=100;
printf("%d",b);//b=100
- const增强
// test.c
const int a=100;//全局const
int main(){
int *p=&a;
*p=200;//在C语言下编译通过,但是运行时候会报错
}
// test.c
int main(){
const int a=100;//局部const
int *p=&a;
*p=200;//在C语言下成功运行,修改成功
}
//test.cpp
const int a=100;//全局const,常量区保护,即使语法通过,运行阶段也会报错
int main(){
//int *p=&a;//报错,因为a有const
int *p=(int *)&a;
*p=200;//在C++语言下编译通过,但是运行时候会报错
return 0;
}
//test.cpp
int main(){
const int a=100;//局部变量
//int *p=&a;//报错,因为a有const
int *p=(int *)&a;
*p=200;//在C++下编译和运行时都不报错,但是无法修改a的值
return 0;
}
//改不了原因是:编译器产生临时变量,改的是temp的值
int *p=(int *)&a;
//其实是int temp=a;
//p=&temp;
const修饰全局变量在C语言下默认是外部链接属性。(不加头文件,别的.c文件用extern也能使用)
在C++下是内部链接属性,想提高加extern关键字(别的.cpp文件用extern不能使用)