Giải thích sự khác nhau giữa khai báo và định nghĩa trong C/C++

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/class (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ớ (đây là định nghĩa). = 3 tức là sau khi cấp vùng nhớ thì 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() {}
}
14 Likes

This topic was automatically closed 100 days after the last reply. New replies are no longer allowed.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?