C语言调用C++函数出错

作者&投稿:盖桑 (若有异议请与网页底部的电邮联系)
c语言关于外函数的使用,一运行就出错~

是语句 scanf("%s
", a); 出的问题吧。a是int型数组不是char型数组。

,但是具体还是有些差别的。先对C中调用C++代码作个简单回顾:1、对于C++中非类的成员函数,可以简单的在函数声明前面加extern C,通常函数声明位于头文件中,当然也可以将声明和函数定义一起放在cpp中,在没有声明的情况下,直接在定义前添加extern C也可2、对于C++类的成员函数,则需要另外做一个cpp文件,将需要调用的函数进行包装。要实现C++中调用C的代码,具体操作:对于C中的函数代码,要么将C代码的头文件进行修改,在其被含入C++代码时在声明中加入extern C或者在C++代码中重新声明一下C函数,重新声明时添加上extern C头。通过以上的说明,我明白一点,那就是加extern C头一定是加在C++的代码文件中才能起作用的。下面分析一下这个现象的实质原因:C编译器编译函数时不带函数的类型信息,只包含函数符号名字,如C编译器把函数int a(float x)编译成类似_a这样的符号,C连接器只要找到了调用函数的符号,就可以连接成功,它假设参数类型信息是正确的,这是C编译连接器的缺点。而C++编译器为了实现函数重载,编译时会带上函数的类型信息,如他把上面的a函数可能编译成_a_float这样的符号为了实现重载,注意它还是没有带返回值得信息,这也是为什么C++不支持采用函数返回值来区别函数重载的原因之一,当然,函数的使用者对函数返回值的处理方式(如忽略)也是重要原因。基于以上,C调用C++,首先需要用封装函数把对C++的类等的调用封装成C函数以便C调用,于是extern "C"的作用是:让编译器知道这件事,然后以C语言的方式编译和连接封装函数(通常是把封装函数用C++编译器按C++方式编译,用了extern "C"后,编译器便依C的方式编译封装接口,当然接口函数里面的C++语法还是按C++方式编译;对于C语言部分--调用者,还是按C语言编译

哈哈,我看出来了,你是用vc编译的吧,看dos.h头文件,这是tc编译器的头文件,支持的暂停为delay()函数,如果用vc编译,那么就是用的windows环境下的32位编程,所以就应该加入windows.h这个头文件,告诉vc编译器这个名字空间,错误提示是由于你的sleep()函数中s要大写,改成大写就能编译通过了。
希望对你有所帮助。

extern "C" string rd(int a,int b)//C++函数

把 "C"去掉


C语言中函数的调用有哪些步骤?
long p=1;初始化。p *= m;初始化。long s = 0;累加。s += power(i,k);累乘计算。这类题弄清楚每个函数做什么,涉及哪些量,和函数之间的调用关系。初始化、循环计算、返回结果是最常见的3个步骤,其中第2步可以是基本运算,也可以是调用其它函数完成某个功能。

如何定义和调用c语言的函数
接下来,我们讨论如何调用C语言中的函数。函数调用是通过使用函数名并传递必要的参数来完成的。在上面的例子中,我们可以通过以下方式调用`add`函数:c int sum = add; \/\/ 调用add函数,并将返回值存储在变量sum中 这里,我们传递了两个整数参数`5`和`7`给`add`函数,并将返回的和存储在变量`sum...

函数调用在C语言中,可以用以下几种方式调用函数
在C语言中,函数调用的方式多种多样,下面分别进行介绍:1. **函数表达式调用**:当函数作为表达式的一部分时,需要函数具有返回值。例如,表达式`z=max(x,y)`,函数`max`的返回值会被赋给变量`z`,以参与运算。2. **函数语句调用**:通过在函数调用后添加分号,将其转化为函数语句。如`printf(...

C语言如何调用函数
1、打开CFree,按ctrl加N创建一个新的文件。2、然后开始调用函数。3、按F9进行调试后发现没有错误。4、按F5执行程序。5、输入想要输入的数字。6、按ENTER键输出结果,检验符合结果,说明函数调用成功。

C语言函数调用的三种方式是什么?
在C语言中,函数调用方式主要与参数的传递有关,通常有三种方式:1. **按值调用(Call by Value)**:这是C语言中最常用的函数调用方式。在这种方式中,实际参数(或称为实参)的值被复制到函数的形式参数(或称为形参)。因此,对形参的任何操作都不会影响实参。这意味着函数内部的参数和外部的...

C语言如何调用函数
C语言中,函数调用的一般形式为:函数名(实际参数表)对无参函数调用时则无实际参数表。实际参数表中的参数可以是常数、变量或其它构造类型数据及表达式。各实参之间用逗号分隔。include<stdio.h>int fun(int x, int y); \/\/ 函数声明,如果函数写在被调用处之前,可以不用声明void main(){int a=1...

c语言中怎么调用函数
1、直接调用,这种函数一般没有返回值,或者不需要返回值 如 printf("你好,可以直接调用printf函数的!")2、表达式调用,比如对于用户写的一个求最大值函数int max(int a,int b),一般有返回值 如 c=max(6,9) 也就是要用一个量来接收函数返回来的值。3、参数调用,同样对于上面的max 如...

c语言函数调用的一般形式是什么?
通过如下过程实现求出a、b两个数中的最大值:include <stdio.h> int max(int a,int b);int main(void){ int a,b,c;printf("输入两个整数:");scanf("%d%d",&a,&b);c=max(a,b);printf("较大的数是:%d\\n",c);return 0;} int max(int a,int b){ if(a>b)return a;else...

c语言怎么调用函数
01 打开Ubuntu,并在目标路径下开启一个终端。02 选定一个路径,使用touch命令创建三个文件,function.h,function.c,test.c,分别用来做函数头文件、函数源文件以及测试文件 03 这里以四则运算函数为例说明函数的编写流程与调用

c语言函数调用例子
在C语言中,可以用以下几种方式调用函数:1、函数表达式:函数作为表达式中的一项出现在表达式中,以函数返回值参与表达式的运算。这种方式要求函数是有返回值的。例如:z=max(x,y)是一个赋值表达式,把max的返回值赋予变量z。2、函数语句:函数调用的一般形式加上分号即构成函数语句。例如: printf ...

武定县15713206158: C语言调用C++函数出错 -
姜穆益君: 哈哈,我看出来了,你是用vc编译的吧,看dos.h头文件,这是tc编译器的头文件,支持的暂停为delay()函数,如果用vc编译,那么就是用的windows环境下的32位编程,所以就应该加入windows.h这个头文件,告诉vc编译器这个名字空间,错误提示是由于你的sleep()函数中s要大写,改成大写就能编译通过了. 希望对你有所帮助.

武定县15713206158: C语言调用C++函数出错 -
姜穆益君: extern "C" string rd(int a,int b)//C++函数把 "C"去掉

武定县15713206158: 一个c语言程序,在c++6.0上运行出错,求指点 -
姜穆益君: for(int j=0;j <MAX_SIZE;j++) cout<<Array[j]<<" ";......for(int j=first;j <= last;j++) cout<<Array[j]<<" "; 在vc6里编译器标准c++规范,而是微软的规范,与标准的c++有区别.vc6里,在for()里定义的变量和for的作用域是平齐的,而非之内.即for (int j=0; ...) 等同于int j; for (j=0; ...) 也就是说下面一个循环中j不用再定义一次.

武定县15713206158: 为什么在C++里面,此函数显示错误. -
姜穆益君: void sub(x,y) {int x,y; x1=x; x=y; y=x1; }试试把此函数放在main函数前

武定县15713206158: 出现错误 c语言 求解 -
姜穆益君: 引用是C++才有的语法,C语言不支持引用,所以报错.

武定县15713206158: C++函数调用的一个错误,为什么执行的时候有问题,编译没问题啊? -
姜穆益君: 你写的函数version3有问题--声明函数返回的类型为const string &,而你返回的实际是一个临时的string对象,你知道的,返回一个指向临时变量的引用是肯定错误的,因为当version3函数执行完毕,临时对象temp会在栈中被清除,所以函数会返回指向一个不存在的对象的引用,因此是错误的.解决办法:修改version3的定义const string & version3( string &s1,const string &s2){s1=s2+s1+s2;return s1;}这样就OK了.

武定县15713206158: C\C++函数调用问题 -
姜穆益君:2. 让后边的代码知道函数类型(调用方式,参数表类型,写一行 int Ab(void); 这样正在这里编译器就知道后面会有这个函数,编译器等到连接时,在Aa之前.解决办法是提前声明,但调用外部非C语言编写的程序库,C和C++编译器智能不够...

武定县15713206158: 在vc++里输入c语言空函数,为什么编译没错,连接出错? -
姜穆益君: 你新建工程时,你如果选择Win32 Application(Windows程序),那么在程序中入口函数就必须是WinMain() 如果你是选择Win32 Console Application(控制台程序,也就是DOS程序,不能使用图形函数),那么在程序中入口函数为main()

武定县15713206158: 刚开始上c++,按着老师给的函数打却报错了?为什么不兼容? -
姜穆益君: 你说的是写程序的软件?那我说一说我用过的版本:1turboc2.0:当年学习C语言时在机房只让用这个软件,全英文版本,操作很……反正那一学期过后我就再也没用过,不太明白当时老师为什么一定要让学生用这个软件(一代代传下来的?)...

武定县15713206158: 为什么在VC++6.0下用C语言调用引用参数如:void Creat(SqList &L)总是提示&出错? -
姜穆益君: 你好:C 语言环境不提供这样的引用参数方式,只有 C++ 环境才有.修改方法其实很简单:第一步将参数中的 &L 变为 *L(赋地址调用方式),即 void Creat(Sqlist *L); 第二步将函数体内部的所有 L 变为 *L(L 为地址值,*L 取对应内存单元的内容).第三步将主调函数调用部分的变量加入取地址符 &,如 main() 函数体中的 Creat(&L); 引用函数的实质是赋地址调用,将其用赋地址调用的方法实现即可解决问题.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网