编译器如何判断你使用的是c语言还是c++

thefutureisour 2012-06-27 09:20:31
今天突然想到的一个问题,比如我写一个简单的程序:
struct Stduent
{
int schoolNumber;
int examResult_Math;
int examResult_English;
//int getTotalScore();

};


int main()
{
struct Stduent xiaoming;
xiaoming.schoolNumber;
return 0;
}

我们知道,c++的类也是可以用struct关键字定义的,所以这个程序会比较矛盾。如果编译器认为我写的是c语言程序,将Student判定为结构体,那么注释掉的函数将会被认为是错误的代码;而如果编译器判定我写的是c++程序,那么这个函数自然没有问题。
在我的编译器vs2010下,编译器不会对这个函数的声明报错,所以应该判断为c++程序。
有人想过这是为什么吗?
虽然这个问题很无聊。。。
...全文
439 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
thefutureisour 2012-06-27
  • 打赏
  • 举报
回复
看了大家的回复,我自己又试了一下,虽然vs2010默认情况下使用的后缀名是.cpp,但是完全可以手动输入.c文件,当后缀名改为.c以后,那个函数就不能用了,谢谢大家!
W170532934 2012-06-27
  • 打赏
  • 举报
回复
依据:文件扩展名,宏定义(__cplusplus)
善良超锅锅 2012-06-27
  • 打赏
  • 举报
回复
这个是看文件扩展名的吧
图灵狗 2012-06-27
  • 打赏
  • 举报
回复
用__cplusplus可以判别你的编译器是否使用C++来解析的,

#ifdef __cplusplus
...
#endif
liubingqian 2012-06-27
  • 打赏
  • 举报
回复
.c是C程序源文件扩展名。
.C(大写字母C)、.cpp、.cxx、.c++是C++程序源文件的扩展名。

但是,在Windows系统上是不区分文件名大小写的。所以在Windows上,一般.c是C程序,.cpp是C++程序。
ouyh12345 2012-06-27
  • 打赏
  • 举报
回复
默认靠扩展名,当然也可以在编译选项里指定
superwavelet 2012-06-27
  • 打赏
  • 举报
回复
extern c
nice_cxf 2012-06-27
  • 打赏
  • 举报
回复
vc系列一般是根据扩展名的,.c就是c,.cpp.cxx就是c++

64,281

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧