1. THÔNG BÁO TUYỂN ADMIN DIỄN ĐÀN 2013
    Tìm kiếm nhà trọ - Ở ghép
    THÔNG BÁO BÁN ÁO SPKT.NET CHO THÀNH VIÊN DIỄN ĐÀN


    HÃY TÌM KIẾM Ở ĐÂY TRƯỚC KHI ĐẶT CÂU HỎI
    {xen:phrase loading}

Hàm trong C

Thảo luận trong 'Vi điều khiển - Mạch Số' bắt đầu bởi LGTech, 12 Tháng bảy 2010.

  1. LGTech Member

    Số bài viết: 150
    Đã được thích: 3
    Điểm thành tích: 18
    Hàm là một tập hợp mã thực thi một chức năng nào đó, khi viết một chương trình có cấu trúc rõ ràng, cần phân ra những công việc rõ ràng và 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}




    [FLASH]http://www.hiendaihoa.com/images/stories/quang-cao/2010/legia-220x110.swf[/FLASH]
    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

Chia sẻ trang này