HÀM TRONG C


viết những hàm riêng phục vụ những công việc đó.
Khai báo hàm bao gồm 2 phần: Khai báo prototype và viết nội dung của hàm đó.


Khai báo prototype là khai báo thông tin của một hàm, kiểu dữ liệu trả về, tham số truyền vào như thế nào, và không viết nội dung của nó. Vậy khai báo prototype để làm gì. Trình biên dịch cần phải biết những thông tin đó trước khi sử dụng nó, nghĩa là nếu sử dụng 1 hàm phải viết hàm đó trước, và đặt phía trên dòng gọi hàm đó, như vậy, khi chương trình phức tạp hơn, sẽ không thể xắp xếp được hàm nào trước hàm nào sau, nhưng nếu khai báo prototype trước thì dễ dàng hơn.Ví dụ, nếu muốn gọi hàm  inc() trong hàm main(), thì phải khai báo trước hàm inc()

01char Var = 0;
02void inc(void)
03{
04    Var = Var+1;
05}
06void main(void)
07{


08
    inc();
09    // i = 1;
10    while(1);
11}

như vậy, nếu muốn viết thêm một hàm khác như hàm dec(), thì lại phải viết trên hàm main()

01char Var = 0;

02void inc(void)

03{

04    Var = Var+1;

05}

06void dec(void)

07{
08    Var = Var-1;

09}
10void main(void)

11{
12    inc();
13    dec();
14    // i = 0;
15    while(1);
16}

Vậy nếu muốn sử dụng hàm dec() trong hàm inc() thì sao

01char Var = 0;










02void inc(void)










03{










04    Var = Var+1;










05    dec(); //lỗi ngay đây, vì dec() khai báo sau inc()










06}










07void dec(void)










08{










09    Var = Var-1;










10}










11void main(void)










12{










13    inc();










14    dec();










15    // i = 0;










16    while(1);










17}




vậy phải chuyển hàm dec() lên trên hàm inc() à, được, nhưng với 2 hàm thì có thể đơn giản, còn với hàng chục, hàng trăm hàm thì sao.

Bởi vậy, nếu như khai báo prototype thì dễ dàng hơn











01void inc(void); //thông báo cho trình biên dịch biết tồn tại hàm này, định nghĩa thế này










02void dec(void); //kết thúc bằng dấu ";" và không viết nội dung ở đây










03 










04char Var = 0;










05 










06void main(void)










07{










08    inc();










09    dec();










10    // i = 0;










11    while(1);










12}










13/*










14Nội dung của 2 hàm đã khai báo prototype trên có thể viết ở đây, hoặc ở một file .c được add vào project










15Lưu ý là khai báo prototype ra làm sao, thì ở đây viết lại phải giống như vậy










16*/










17void inc(void)










18{










19    Var = Var+1;










20    dec(); //










21}










22void dec(void)










23{










24    Var = Var-1;










25}




Khai báo hàm như thế nào:










1/*










2 + returntype: Kiểu dữ liệu trả về khi thực thi hàm này, nếu không trả về thì return-type đặt là void










3 + function_name: là tên hàm, theo qui tắt đặt tên chỉ bao gồm chữ cái, chữ số và dấu gạch dưới "_", chú ý, chữ số không đặt đầu tiên










4 + arg_type: Kiểu dữ liệu của tham số đưa vào










5 + arg1, argN .. là tên tham số truyền vào










6*/










7returntype function_name ( arg_type arg1, ..., arg_type argN );




Ví dụ, khai báo và sử dụng hàm, như sau:










01/*










02 + Hàm tên add, thực hiện một phép cộng hai số, và trả về kết quả










03 + kiểu dữ liệu trả về: char










04 + Tham số truyền vào, a: kiểu dữ liệu char và b: kiểu dữ liệu char










05*/










06char add(char a, char b);










07 










08void main()










09{










10    char c;










11    c = add(2,3); //Gọi hàm add, kết quả trả về gán trong c










12    //c = 5










13    while(1);










14}










15 










16char add(char a, char b)










17{










18    char RetVal;



19    RetVal = a+b;

20    return RetVal; //Thực hiện xong phép tính, trả về kết quả thực hiện


21}




Chú ý về viết nội dung của hàm, nên đặt dấu móc mở “{” và dấu móc đóng “}” gióng thằng hàng và giống với chữ cái đầu tiên, như code sẽ dễ nhiền hơn.

Post a Comment

Mới hơn Cũ hơn