
正文
c语言怎么调用新函数 c语言中怎样调用函数
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
c语言如何实现函数的调用
如何调用C语言写的库,如a.lib等,有对应的库头文件a.h。假设a.h中定义了函数:
int WhyCoding(int a, float b);
做法是,
/* cpp_a.h */
extern "C" {
#include "a.h"
}
或
/* cpp_a.h */
extern "C" {
int WhyCoding(int a, float b); /* 重定义所有的C函数 */
}
从上面可以看出,extern "C" 是用在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语言编译;分别对C++接口部分和C部分编译后,再连接就可以实现C
调用C++了).
相反,C++调用C函数,extern "C" 的作用是:让C++连接器找调用函数的符号时采用C的方式,即使用_a而不是
_a_float来找调用函数。
相关问答
Q1: C语言一个函数怎么调用另一个函数的变量?
不能的说,除非这个函数中引用另一个函数,否则函数内的变量只对自身有效,函数对外的接口是他的返回值
Q2: 单片机 C语言,如何调用外部自定义函数。
函数定义好以后,要被其它函数调用了才能被执行。C
语言的函数是能相互调用的,
但在调用函数前,必须对函数的类型进行说明,就算是标准库函数也不例外。标准库函数的
说明会被按功能分别写在不一样的头文件中,使用时只要在文件最前面用#include
预处理语
句引入相应的头文件。如前面一直有使用的
printf
函数说明就是放在文件名为
stdio.h
的
头文件中。调用就是指一个函数体中引用另一个已定义的函数来实现所需要的功能,这个时候函
数体称为主调用函数,函数体中所引用的函数称为被调用函数。一个函数体中能调用数个
其它的函数,这些被调用的函数同样也能调用其它函数,也能嵌套调用。笔者本人认为
主函数只是相对于被调用函数而言。在
c51
语言中有一个函数是不能被其它函数所调用的,
它就是
main
主函数。调用函数的一般形式如下:
函数名
(实际参数表)
“函数名”就是指被调用的函数。实际参数表能为零或多个参数,多个参数时要用逗
号隔开,每个参数的类型、位置应与函数定义时所的形式参数一一对应,它的作用就是把参
数传到被调用函数中的形式参数,如果类型不对应就会产生一些错误。调用的函数是无参函
数时不写参数,但不能省后面的括号。
在以前的一些例子我们也能看不一样的调用方式:
1.函数语句
如
printf
("Hello
World!n");
这是在
我们的第一个程序中出现的,它以
"Hello
World!n"为参数调用
printf
这个库函数。在这里函数调用被看作了一条语句。
2.函数参数
“函数参数”这种方式是指被调用函数的返回值当作另一个被调用函数的实际参
数,如
temp=StrToInt(CharB(16));CharB
的返回值作为
StrToInt
函数的实际参数传递。
3.函数表达式
而在上一篇的例子中有
temp
=
Count();这样一句,这个时候函数的调用作为一个运算
对象出现在表达式中,能称为函数表达式。例子中
Count()返回一个
int
类型的返回
值直接赋值给
temp。注意的是这种调用方式要求被调用的函数能返回一个同类型的值,
不然会出现不可预料的错误。
前面说到调用函数前要对被调用的函数进行说明。标准库函数只要用#include
引入已
写好说明的头文件,在程序就能直接调用函数了。如调用的是自定义的函数则要用如下形
式编写函数类型说明
类型标识符
函数的名称(形式参数表);
这样的说明方式是用在被调函数定义和主调函数是在同一文件中。你也能把这些写到
文件名.h
的文件中用#include
"文件名.h"引入。如果被调函数的定义和主调函数不是在同
一文件中的,则要用如下的方式进行说明,说明被调函数的定义在同一项目的不一样文件之上,
其实库函数的头文件也是如此说明库函数的,如果说明的函数也能称为外部函数。
extern
类型标识符
函数的名称(形式参数表);
函数的定义和说明是完全不一样的,在编译的角度上看函数的定义是把函数编译存放在
ROM
的某一段地址上,而函数说明是告诉编译器要在程序中使用那些函数并确定函数的地
址。如果在同一文件中被调函数的定义在主调函数之前,这个时候能不用说明函数类型。也就
是说在
main
函数之前定义的函数,在程序中就能不用写函数类型说明了。能在一个函
数体调用另一个函数(嵌套调用),但不允许在一个函数定义中定义另一个函数。还要注意
的是函数定义和说明中的“类型、形参表、名称”等都要相一致。
Q3: C语言中,程序调用函数是怎么实现的?
当程序编译后link,讲函数地址保存在段寄存器中,代码段内,当某处调用此函数时(汇编代码CALL),将此地址压入栈中,并且根据指令地址寄存器(程序计数器内)中保存的值计算到该函数地址的偏移量,随后通过__cdecl等调用方式将参数和局部变量压入栈中。具体的过程比较复杂,具体应该参照PE结构等。比较深入,我也只是粗略了解
可以参考计算机组成与设计一书
Q4: c语言中应该怎样调用函数
1、参数调用 如printf("%d",max(ac语言怎么调用新函数,b));
2、表达式调用 c=max(ac语言怎么调用新函数,b)
Q5: c语言 如何调用另一函数变量
局部变量是不能在函数之间相互调用c语言怎么调用新函数的,你要是一定要做,可以用extern进行声明。
有一个简单c语言怎么调用新函数的方法,就是把temp定义成全局变量就行c语言怎么调用新函数了。
int tempc语言怎么调用新函数;
void main(void)
{ int a=0,b=1;
for (;b11;b++)
{ temp=b;
b=a+b;
a=temp;
}
void NEED (void)
{ int c,d;
d= temp;
}
关于c语言怎么调用新函数和c语言中怎样调用函数的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。






