c++编译c文件,cpp文件有何不同?见文章内容,有举例

koko1998 2008-02-21 04:34:06
开发工具vs2005 做项目移植过程中出现了下面编译错误
xxx.c
C:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(25) : error C2143: 構文エラー : '{' が ':' の前にありません。
C:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(25) : error C2059: 構文エラー : ':'
C:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(25) : error C2143: 構文エラー : '{' が ':' の前にありません。

做了很多调查发现了问题所在。xxx.c文件的话,就不可以,变成.cpp文件的话就没有问题。

下面是我得简单说明程序:
main.c C++编译 ==>.c文件 [编译出错]
#include <iostream>
using namespace std;

int main( void )
{
int n;

cout << "please input an Integer.\n";
cin >> n;

return 0;
}

main.cpp C++编译 ==>.cpp文件 [编译成功]
#include <iostream>
using namespace std;

int main( void )
{
int n;

cout << "please input an Integer.\n";
cin >> n;

return 0;
}

编译OK了,不过没理解,帮忙分析一下,谢谢了。
...全文
563 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
koko1998 2008-02-21
  • 打赏
  • 举报
回复
恩,尽管工程的编译属性是c++,但是对.c文件IDE的确又默认成c编译了。
谢谢各位了。给分!
koko1998 2008-02-21
  • 打赏
  • 举报
回复
仁兄是日文版的.NET 08?

-------fetag
是 不过是05
baihacker 2008-02-21
  • 打赏
  • 举报
回复
msdn:

/Tc 选项指定 filename 为 C 源文件,即使它没有 .c 扩展名。/Tp 选项指定 filename 为 C++ 源文件,即使它没有 .cpp 或 .cxx 扩展名。选项和 filename 之间的空格是可选的。每个选项指定一个文件;若要指定其他文件,请重复此选项。

/TC 和 /TP 是 /Tc 和 /Tp 的全局变量。它们指定编译器将在命令行上命名的所有文件视为 C 源文件 (/TC) 或 C++ 源文件 (/TP),而不考虑它们在命令行上相对于选项的位置。这些全局选项可通过 /Tc 或 /Tp 在单个文件上重写。


/Tcfilename
/Tpfilename
/TC
/TP


参数
filename
C 或 C++ 源文件。

备注
默认情况下,CL 假定扩展名为 .c 的文件是 C 源文件,扩展名为 .cpp 或 .cxx 的文件是 C++ 源文件。

在 Visual Studio 开发环境中设置此编译器选项
打开此项目的“属性页”对话框。有关详细信息,请参见如何:打开项目属性页。

单击“C/C++”文件夹。

单击“高级”属性页。

修改“编译为”属性。

以编程方式设置此编译器选项
请参见 CompileAs。

示例
下列 CL 命令行指定 MAIN.c、TEST.prg 和 COLLATE.prg 都是 C 源文件。CL 将不识别 PRINT.prg。

复制代码
CL MAIN.C /TcTEST.PRG /TcCOLLATE.PRG PRINT.PRG


下列 CL 命令行指定 TEST1.c、TEST2.cxx、TEST3.huh 和 TEST4.o 作为 C++ 文件编译,TEST5.z 作为 C 文件编译。

复制代码
CL TEST1.C TEST2.CXX TEST3.HUH TEST4.O /Tc TEST5.Z /TP


请参见
参考
编译器选项
设置编译器选项

koko1998 2008-02-21
  • 打赏
  • 举报
回复
你可以强制制定对某个文件使用那种编译器,

--------akirya
怎么指定?
kaicaitaiyang 2008-02-21
  • 打赏
  • 举报
回复
顶9楼的。。
hong8292 2008-02-21
  • 打赏
  • 举报
回复
MS 的惯用伎俩,通过后缀名来识别文件类型。
vs2005的编译器cl.exe对后缀为.c的默认为c文件,而后缀为.cpp的默认为c++文件。
其实不用改变源文件后缀,编译参数添上/TP ,强制编译成C++就行了。
比如在命令行输入:
cl /EHsc /TP filename.c
独孤过儿 2008-02-21
  • 打赏
  • 举报
回复
仁兄是日文版的.NET 08?
raven_young 2008-02-21
  • 打赏
  • 举报
回复
iostream是C++ 的东西,C的库里没有
ltc_mouse 2008-02-21
  • 打赏
  • 举报
回复
理论上,用什么后缀应该没关系。不过,在IDE中,是根据文件后缀自动选择用C/C++编译器编译了~

如果用命令行,可以看到没有差别。命令g++编译是这样的,不知道VS的命令行如何,呵呵
  • 打赏
  • 举报
回复
你可以强制制定对某个文件使用那种编译器,
小猪瑞比 2008-02-21
  • 打赏
  • 举报
回复
这里错了
#include <iostream>
using namespace std;

这两句是CPP里面的,C中的头部应该是#include <stdio.h>
ouyh12345 2008-02-21
  • 打赏
  • 举报
回复
同学,c支持stl吗?
babyvox1999 2008-02-21
  • 打赏
  • 举报
回复
.c和.cpp的编译器不同
边城狂人 2008-02-21
  • 打赏
  • 举报
回复
编译器把.c文件当作C程序编译,把.cpp文件当作C++编译。
由于C和C++在语法以及编译的一些细节上有所不同,所以如果在.c里写C++就会出错了。
很明显<iostream>里面的东西都是C++的,你保存成.c编译就出错了。

64,683

社区成员

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

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