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

问题描述

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

我在a.c中这样写

void msg()
{
    printf("Hellon");
}

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

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

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

解决方案

在很大程度上,标准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++中是不允许的.。

解决方案二:

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

解决方案三:

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

解决方案四:

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

解决方案五:

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

解决方案六:

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

解决方案七:

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

时间: 2024-12-30 23:33:18

c与c++中函数使用的区别的相关文章

浅析javascript中函数声明和函数表达式的区别

这篇文章主要介绍了浅析javascript中函数声明和函数表达式的区别,需要的朋友可以参考下     javascript中声明函数的方法有两种:函数声明式和函数表达式. 区别如下: 1).以函数声明的方法定义的函数,函数名是必须的,而函数表达式的函数名是可选的. 2).以函数声明的方法定义的函数,函数可以在函数声明之前调用,而函数表达式的函数只能在声明之后调用. 3).以函数声明的方法定义的函数并不是真正的声明,它们仅仅可以出现在全局中,或者嵌套在其他的函数中,但是它们不能出现在循环,条件或者

C++中Cbitmap,HBitmap,Bitmap区别及联系

  这篇文章主要介绍了C++中Cbitmap,HBitmap,Bitmap区别及联系的相关资料,需要的朋友可以参考下 加载一位图,可以使用LoadImage: HANDLE LoadImage(HINSTANCE hinst,LPCTSTR lpszName,UINT uType,int cxDesired,int CyDesired,UINT fuLoad); LoadImage可以用来加载位图,图标和光标 加载时可以规定加载图的映射到内存的大小: cxDesired:指定图标或光标的宽度,以

openvswitch中datapath和bridge区别

问题描述 openvswitch中datapath和bridge区别 openvswitch中datapath和bridge有什么区别?看openvswitch代码用什么软件比较方便,比如可以查看函数的定义 解决方案 openvswitch.Bridge.Datapathopenvswitch有port和bridge

SQL点滴31—SQL语句中@@IDENTITY和@@ROWCOUNT区别

原文:SQL点滴31-SQL语句中@@IDENTITY和@@ROWCOUNT区别  SQL语句中@@IDENTITY和@@ROWCOUNT区别 在一条 INSERT.SELECT INTO 或大容量复制语句完成后,@@IDENTITY 中包含语句生成的最后一个标识值. 如果语句未影响任何包含标识列的表,则 @@IDENTITY 返回 NULL. 如果插入了多个行,生成了多个标识值,则 @@IDENTITY 将返回最后生成的标识值. 如果语句触发了一个或多个触发器,该触发器又执行了生成标识值的插入

c++-C++类中函数+const是什么意思,

问题描述 C++类中函数+const是什么意思, class twopoint{ protected: double x,y; public: twopoint(double i,double j):x(i),y(j){ } void setX(double NewX) { x=NewX; } void setY(double NewY){ y=NewY; } double getX()const{return x;} double getY()const{return y;} }; 最后两行的

python的方法 是什么?与函数有什么区别?

问题描述 python的方法 是什么?与函数有什么区别? 最近在使用headfirstpython一书,书中一个语法也没讲,刚刚学了c语言,所以我不是很清楚方法和函数的区别 解决方案 主要是在面向对象的思想中,有差别: 函数function -- A series of statements which returns some value to a caller. It can also be passed zero or more arguments which may be used in

非递归二叉树遍历-c语言中函数指针作为参数与函数的嵌套

问题描述 c语言中函数指针作为参数与函数的嵌套 函数指针作为另一函数的参数和函数的嵌套的区别,感觉都是调用,有什么不一样呢?他们都适用在什么情况下!(我是在学非递归遍历二叉树时看到的) Status Visit(TElemType e){ printf("%cn",e); return OK; } Status InOrderTraverse(BiTree T ,Status(*Visit)(TElemType e)){ SqStack S; InitStack(S); Push(S,

解析static在C和C++中的用法以及区别_C 语言

static主要有三个作用:(1)局部静态变量(2)外部静态变量/函数(3)静态数据成员/成员函数 前两种C和C++都有,第三种仅在C++中有,下面分别作以下介绍: 一.局部静态变量在C/C++中, 局部变量按照存储形式可分为三种auto, static, register.其中register不常用到,下面主要说说auto和static的区别. 1. 存储空间分配和生存周期不同auto类型局部变量就是普通的局部变量(不加修饰的局部变量默认为该类型).该类型局部变量存储在栈上,在动态存储区,生命

请求帮忙,非常感谢关于 C语言中函数的!

问题描述 请求帮忙,非常感谢关于 C语言中函数的! #include int M,N; void pr(int w[M][N]) { printf("%d",w[M][N]); } void main() { int a[3][3]; int i,j; for(i=0;i<3;i++) for(j=0;j<3;j++) { printf("a[%d][%d]=",i,j); scanf("%d",&a[i][j]); pr(a