Hàm trong C là một nhóm các câu lệnh cùng nhau thực hiện một nhiệm vụ. Mỗi chương trình C có ít nhất một hàm, là hàm main () và tất cả các chương trình đều có thể thêm các hàm bổ sung.
Bạn có thể chia code thành các hàm riêng biệt, cách bạn phân chia code giữa các hàm khác nhau tùy thuộc vào bạn, nhưng về mặt logic bạn cần chia vì mỗi hàm thực hiện một tác vụ cụ thể. Một khai báo hàm cho trình biên dịch biết về tên, kiểu trả về và các tham số của hàm. Thư viện của C cung cấp nhiều chức năng được tích hợp sẵn mà chương trình của bạn, ví dụ, strcat () để nối hai chuỗi, memcpy () để sao chép một vị trí bộ nhớ sang một vị trí khác và nhiều hàm khác.
Dạng chung của hàm trong ngôn ngữ lập trình C như sau:
return_type function_name( parameter list ) {
body of the function
}
bao gồm tiêu đề hàm và phần nội dung hàm. Dưới đây là tất cả các phần của hàm:
return_type: một hàm có thể trả về một giá trị, là kiểu dữ liệu của giá trị hàm trả về. Một số hàm thực hiện các hoạt động mong muốn mà không trả về một giá trị. Trong trường hợp này, return_type là từ khóa void .
Tên hàm: đây là tên thực của hàm, tên hàm và danh sách tham số cùng nhau tạo thành chữ ký hàm.
Tham số: một tham số giống như một giữ chỗ, khi một hàm được gọi, bạn chuyển một giá trị cho tham số. Giá trị này được gọi là tham số hoặc đối số thực tế. Danh sách tham số tham chiếu đến loại, thứ tự và tham số của hàm. Các tham số là tùy chọn, có nghĩa là một hàm có thể không chứa tham số.
Function Body: phần thân hàm chứa một tập hợp các câu lệnh xác định chức năng của hàm.
Dưới đây là mã nguồn cho một hàm được gọi là max (). Hàm này lấy hai tham số num1 và num2 và trả về giá trị lớn nhất giữa hai tham số:
/* function returning the max between two numbers */
int max(int num1, int num2) {
/* local variable declaration */
int result;
if (num1 > num2)
result = num1;
else
result = num2;
return result;
}
Một khai báo hàm cho trình biên dịch biết về tên hàm và cách gọi hàm. Một khai báo hàm có các phần sau:
return_type function_name( parameter list );
Đối với hàm được định nghĩa ở trên max (), khai báo hàm như sau:
int max(int num1, int num2);
Tên tham số không quan trọng trong khai báo hàm chỉ loại của chúng là bắt buộc, vì vậy sau đây cũng là khai báo hợp lệ:
int max(int, int);
Khai báo hàm là bắt buộc khi một hàm trong một tệp nguồn và bạn gọi hàm đó trong một tệp khác. Trong trường hợp này, bạn nên khai báo hàm ở đầu tệp gọi hàm.
Để gọi một hàm, bạn chỉ cần chuyển các tham số bắt buộc cùng với tên hàm và nếu hàm trả về một giá trị, thì bạn có thể lưu trữ giá trị trả về. Ví dụ:
#include
/* function declaration */
int max(int num1, int num2);
int main () {
/* local variable definition */
int a = 100;
int b = 200;
int ret;
/* calling a function to get max value */
ret = max(a, b);
printf( "Max value is : %d\n", ret );
return 0;
}
/* function returning the max between two numbers */
int max(int num1, int num2) {
/* local variable declaration */
int result;
if (num1 > num2)
result = num1;
else
result = num2;
return result;
}
Chúng tôi đã giữ max () cùng với main () và biên dịch mã nguồn. Trong khi chạy tệp thực thi cuối cùng, nó sẽ tạo ra kết quả sau:
Max value is : 200
Nếu một hàm sử dụng các đối số, nó phải khai báo các biến chấp nhận các giá trị của các đối số. Các biến này được gọi là các tham số chính thức của hàm. Các tham số chính thức hoạt động giống như các biến cục bộ khác bên trong hàm và được tạo khi nhập vào hàm và bị hủy khi thoát.
Trong khi gọi một hàm, có hai cách trong đó các đối số có thể được chuyển đến một hàm:
Gọi theo giá trị: Phương thức này sao chép giá trị thực của một đối số vào tham số chính thức của hàm. Trong trường hợp này, các thay đổi được thực hiện cho tham số bên trong hàm không ảnh hưởng đến đối số.
Gọi theo tham chiếu: Phương thức này sao chép địa chỉ của một đối số vào tham số chính thức. Bên trong hàm, địa chỉ được sử dụng để truy cập đối số thực tế được sử dụng trong cuộc gọi. Điều này có nghĩa là các thay đổi được thực hiện cho tham số ảnh hưởng đến đối số.
Theo mặc định, C sử dụng cuộc gọi theo giá trị để chuyển đối số. Nói chung, nó có nghĩa là mã trong một hàm không thể thay đổi các đối số được sử dụng để gọi hàm.
Tài liệu về lập trình C khác nên xem: