Khác nhau giữa khai báo và định nghĩa

Các bạn có thể giúp mình phân biệt khai báo hàm và định nghĩa hàm dc không?

bạn có thể vào đây :smile: http://www.cprogramming.com/declare_vs_define.html

@david15894 khi nào cần khai báo hàm z bạn sao t thấy nhiều chương trình k khai báo hàm mà vẫn định nghĩa hàm và gọi hàm bình thường . 1 thắc mắc nữa là khi nào cần truyền tham số và khi nào thì k cần?

Bạn chưa hiểu chỗ khai báo(declare) và định nghĩa(define) rồi. Để Đạt giải thích đơn giản thế náy nhé.

Giải thích chung chung:

Khai báo: là giới thiệu sự tồn tại của

  • một biến với kiểu dữ liệu cụ thể
  • một hàm với cấu trúc trả về và tham số nhận vào

Định nghĩa: là trình bày rõ

  • kiểu dữ liệu và giá trị khởi tạo một biến và yêu cầu compiler cấp vùng nhớ cho biến này
  • cấu trúc và nội dung của một hàm (sẽ ví dụ sau)

Giải thích và ví dụ cho biến:

Khai báo biến:

Ta có thể viết như sau, bắt buộc phải có từ khóa extern thì mới gọi là khai báo.

int main()
{
    extern int cu_lac_gion_tan;
}

Vì từ khóa extern cho biết rằng biến này được định nghĩa ở chỗ khác. Có nghĩa compiler không cần phải cấp vùng nhớ cho biến này.

Định nghĩa biến:

Vậy trường hợp ta viết như thông thường hay làm

int main()
{
    int cau_lam_gioi_the = 3;
}

Thì đây là sự kết hợp giữa khai báo và định nghĩa. Ở đây mình có thể hiểu là, tôi khai báo một biến kiểu int có tên là cau_lam_gioi_the và xin compiler cấp cho nó một vùng nhớ, cho vùng nhớ đó gía trị 3.

Nếu mình không gán gía trị cho biến cau_lam_gioi_the thì compiler sẽ không gán gía trị gì vào vùng nhớ đã tạo cho biến này. Khi đó mình sẽ có một gía trị rác tại vùng nhớ đó.

Giải thích và ví dụ cho hàm:

Hàm thì đơn giản hơn nhiều

Đây là một khai báo

bool daynhauhoc_good(int member_num, int member_iq);

Đây là một định nghĩa

bool daynhauhoc_good(int member_num, int member_iq) 
{
    // actually I don't care about the arguments lol
    return true;
}

Giải thích và ví dụ cho class:

Đây là một khai báo

class DayNhauHoc();

Đây là một định nghĩa

class DayNhauHoc()
{
    public:
        DayNhauHoc() {}
}
3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?