
Lập trình nâng cao -Chương 08 -Ngô Công Thắng 1
Chương 8. Hàm trong C
I.Khaibáohàm
II. Địnhnghĩahàm
III.Sửdụnghàm
IV.Contrỏtrỏtớihàm
V.Xâydựngthưviệnhàm
Lập trình nâng cao -Chương 08 -Ngô Công Thắng 2
I. Khai báo hàm
1.Giớithiệuvềhàm
2.Cúphápkhaibáohàm
3.Cácthamsốtrongkhaibáohàm

Lập trình nâng cao -Chương 08 -Ngô Công Thắng 3
1. Giới thiệu về hàm
†TrongCtấtcảcácchươngtrìnhcon đềugọilàhàm.
†Ngoàicáchàmthưviệncósẵn,ngườilậptrìnhcó
thểtựtạoracáchàm. Để tạoramộthàmngườilập
trìnhphảikhaibáovà địnhnghĩanó.
†Khaibáohàm(functiondeclarationorprototype)là
xác địnhtêncủahàm,kiểudữliệutrảvề,sốlượng
thamsốvàkiểucủatừngthamsố.
†Địnhnghĩahàm(functiondefinition)làxác định
côngviệcmàhàmsẽthựchiệnthôngquacáclệnh
củahàm.
†CáchàmtrongCkhônglồngnhau,tứclàtrongmột
hàmtakhôngthểđịnhnghĩamộthàmkhác.
Lập trình nâng cao -Chương 08 -Ngô Công Thắng 4
2. Cú pháp khai báo hàm
†Cúphápkhaibáohàmnằmtrênmộtdòng,kết
thúcbằngdấuchấmphẩy.
Kiểu_trả_vềTên_hàm(Kiểu_1Tên_tham_số_1,Kiểu_2Tên_tham_số_2,…);
Vídụ:floatinchtomet(floatx);
intcong(inta,intb);
†Mộtkhaibáohàmkhôngchobiếtnhữnggìcó
trongthânhàm.Nóchỉbáochotrìnhbiêndịch
biếtvềtênhàm,kiểucủahàm,sốlượngcáctham
sốvàkiểucủacácthamsố.

Lập trình nâng cao -Chương 08 -Ngô Công Thắng 5
2. Cú pháp khai báo hàm (tiếp)
†Khaibáohàmcóthểđặtởbấtkỳđâutrướckhigọi
hàm.Tốtnhấtlà đểởđầutệpchứachươngtrìnhchính
(chứahàmmain)hoặcđể trướcmộthàmsẽgọinó.
Trongcácchươngtrìnhnhiềufilethìcáckhaibáohàm
thường để trongcácfileheadercó đuôi.h,còncác định
nghĩahàm để trongcácfilethưviệncó đuôiobjhoặc
lib.
†Nếuhàm đượcđịnhnghĩaởđâu đótrướckhigọihàm
thìcóthểkhôngcầnkhaibáohàm.Tuynhiênvẫnnên
cókhaibáohàmnhấtlàtrongcácchươngtrìnhcó
nhiềuhàmlớnhaycácchươngtrìnhnằmtrênnhiều
file.
Lập trình nâng cao -Chương 08 -Ngô Công Thắng 6
3. Các tham số trong khai báo hàm
†Nếuhàmkhôngcóthamsốthìtrongdấu
ngoặcđơncủakhaibáohàm để trống.Vídụ:
intxoa();
†Têncủacácthamsốtrongkhaibáohàmcó
thểkhôngcầnxác định.Vídụ:
floatinchtomet(float,float);

Lập trình nâng cao -Chương 08 -Ngô Công Thắng 7
II. Định nghĩa hàm
1.Cúpháp địnhnghĩahàm
2.Lệnhreturn
3.Hàmkhôngtrảvềgiátrị
Lập trình nâng cao -Chương 08 -Ngô Công Thắng 8
1. Cú pháp định nghĩa hàm
Kiểu_trả_vềTên_hàm(Kiểu_1Tên_tham_số_1,Kiểu_2Tên_tham_số_2,…)
{
//Cáclệnhcủahàm đểđây
}
Vídụ:
intcong(inta,intb)
{
intz;
z=a+b;
returnz;
}
Không có dấu
chấm phẩy
Thân hàm

Lập trình nâng cao -Chương 08 -Ngô Công Thắng 9
1. Cú pháp định nghĩa hàm (tiếp)
†Dòng đầutiêntrong địnhnghĩahàmgiống
trongkhaibáohàm,chỉkháclàkhôngcódấu
chấmphẩyvàcácthamsốbắtbuộcphảicó
tên.
†Khi đãcókhaibáohàmthì địnhnghĩahàm
thường để sauhàmmainhoặcđể trongmột
tệpobj(lib). Để quendầnvớiviệcviếtcác
chươngtrìnhlớn,khithựchànhchúngtaviết
cáckhaibáohàmtrongtệp.h,còncác định
nghĩahàm để trongtệp.obj(lib).
Lập trình nâng cao -Chương 08 -Ngô Công Thắng 10
2. Lệnh return
†Lệnhreturn đượcsửdụngtrongmộthàm.Lệnh
returnthựchiệnhaichứcnăng:
nLàmchomộthàmtrởvềchươngtrìnhgọinó.
nĐượcdùng để trảvềmộtgiátrị.
†Cúphápdùnglệnhreturnnhưsau:
returnGiá_trị_trả_về;
hoặcreturn;
†Lệnhreturncóthểdùng ởbấtkỳvịtrínàotrong
hàmnhưngthường ởcuốihàm.
†Vớicáchàmcótrảvềgiátrịthìlệnhreturnbắtbuộc
phảicó.