l108103t
Cirfe
2015-04-26 03:56
采纳率: 35.1%
浏览 1.8k

c与c++中函数使用的区别

我在a.c中这样写

void msg()
{
    printf("Hello\n");
}

然后在main.c中直接调用msg函数,不用加什么extern声明之类的,也不用包含a.c,直接像这样调用

 int main()
{
    msg();
    return 0;
}

不会出现问题,但是我把a.c 和main.c分别改为a.cpp和main.cpp之后,编译就会提示错误。请问这是什么原因??

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

7条回答 默认 最新

  • zzkjliu
    zzkjliu 2015-04-26 04:36
    已采纳

    在很大程度上,标准C++是标准C的超集.实际上,所有C程序也是C++程序,然而,两者之间有少量区别.下面简要介绍一下最重要的区别.
    1、 在C++中,民,局部变量可以在一个程序块内在任何地方声明,在C中,局部变量必须在程序块的开始部分,即在所有"操作"语句之前声明,请注意,C99标准中取消了这种限制.
    2、在C中,按如下方式声明的函数没有对函数参数进行任何说明;
    int func();
    也就是说,如果没有在函数后面的括孤内指定任何参数,这在C中就意味着对函数参数未做任何声明,该函数可能有参数,也可能没有参数,然而,在C++中,这样的函数声明意味着该函数没有参数,也就是说,在C++中,下面这两个函数声明具有同样的作用:
    int func();
    int func(void);

    在C++中,参数列表中的void是任选的.许多C++程序员使用它们是为了表明函数没有任何参数的,以便于他人理解程序.但是,从技术上说,void不是必须的.
    

    ** 3、 在C++中,所有函数均必须被设计成原型,但这在C中只是一种选择.编程经验表明,在程序中也应该给函数采用原型设计方法.在C与C++之间还存在一个重要而又细微的差别,即字符常数在C中被自动作为整形来处理,但在C++中则不然.**
    4、在C中,多次声明一个全局变量虽然不可取,但不算错.在C++中,多次声明同一个全局变量会引发错误.
    5、在C中,一个标识符可以至少31个有效的组成字符.在C++中,一个标识符的所有组成字符均是有效的.可是,从实用角度看,过长的标识符没有太大的用处,不仅不便于记忆,而且还会增加出现打字错误的可能性.
    6、在C中,在程序内部调用main()函数的情形不常见,但这种做法是容许的,在C++中,这种做法是不容许的.
    7、在C中,无法获得register型的地址,在C++中则可以获得这种地址.
    8、在C中,如果类型声明语句中没有指定类型名,该类型被假定成int,这种隐式转型在C99与C++中是不允许的.。

    点赞 评论
  • caozhy

    这属于未定义行为。取决于哪个源代码先编译。C编译器不像C++编译器那么严格。
    都需要先定义后使用

    点赞 评论
  • oyljerry
    oyljerry 2015-04-26 04:30

    具体要看你的编译选项,参数等。然后就是c,cpp对于函数link时查找方式。

    点赞 评论
  • lx624909677
    lx624909677 2015-04-26 04:31

    编译错误有很多,C++的要把函数的声明写在.h文件里,实现写在.cpp里

    点赞 评论
  • weikang_19931102
    weikang_19931102 2015-04-26 08:39

    不会吧 应该说C++兼容C的啊

    点赞 评论
  • LZW_qianzui
    浅醉_linzw 2015-04-27 06:30

    我试了编译没问题啊,首先cpp是c++文件,c++和c语言的头文件是不一样的,还有,当你在cpp中用到输出流的时候需要using namespace std;的名称空间说明,我用的是VC++6,.0进行编译的,用的是你的例子,编译都能通过,输出结果也一样。不过,c语言和c++也是有比较大的区别的,我是c++和c语言的爱好者,欢迎一起交流。

    点赞 评论
  • sepNINE
    sepNINE 2015-04-28 15:36

    要c++写c的程序,前面最好加个#include。

    点赞 评论

相关推荐