Khai báo và định nghĩa một hàm (function declarations & function definitions)

Một phần của tài liệu Lý thuyết lập trình C++ (Trang 26 - 27)

Một nguyên tắc muôn thủa của C và C++ là mọi thứ cần phải được khai báo trước lần sử dụng đầu tiên. Bạn không thể sử dụng một biến hay hàm nếu như không nói trước cho trình biên dịch biết điều đó (chắc compiler cho rằng hành động dùng mà không xin phép của bạn là một sự "xúc phạm" với nó nên nó bực, nó không dịch cho ). Vì vậy trước khi sử dụng hàm ta phải khai báo. Nếu ta chỉ khai báo tên hàm còn viết định nghĩa thân hàm ở chỗ khác thì đó là sự khai báo bình thường (declaration) hay khai báo nguyên mẫu

hàm (prototype). Còn nếu ta viết luôn cả thân hàm thì đó là một sự định nghĩa hàm (definition).

Khai báo nguyên mẫu hàm (function prototype declaration)

C++ Code:

Lựa chọn code | Ẩn/Hiện code

<kiểu_trả_về> <tên_hàm>(danh_sách_tham_số); Ví dụ:

int square(int); // tính bình phương của một số nguyên

Khai báo này giống như việc bạn nói với trình biên dịch: “này chú compiler, sẽ có một hàm kiểu như thế xuất hiện trong chương trình, vì vậy nếu chú nhìn thấy chỗ nào gọi cái hàm này thì đừng có xoắn, anh sẽ viết định nghĩa nó ở một xó nào đấy trong chương trình. Yên tâm đi, anh không lừa chú đâu”

Định nghĩa hàm (function definition)

Bây giờ giả sử thằng compiler nó tạm thời “tin” theo lời chúng ta, rằng sẽ có định nghĩa đầy đủ cho cái nguyên mẫu được khai báo trên kia, và nó bắt đầu dịch tiếp. Giả sử nó gặp một câu lệnh như sau:

C++ Code:

Lựa chọn code | Ẩn/Hiện code

x=square(y); // giả thiết x, y đã được khai báo trước

Vì đã được thông báo từ trước nên nó sẽ “không xoắn”, mà bắt đầu tìm định nghĩa cho hàm này, vì nó vẫn tin vào “lời hứa” của chúng ta. Nếu nó tìm mà không thấy, nghĩa là chúng ta đã “lừa” nó, nó sẽ báo lỗi. Vì vậy ta phải cung cấp định nghĩa cho hàm như đã cam kết. Dưới đây là định nghĩa cho hàm square:

C++ Code:

Lựa chọn code | Ẩn/Hiện code

int square(int n){ return n*n; }

Định nghĩa này bao gồm phần header (hay còn gọi là declarator) và theo sau nó là phần thân hàm (body). Phần header phải tương thích với nguyên mẫu hàm, nghĩa là phải có cùng kiểu trả về, cùng tên, cùng số lượng tham số và cùng kiểu tham số ở

những vị trí tương ứng.

Một số chú ý nhỏ

• Tham số (parameters) khác với đối số. Tham số (hay còn gọi là tham số hình thức) là những biến tượng trưng ở trong danh sách tham số, xuất hiện lúc khai báo nguyên mẫu hoặc định nghĩa hàm, còn đối số là dữ liệu truyền vào cho hàm khi hàm được gọi. Ví dụ:

C++ Code:

Lựa chọn code | Ẩn/Hiện code

int min(int a, int b); // a và b là tham số

minimum=min(x,y); // x, y đối số được truyền vào cho hàm

• Trong danh sách tham số ở khai báo nguyên mẫu có thể chỉ cần nêu kiểu dữ liệu của của tham số mà không cần nêu tham số, lúc định nghĩa mới cần. Ví dụ

C++ Code:

Lựa chọn code | Ẩn/Hiện code

int min(int, int); // khai báo nguyên mẫu không có tham số hình thức mà chỉ có kiểu

int min(int a, int b){ // bây giờ mới cần tham số hình thức

// thân hàm ở đây

}

Một phần của tài liệu Lý thuyết lập trình C++ (Trang 26 - 27)

Tải bản đầy đủ (DOCX)

(78 trang)
w