真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

c語言創(chuàng)建h函數(shù) c語言創(chuàng)建方法

如何在c語言中定義函數(shù)在.h文件,和在新文件中使用

額,書上都有吧。

成都創(chuàng)新互聯(lián)是由多位在大型網(wǎng)絡(luò)公司、廣告設(shè)計(jì)公司的優(yōu)秀設(shè)計(jì)人員和策劃人員組成的一個(gè)具有豐富經(jīng)驗(yàn)的團(tuán)隊(duì),其中包括網(wǎng)站策劃、網(wǎng)頁美工、網(wǎng)站程序員、網(wǎng)頁設(shè)計(jì)師、平面廣告設(shè)計(jì)師、網(wǎng)絡(luò)營銷人員及形象策劃。承接:成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)、網(wǎng)站改版、網(wǎng)頁設(shè)計(jì)制作、網(wǎng)站建設(shè)與維護(hù)、網(wǎng)絡(luò)推廣、數(shù)據(jù)庫開發(fā),以高性價(jià)比制作企業(yè)網(wǎng)站、行業(yè)門戶平臺(tái)等全方位的服務(wù)。

一般來說,頭文件(.h)都包含了一些常用的而且已經(jīng)通過了測試證明其運(yùn)行正確的函數(shù),

在自己的程序中用#include引用這些頭文件,直接使用其中一些已經(jīng)寫好的函數(shù),就省去

了很多麻煩,提高了代碼的重用性。例如我們常常在程序中寫下 #include stdio.h 語

句,以使用頭文件 stdio.h 中的函數(shù),比如說printf函數(shù)。可是該如何寫自己的頭文件,

以讓自己的函數(shù)能被再次使用呢?

也許有同學(xué)會(huì)想,真接把自己的函數(shù)聲明與定義移到.h文件里就可以了。就如下面的做法:

在工程里建好main.c后,再建一個(gè)點(diǎn)utils.h文件,把常用的函數(shù)如mean()放這里。

// file name : utils.h

// version : 1

doublemean(double, double); //求兩個(gè)數(shù)的均值

doublemean(double a, double b)

{

return (a+b)/2.0;

}

// file name : main.c

// version : 1

#includestdio.h

#include"utils.h"

intmain()

{

double a,b,avg;

a = 1.0;

b = 3.0;

avg = mean(a,b); //調(diào)用utils.h里的mean函數(shù)

printf("%lf\n", avg);

return0;

}

以上的代碼是可以編譯通過的,并運(yùn)行正確的。但是,這樣的代碼并不完善。如果

再寫一個(gè)頭文件other.h,而other.h又引用了utils.h的mean()函數(shù),這時(shí)就會(huì)出

問題:

// file name : utils.h

// version : 1

doublemean(double, double); //求兩個(gè)數(shù)的均值

doublemean(double a, double b)

{

return (a+b)/2.0;

}

// file name : other.h

// version : 1

#include"utils.h" //引用 utils.h

doublemean4(double, double, double, double);

doublemean4(double a, double b, double c, double d)

{

returnmean(mean(a,b), mean(c,d)); // 調(diào)用了 utils.h 里的 mean 函數(shù)

}

// file name : main.c

// version : 2

// 增加了對(duì)other.h的引用

#includestdio.h

#include"utils.h"

#include"other.h"

intmain()

{

double a,b,c,d,avg;

a = 1.0;

b = 3.0;

c = 4.0;

d = 2.0;

avg = mean(a,b); //調(diào)用utils.h里的mean函數(shù)

printf("%lf\n", avg);

avg = mean4(a,b,c,d); //調(diào)用other.h里的mean4函數(shù)

printf("%lf\n", avg);

return0;

}

而此時(shí),編譯就不能通過了,并出現(xiàn)如下的錯(cuò)誤信息:

utils.h:9: Error: 'mean'is already defined

究其原因就是,函數(shù)的聲明可以在程序中寫多次,但函數(shù)定義只能有一個(gè)。main.c引用了

utils.h文件,因此main.c里會(huì)有一個(gè)mean()函數(shù)的聲明,而other.h里也引用了utils.h

文件,所以又有一個(gè)mean()函數(shù)的聲明。

main.c -- utils.h 第一個(gè)mean()

-- other.h -- utils.h 第二個(gè)mean()

歷史原因,C/C++編譯器不能將這樣相同的重復(fù)聲明區(qū)別開,所以必須通過其它的方法使得工程

里,mean()只被聲明一次。一般來說,都是通過#ifndef/#define/#endif宏命令組合來實(shí)現(xiàn)避免

重復(fù)聲明的。修改后的代碼如下:

//file name : utils.h

//version 2

#ifndef UTILS_H_INCLUDED // 如果沒有定義標(biāo)識(shí)符

// UTILS_H_INCLUDED,則

// 繼續(xù)編譯下面的代碼,

// 直到 #endif

#define UTILS_H_INCLUDED // 定義標(biāo)識(shí)符 UTILS_H_INCLUDED

doublemean(double, double);

doublemean(double a, double b)

{

return (a+b)/2.0;

}

#endif// UTILS_H_INCLUDED

其它代碼都同前。#ifndef/#endif 就像 if(!(...)) {} 一樣,讓編譯器明白,如果沒有定義標(biāo)

識(shí)符UTILS_H_INCLUDED,就包含下面的代碼,直到#endif;否則,到#endif為止的代碼就不被包

含到文件里。#define表示定義一個(gè)標(biāo)識(shí)符(不一定要賦值給這個(gè)標(biāo)識(shí)符)。

當(dāng)main.c引用utils.h時(shí),由于UTILS_H_INCLUDED沒被定義,所以#ifndef與#endif之間的代碼都

會(huì)被main.c包含,所以 #define 語句會(huì)被執(zhí)行,定義一個(gè)UTILS_H_INCLUDED標(biāo)識(shí)符,同時(shí)工程里

也有了一個(gè)mean()函數(shù)的定義;當(dāng)main.c引用other.h時(shí),other.h里對(duì)utils.h的引用并不會(huì)再次

定義mean(),因?yàn)閁TILS_H_INCLUDED已經(jīng)被定義了,通過#ifndef/#endif的控制作用,雖然other.h

引用了utils.h,但引用的頭文件并沒有包含mean()的聲明,自然就不會(huì)再引起重復(fù)定義的錯(cuò)誤,

編譯就能通過了。

基于相同的道理,所有的.h文件,都應(yīng)該加入#ifndef/#define/#endif的組合,以使頭文件都能

重復(fù)利用而不引起重復(fù)定義的錯(cuò)誤。例子中的other.h文件也應(yīng)如此,這里就留給同學(xué)自己添加了。

參考網(wǎng)址:

C語言如何制作自己的 h 文件

一個(gè).h文件要

對(duì)應(yīng)有一個(gè).c文件,這樣寫助于查看和修改程序。比如a.h

a.c;:

在.h文件中

#ifndef

__A_H_

#define

__A_H_

#include

void

trans2(double

B)

;

double

trans1()

;

#endif

在.c文件中

#include

"a.h"

把相應(yīng)的函數(shù)定義寫在.c文件中

再在main.c文件中

#include

"a.h"

#include

main()

{

double

trans1()

//由度分秒到弧度

{

double

B1,B11,B12,B13,B111;

scanf("%lf°%lf′%lf″",B11,B12,B13);

B111=fabs(B11);

//B11可能為負(fù)值

B1=B111+B12/60.0+B13/3600.0;

B1=B1*atan(1)/45.0;

if(B110)

B1=-B1;

return

B1;

}

void

trans2(double

B)

//由弧度到度分秒并輸出角度值

{

int

a,b;

double

B0;

B0=fabs(B);

//B可能為負(fù)值

double

c;

B0=B0*45.0/atan(1);

a=int(B0);

b=int((B0-a)*60);

c=(B0-a)*3600-b*60;

if((int)(c)==60)

//為了避免出現(xiàn)59′60″這種情況,不過好像不起作用,不知道為什么,原來是int沒有加括號(hào)

{

b=b+1;

c=0.0;

}

if(b==60)

{

b=0;

a=a+1;

}

if(B0)

a=-a;

printf("%d°%d′%.4f″\n",a,b,c);

}

}

就可以在main.c函數(shù)中調(diào)用a.c中的函數(shù)了

如何編寫C語言的.h頭文件呀?并同一個(gè)。h調(diào)用其中的函數(shù)。

首先建頭文件是為了聲明c文件中的函數(shù),以及包括宏定義。建立頭文件要有對(duì)應(yīng)的c文件。我簡單地謝了一個(gè)c文件,里面有一個(gè)函數(shù)。

下面要寫頭文件首先要建一個(gè).h文件

打開h文件,進(jìn)行編輯。建立頭文件是有一定步驟的。要用到#ifndef。。。#define。。。。#endif。這是為了避免重復(fù)定義

#ifndef后面要寫的是頭文件名稱的大寫。例如:test.h要寫成__TEST_H__。前面與后面是兩個(gè)下劃線。字母用大寫

然后在define與endif中間聲明你的函數(shù)名,記得寫冒號(hào)呦。

然后在main文件中寫上include這個(gè)頭文件,就可以調(diào)用了。

然后編譯,運(yùn)行,就OK了。祝大家學(xué)習(xí)愉快。


分享名稱:c語言創(chuàng)建h函數(shù) c語言創(chuàng)建方法
文章URL:http://weahome.cn/article/dojhddi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部