函數(shù)c語言實(shí)現(xiàn) c語言用函數(shù)實(shí)現(xiàn)

c語言如何實(shí)現(xiàn)函數(shù)的調(diào)用

如何調(diào)用C語言寫的庫,如a.lib等,有對應(yīng)的庫頭文件a.h。假設(shè)a.h中定義了函數(shù):

創(chuàng)新互聯(lián)提供高防物理服務(wù)器租用、云服務(wù)器、香港服務(wù)器、服務(wù)器機(jī)柜租用

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函數(shù)

*/

}

從上面可以看出,extern

"C"

是用在C和C++之間的橋梁。之所以需要這個(gè)橋梁是因?yàn)镃編譯器編譯函數(shù)時(shí)不帶

函數(shù)的類型信息,只包含函數(shù)符號名字,如C編譯器把函數(shù)int

a(float

x)編譯成類似_a這樣的符號,C連接器只要

找到了調(diào)用函數(shù)的符號,就可以連接成功,它假設(shè)參數(shù)類型信息是正確的,這是C編譯連接器的缺點(diǎn)。而C++

編譯器為了實(shí)現(xiàn)函數(shù)重載,編譯時(shí)會帶上函數(shù)的類型信息,如他把上面的a函數(shù)可能編譯成_a_float這樣的

符號為了實(shí)現(xiàn)重載,注意它還是沒有帶返回值得信息,這也是為什么C++不支持采用函數(shù)返回值來區(qū)別函數(shù)

重載的原因之一,當(dāng)然,函數(shù)的使用者對函數(shù)返回值的處理方式(如忽略)也是重要原因。

基于以上,C調(diào)用C++,首先需要用封裝函數(shù)把對C++的類等的調(diào)用封裝成C函數(shù)以便C調(diào)用,于是extern

"C"

作用是:讓編譯器知道這件事,然后以C語言的方式編譯和連接封裝函數(shù).(通常是把封裝函數(shù)用C++編譯器按C++

方式編譯,用了extern

"C"

后,編譯器便依C的方式編譯封裝接口,當(dāng)然接口函數(shù)里面的C++語法還是按C++方式

編譯;對于C語言部分--調(diào)用者,還是按C語言編譯;分別對C++接口部分和C部分編譯后,再連接就可以實(shí)現(xiàn)C

調(diào)用C++了).

相反,C++調(diào)用C函數(shù),extern

"C"

的作用是:讓C++連接器找調(diào)用函數(shù)的符號時(shí)采用C的方式,即使用_a而不是

_a_float來找調(diào)用函數(shù)。

C語言函數(shù)如何做

#include stdio.h

#include stdlib.h

/******start******/

int GetMax(int x, int y);

int GetMin(int x, int y);

int GetAverage(int x, int y);

/******end******/

int main()

{ int Number1 = 0,Number2 = 0;

int Result[3], i = 0;

//Result數(shù)組用來存存儲的最大值,最小值和平均值

printf("output:\ninput two numbers:\n");

scanf("%d%d", Number1, Number2);

if(Number1 == Number2)

{ printf("輸入二個(gè)不同的數(shù)字:\n");

return 0;

} /*在start和end之間完成函數(shù)的調(diào)用和參數(shù)的傳遞以及返回值的存儲*/ /******start******/

Result[0]=GetMax(Number1 , Number2);

Result[1]=GetMin(Number1 , Number2);

Result[2]=GetAverage(Number1 , Number2);

/******end******/

printf("\n最大數(shù) 最小數(shù) 平均值\n");

for (i = 0; i 3; i++)

{ printf("%6d", Result[i]);

}

printf("\n");

return 0;

}

//取最大值函數(shù)

int GetMax(int x, int y)

{ return (x y) ? x : y;

}

//取最小值函數(shù)

int GetMin(int x, int y)

{ return (x y) ? y : x;

}

//取平均值函數(shù)

int GetAverage(int x, int y)

{ return (x + y) / 2;

}

C語言 編寫函數(shù)

1、編寫函數(shù)func1,實(shí)現(xiàn)求兩個(gè)數(shù)的最大公約數(shù)。

1:

int

fuc1(int

a,int

b)

{

if(a%b==0)

return

b;

return

fuc(b,a%b);

}

int

t=fuc1(a,b);//t為a,b最大公約數(shù)。

2、編寫函數(shù)func2,實(shí)現(xiàn)求兩個(gè)自然數(shù)之間的奇數(shù)的和。

2

int

fuc2(int

a,int

b)

{

int

sum=0;

int

i;

for(i=a;i=b;i++)

if(i%2==1)

sum+=i;

return

sum;

}

int

t=fuc2(a,b);//t為a,b間所有奇數(shù)之和。

3、編寫函數(shù)func1,實(shí)現(xiàn)求一個(gè)自然數(shù)的階乘(要求用遞歸的方法)。

int

fuc1(int

k)

{

if(k==1)

return

1;

return

k*fuc(k-1);

}

int

t=fuc1(a);//t為a的階乘.

4、編寫函數(shù)func2,實(shí)現(xiàn)求兩個(gè)自然數(shù)之間的偶數(shù)的和。

int

fuc2(int

a,int

b)

{

int

sum=0;

int

i;

for(i=a;i=b;i++)

if(i%2==0)

sum+=i;

return

sum;

}

int

t=fuc2(a,b);//t為a,b間所有偶數(shù)之和。

C語言函數(shù)實(shí)現(xiàn)

#include stdio.h

int main()

{

int a[3][3];

int i,j;

double sum=0;

for(i=0;i3;i++ )

for( j=0;j3;j++ )

{

scanf("%d", a[i][j] );

sum += a[i][j] ;

}

printf("%g\n", sum/9 );

return 0;

}

網(wǎng)站名稱:函數(shù)c語言實(shí)現(xiàn) c語言用函數(shù)實(shí)現(xiàn)
本文路徑:http://muchs.cn/article26/doeeejg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷軟件開發(fā)、域名注冊、品牌網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、面包屑導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)