c调用c语言
‘壹’ 怎么调用外部c语言文件
解决什么了,你现在代码的问题还很多。
file1.c中的内容:
#include<file2.c>//这样你以后写程序还会出错。要建个h头文件,把函数声明放到里面就行。
int A;
main()//没类型可以运行吗。用void main
{
int power(int);//这个声明放到头文件里
int b=3,a,c,d,m;
printf("enter the number a and its power m:\n");
scanf("%d,%d",&a,&m);//你输入的不是A,是a.。。。
c=A*b;//c的值是0
printf("%d*%d=%d\n",A,b,c);//由于A是全局变量,值默认为0。
d=power(m);
printf("%d*%d=%d",A,m,d);
}
file2.c中的内容:
extern A;//类型要带上,extern int A;
power(int n);
{
int i,y=1;
for(i=1;i<=n;i++)
y=A;
return(y);
}
file1.c中的内容:
#include<file2.c>
int A;
main()
{
int power(int);
int b=3,a,c,d,m;
printf("enter the number a and its power m:\n");
scanf("%d,%d",&a,&m);
c=A*b;
printf("%d*%d=%d\n",A,b,c);
d=power(m);
printf("%d*%d=%d",A,m,d);
}
file2.c中的内容:
extern A;
power(int n);
{
int i,y=1;
for(i=1;i<=n;i++)
y=A;
return(y);
}
‘贰’ 如何在C++中调用C的代码
,但是具体还是有些差别的。 先对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语言编译
‘叁’ c语言如何 调用外部程序
调用外部程序接口
方法1.
Process p=Runtime.getRuntime.exec("cmd")(最常用)
方法2.
Process p=new ProcessBuilder(cmd).start()
但是一般方法一比较常用, 下面我们介绍下方法一中关于抽象Process类的常用函数
//向对应程序中输入数据
();
//获得对应程序的输出流(没写错)
();
//获得程序的错误提示
();
//等待程序执行完成,返回0正常,返回非0失败
abstractpublicintwaitFor()throwsInterruptedException;
//获得程序退出值,0正常退出,非0则异常
abstractpublicintexitValue();
//销毁进程
abstractpublicvoiddestroy();
其中前3个函数用的最多
‘肆’ 用c语言如何调用c++语言
可以分开写,比如a.c b.cpp
那么我们可以用c++ 的编译器(必须)把a.c b.cpp编译成目标模块,比如a.o b.o (linux下),然后用链接器链接就的可以生成你需要的可执行文件
但b.cpp 必须按照申明按照c的方法编译,也就是申明extern "c"
‘伍’ c语言如何实现函数的调用
函数名加(实参),这样吧...举个例子你看一下...
int add(int x,int y)
{
int x,y;
int z;
z=x+y;
return z;
}//定义一个z=x+y的函数
int main()//主函数
{
int a=10,b=20;
int m;
m=add(a,b);//这句就是函数的调用...调用了add函数
printf("%d",m);
return m;
}
理解了没...还没的话...仔细看下教材...这个问题很容易解决的...
‘陆’ c语言调用
这个是声明一个函数
int max(int x,int y)
第一个int是函数返回的值的类型是int,max是函数名,int x,int y,是要传递的int型参数
和int x,y; x=1;y=2;不同,这个是声明变量
‘柒’ C语言 调用另一个程序
调用其他程序有两种方式,一个是直接调用其他模块中的函数,另外一个是用系统调用的方式调用已经编译连接好的可执行文件。
第一种方法的话,无论你用什么工具都是在你的程序里面添加你要调用函数的函数声明,然后再编译之后把两个obj文件连接起来。或者是把你要调用函数作到一个lib文件里面,然后连接到这个库。
第二种方式的话,就是把你要调用的函数(main函数)编译连接成一个独立的可执行文件,然后在你自己的程序里面指定目录结构程序名用系统调用执行。
VC的话不太适合初学者理解c语言,不过楼主如果是仅仅完成这个程序的功能的话,第一种方法中的编译和连接工作VB都会给你做,你只需要把代码加入工程中,然后在你的函数前声明调用的函数就行了。
--------不华丽的分割线-------
我明白了,你不理解的是我说的编译啊连接这些术语。这样吧,你新建一个VC工程,把那个c加进去,然后执行一下。接着去你建的那个工程的文件夹下找一个和你的工程名一样的后缀是.exe的文件就能用了。前提是你要用的那个.c文件里面有main方法。
‘捌’ c语言函数的调用和声明
假设主函数main()。其他函数void fun(int a,int *b)。
关于函数定义和声明:
在代码中fun函数,有完整函数体的代码就是函数定义部分,比如void fun(int a,int *b){。。。};。
如果没有具体实现的函数体代码(也就是大括号内容),那么就是函数声明。比如void fun(int ,int *);
关于函数声明和调用:
如果fun函数定义在main代码上面。比如:
void fun(int a,int *b){。。。};
int main(){
int a=0,int b=0;
......
fun(a,&b);//这里fun定义代码在main上面,所以可以不需要声明。反之需要先写声明语句
return 0;
}
关于函数局部变量及全局变量:
简单区分:
定义在函数之外的就是全局变量,这个变量所有函数都可以直接使用,并且共用同一个地址。任意函数修改了变量值,其他函数调用也会变。
定义在函数之内的就是局部变量,局部变量只属于该函数,其他函数即使定义了同样名字的变量,这两个变量也不同地址,互不相干。
比如:
int a;//这就是全局变量,作用域下所有函数共用
int main()
{
int b;//这就是局部变量,只在本函数有效,如果想在调用fun函数时让fun也使用该变量,需要把这个变量的地址作为参数传递过去。
printf("%d",b);
return 0;
}
注意:c语言中允许局部变量和全局变量同名,但是同名的局部变量会屏蔽全局变量,实际代码避免同名。
关于函数传值和传址:
如函数void fun(int a,int *b){..........};这里形参a 和*b,分别表示一个值和一个地址
所以在调用该函数时,比如:
int main()
{
int c,d;
fun(c,&d);//这里调用就对应上面形参类型,第一个参数传递了c的值(传值),第二个参数传递了d的地址(传址),这里c和&d,叫做实参。当fun函数运行时改变了a和b指向地址的值,对应main函数中c的值不变,d的值改变。
return 0;
}
顺带一说:局部变量,在函数运行结束后会自动释放,所以想把局部变量地址作为返回值,需要用malloc函数申请。(这里看不懂可以暂时忽视)
‘玖’ C语言的调用
#include<stdio.h>
intmain()
{
intmax2(inta,intb);
intmax4(inta,intb,intc,intd);//这里叫做函数声明,就是说,如果你在这段代码中要用到这个函数就得先在前面声明,当然如果你把函数体写在主函数前面就可以省略词句,一般的较大的程序会将函数单独写,然后在主函数里要声明,
inta,b,c,d,max;//定义5个整形变量
printf("pleaseenter4number: ");//提示输入4个整数
scanf("%d,%d,%d,%d,%d",&a,&b,&c,&d);//输入4个整数(你输入了5个),这句有点毛病,就是你在输入4个整数时中间必须用英文逗号隔开,一般我们这样写scanf("%d%d%d%d",&a,&b,&c,&d);中间用空格分开
max=max4(a,b,c,d);//调用max4函数,将abcd中最大的数返回并赋值给max
printf("themaxnumberis: %d ",max);//输出最大数
return0;
}
intmax4(inta,intb,intc,intd)//这是函数具体的实现代码,这句是函数名,它和前面的声明不同之处就是没后面的分号,大括号内为函数代码,这个函数的作用是从4个数中选出最大的数,
{
intmax2(inta,intb);
intm;
m=max2(a,b);
m=max2(m,c);
m=max2(m,d);
return(m);
}
intmax2(inta,intb)//这是从两个中选出最大的数
{
if(a>=b)
returna;
else
returnb;
}
#include<stdio.h>//简化代码如下
intmax2(inta,intb)
{
returna>b?a:b;
}
intmax4(inta,intb,intc,intd)
{
intm;
m=max2(a,b);
m=max2(m,c);
m=max2(m,d);
return(m);
}
intmain(void)
{
inta,b,c,d,max;
printf("pleaseenter4number: ");
scanf("%d%d%d%d",&a,&b,&c,&d);
max=max4(a,b,c,d);
printf("themaxnumberis:%d ",max);
return0;
}
希望可以帮到你。
‘拾’ C语言如何调用函数
C语言中,函数调用的一般形式为:
函数名(实际参数表)
对无参函数调用时则无实际参数表。实际参数表中的参数可以是常数、变量或其它构造类型数据及表达式。各实参之间用逗号分隔。
#include<stdio.h>
intfun(intx,inty);//函数声明,如果函数写在被调用处之前,可以不用声明
voidmain()
{
inta=1,b=2,c;
c=fun(a,b);//函数的调用,调用自定义函数fun,其中a,b为实际参数,传递给被调用函数的输入值
}
//自定义函数fun
intfun(intx,inty)//函数首部
{//{}中的语言为函数体
returnx>y?x:y;//返回x和y中较大的一个数
}
(10)c调用c语言扩展阅读
C语言中不允许作嵌套的函数定义。因此各函数之间是平行的,不存在上一级函数和下一级函数的问题。但是C语言允许在一个函数的定义中出现对另一个函数的调用。
这样就出现了函数的嵌套调用。即在被调函数中又调用其它函数。这与其它语言的子程序嵌套的情形是类似的。其关系可表示如图。
图表示了两层嵌套的情形。其执行过程是:执行main函数中调用a函数的语句时,即转去执行a函数,在a函数中调用b 函数时,又转去执行b函数,b函数执行完毕返回a函数的断点继续执行,a函数执行完毕返回main函数的断点继续执行。