Bước tới nội dung

Sách C/Hàm

Tủ sách mở Wikibooks


Các hàm

[sửa]

Hàm là một tập hợp của một khối lệnh để thực thi một chức năng theo qui tắc sau

  <kiểu_trả_về> tên_hàm(<danh sách tham số>)
  {
     <các_câu_lệnh>
 
     return <biến (hay giá trị) có kiểu là kiểu_trả_về>;
  }

Có 2 loại hàm

Hàm Trống

[sửa]

Một loại Hàm không Có Tham Số và không có trả về một kết quả

Công Thức
  Void tên_hàm(Void)
  {
     <các_câu_lệnh>
 
     return <biến (hay giá trị) có kiểu là kiểu_trả_về>;
  }
Thí Dụ
  void main(void)
  {
     int z = 1;
     int y = -2;
     printf("%d + 1 = %d\n", z, add(z, 1));
     printf ("absolute value of %d is %d", y, abs(y));
  }

Hàm có Tham Số, và trả về một kết quả

[sửa]
Thí Dụ
   int add(int x, int y)
  {
     return x + y;
  }
  int abs(int x)
  {
     if (x > 0) return x;
     if (x < 0) return -x;
     if (x == 0) return 0;
     /* đây chỉ là thí dụ cho thấy C có khả năng dùng nhiều hơn 1 câu lệnh <code>return</code>
        hoàn toàn có thể dùng các câu lệnh khác đơn giản hơn. */
  }

Cú pháp

[sửa]

Một hàm C phải bao gồm một kiểu trả về (kiểu đó trả về void nếu không có giá trị trả về), một tên xác định, một danh sách các tham số để trong ngoặc đơn (nếu danh sách này không có tham số nào thì ghi là void bên trong dấu ngoặc), sau đó là khối các câu lệnh (hay khối mã) và/hay các câu lệnh return. (Nếu kiểu trả về là void thì mệnh đề này không bắt buộc phải có. Ngược lại, cũng không bắt buộc chỉ có một câu lệnh return mà tùy theo kỹ thuật, người lập trình có thể dẫn dòng mã sao cho mọi hướng chẻ nhánh đều được trả về đúng kiểu.)

  <kiểu_trả_về> tên_hàm(<danh sách tham số>)
  {
     <các_câu_lệnh>
 
     return <biến (hay giá trị) có kiểu là kiểu_trả_về>;
  }

Trong đó, <danh sách tham số> của N biến thì được khai báo như là kiểu dữ liệu và tách rời nhau bởi dấu phẩy ,:

  <kiểu_dữ_liệu> var1, <kiểu_dữ_liệu> var2, ... <kiểu_dữ_liệu> varN

Toàn bộ danh sách này được đặt trong ngoặc đơn ngay sau tên_hàm.

Thí dụ

[sửa]

Hàm add tính tổng hai số có kiểu integer, hàm abs tính trị tuyệt đối của số có kiểu integer, và chương trình (hàm main) hiển thị hai dòng 1 + 1 = 2absolute value of -2 is 2

  
#include <stdio.h>;    //Chú giải: dòng này khai báo tập tin bao gồm là stdio.h

  int add(int x, int y)
  {
     return x + y;
  }

  int abs(int x)
  {
     if (x > 0) return x;
     if (x < 0) return -x;
     if (x == 0) return 0;
     /* đây chỉ là thí dụ cho thấy C có khả năng dùng nhiều hơn 1 câu lệnh <code>return</code>
        hoàn toàn có thể dùng các câu lệnh khác đơn giản hơn. */
  }

 

Chú ý: phần mã trên đã được thử thành công dùng trình dịch GNU (cho ANSI C và C99)

Hàm chủ main có kiểu trả về là void nên không cần câu lệnh return.

Mô tả

[sửa]

Trong các câu lệnh tiền xử lý, ở cấp độ cao nhất, một chương trình ngôn ngữ C luôn có một chuỗi các khai báo cho các tập tin bao gồm.

Sau đó là các khai báo của phạm vi tập tin. Các khai báo này giới thiệu các hàm, các biến và các kiểu biến. Các hàm trong C nhìn tương tự với các chương trình con của Fortran hay các thủ tục của Pascal. Định nghĩa của hàm xuất hiện trong phần thân của nó (phần giữa bộ dấu ngoặc {} theo sau nguyên dạng của hàm).

Các chương trình trong C để tạo các ứng dụng trực tiếp đều cần phải có một hàm đặc biệt tên là main, đây sẽ là hàm đầu tiên được gọi khi chương trình bắt đầu thực thi. Sau đây là một chương trình đầy đủ mặc dù không có mấy ứng đụng thiết thực.

 int main (void)
 {
    return 0;
 }

Hàm code>main thường gọi các hàm khác để giúp nó hoàn tất công việc (tuỳ theo sự lập trình của người dùng).

Trọng một số trường hợp C được dùng không phải để tạo ra các ứng dụng trực tiếp mà để dùng với hệ điều hành hay các nơi khác (như là phát triển các bộ điều vận, các phần sụn, hay các thư viện...). Những trường hợp như vậy thì người lập trình hoàn toàn tự do trong việc giải quyết làm sao để xử lý khởi động chương trình, đặc biệt nó sẽ không cần định nghĩa hàm main.

Các hàm có thể được viết ra bởi người lập trình hay được cung cấp sẵn bởi các thư viện. Các thư viện cần được khai báo (sử dụng) bằng cách nêu tên các tập tin tiêu dề trong câu lệnh dạng #include tập tin tiêu đề. Một số hàm thư viện như là printf đã được định nghĩa bởi chuẩn C, chúng được tham chiếu như là các hàm thư viện chuẩn.

Một hàm có thể trả về một giá trị cho môi trường gọi nó. Khi hàm main trả về giá trị 0 chỉ dấu cho rằng toàn bộ chương trình đã hoàn tất thành công và kết thúc. Hàm printf cùng có giá trị trả về, đó là số lượng kí tự đã hiển thị, nhưng giá trị này thường bị bỏ qua không dùng.