C与C++的差异


1. sizeof

在C里,字符常量和枚举符的大小都是sizeof(int);而在C++里,sizeof('a')等于sizeof(char),且C++实现可以自己为枚举选择最合适的大小。

在C++里,在内层作用域里声明的结构名将屏蔽位于外层作用域的对象、函数、枚举或者类型的名字。例如:
#ifdef__cplusplus
extern“C”{
#endif

intx[99];

intmain()
{
structx{inta;};
sizeof(x);/*在C中是数组x的大小(99*sizeof(int)),在C++中是结构x的大小*/
}

#ifdef__cplusplus
}
#endif
2. 函数声明

在C里,大部分函数可以在没有预先声明的情况下调用。例如:
#ifdef__cplusplus
extern"C"{
#endif

main()
{
doublesq2=sqrt(2);
printf(“Thesquarerootof
2is%g"n”,sq2);
}

#ifdef__cplusplus
}
#endif
在C里,对于那些声明中没有描述参数类型的函数,它们就可以取任意个数的任意类型的参数:
voidf();/*未提到参数类型*/

voidg()
{
f(
2);
}


在C语言里,函数定义可以采用另一种语法,在参数表之后另外描述参数的类型:
voidf(a,p,c)
char*p;
charc;
{
return;
}

3. 数据类型

在C和C++标准以前的版本中,类型描述符默认为int,在上一个函数f中,a的类型就默认为int型的。
consta=7;/*在C中假定a的类型为int*/

C允许将struct定义用在返回值类型和参数类型声明中。例如:
structS{intx,y;}f();
voidg(structS{intx,y;}y);

在C里可用将整数赋给枚举类型的变量:
enumDirection{up,down};
enumDirectiond=1;

在C里,一个全局数据对象可以在同一个编译单位里声明多次,不必使用extern声明符,条件是在这些声明中至多只有一个提供了初始化表达式,在这种情况下就认为对象只定义了一次。在C++中,每个实体必须定义恰好一次:
inti;
inti;
inti;
inti=0;
inti;/*这在C里是允许的*/

在C里,void* 可以作为对任意指针类型的变量赋值操作右边的运算对象,或用于对这种变量的初始化。
voidf(intn)
{
int*p=malloc(n*sizeof(int));
}


在C里,嵌套结构的名字与它们嵌套于其中的结构放在同一作用域里。例如:
structS
{
structT{/**/};
/**/
}

structTx;

在C里,数组可以用于多于它所需元素个数的初始式进行初始化。例如:

长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn