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函數的斷點繼續執行。