由于C++对C的兼容性,在如今的IDE中,已经很少有IDE工具提供专门的C文件创建了。大多数的C文件都是直接通过创建C++即创建的后缀名为“XXX.cpp”的文件。如:
VCVisualC++ 6.0(大多数初学者使用的编译器):
DEVC++:
Visual Studio 2015:
由于C++对的C的几乎完美的兼容性,在一些情况下C代码是可以在cpp文件中正常的运行的,编译器并不报错。但是对于一些特殊符号(如:&)由于C与C++中的定义有所不同(下面阐述),在运用方面是具有差异的。如:
未命名.cpp
#include<stdio.h>
int Demo(int &l)
{
return;
}
intmain()
{
int x=10;
int y;
y=Demo(x);
return 0;
}
Dev c++:
编译结果:
--------
- 错误: 0
- 警告: 0
- 输出文件名: xxxxxxxxxxxxxxxxx
- 输出大小: 127.7529296875 KiB
- 编译时间: 1.48s
如上:在cpp文件中编译是运行的是C++编译器所以编译正常并不报错。
但是如果对文件名做如下更改:
文件名后缀改为.c文件,即 未命名.c
编译结果:
[Error]expected ';', ',' or ')' before '&' token
报错信息为:'&'标记之前应该为 ';',','或')'。
如上:在c文件中编译是运行的是C编译器所以编译报错。
通过刚刚上面的简单尝试我们很容易的发现问题的缩在: 在C与C++对 &的不同定义造成了以上结果。同时也是对C与C++文件名区别认识不够导致的错误。
下面分析一下在C与C++中&的各自定义:
C:有三大作用:取地址符,位操作中的与操作运算符, 当两个&&一起用的时候,表示为逻辑运算中的与运算。
首先
取地址符: 用于取得一个变量的地址。常赋值给指针。 如
int i, *p;
p = &i;//这里的&作用是取变量i的地址。
。
位操作中的与操作运算符:也就是常说的and操作,双目运算符。 计算的时候按位计算,&两边操作数对应位上全为1时,结果的该位值为1。否则该位值为0
比如
0x12&0x23 转为二进制为:
B00010010&B00100011,
按位计算结果为B00000010,即结果为0x02。
C++:
首先明确一点C中的&符号的作用在C++中都是一样的。但是在C++中增加一个新的作用:引用。
在上面的代码中第一个代码文件即未命名.cpp,编译时连接的是C++编译器,所以这里是利用了C++的新特性:引用,编译才成功执行。具体引用的各种注意事项可以认真阅读该博主的文章:http://www.cnblogs.com/Mr-xu/archive/2012/08/07/2626973.html。然而在标准C文件中“&”并不存在引用的这个特性。导致连接C编译器编译时报错。
以上,我觉得在进行多种语言的学习过程中区分与认识各个语言的特性与相同点是非常重要的。
这些都是我个人的见解,有任何问题希望各位大神指正!