c到c++升级哪些语法有变化
- c语言允许重复定义多个同名的全局变量,这些多个同名的变量最终会被链接到全局数据区的同一个地址空间;但是c++不允许定义多个同名的全局变量
- register关键字请求编译器将局部变量存储于寄存器中,C语言中无法获得register变量的地址,但是c++中可以取得register变量的地址
- 函数定义与默认值
:int fun(), fun(), int fun(void), fun(void), fun(i):
(1).C语言中:
fun() //默认返回值为int型,形参为任意多个任意类型的参数的函数
int fun() //定义返回值为int型,形参为任意多个任意类型的参数的函数
int fun(void) //定义返回值为int型,无形参的函数
fun(void) //默认返回值为int型,无形参的函数
fun(i) //默认返回值为int型,默认形参为一个int型的变量i
int fun(i) //默认返回值为int型,默认形参为一个int型的变量i
(2).c++中:
fun() //语法错误,函数定义必须指明类型
int fun() //定义返回值为int型,无形参的函数
int fun(void) //定义返回值为int型,无形参的函数
fun(void) //语法错误,函数定义必须指明类型
fun(i) //语法错误,函数定义必须指明类型
int fun(i) //语法错误,参数必须指明其类型
对于同一段代码:
#include <stdio.h>
int g_v;
int g_v;
f(i)
{
printf("i = %d\n", i);
}
g()
{
return 5;
}
int main(int argc, char *argv[])
{
register int a = 0;
printf("a = %d\n", &a); //in c++, but not c
f(10);
printf("g() = %d\n", g(1, 2, 3, 4, 5));
return 0;
}
c编译结果预览:
c++编译结果预览:
总结:说明一点,c++中对类型要求极为严格,必须要指明函数返回值和变量类型