Thắc mắc về chia file mã nguồn trong c++

Em đang học đến phần chia file mã nguồn thành file .h và file .cpp, mà có 1 số thắc mắc nghĩ mãi không thông :slight_smile:

  • Em hiểu include là chuyển nội dung của file này vào file khác.

Giả sử có 3 file: test.h, test.cpp, main.cpp theo lý thuyết thì

  • File test.cpp được include “test.h”
    => Lúc này file test.cpp có đầy đủ nguyên mẫu và định nghĩa cho các hàm. Vậy tại sao ta không include file test.cpp vào file main.cpp mà lại include test.h ?

  • Còn khi include “test.h” vào main.cpp thì theo em hiểu là chuyển các nguyên mẫu hàm vào file main.cpp vậy các hàm này biết phần định nghĩa của nó ở đâu mà tham chiếu đến ? File test.h có include file test.cpp vào bên dưới của nó đâu.

Em cảm ơn!

  1. Các hàm có trong file .cpp thì là file cài đặt, những hàm nằm trong file .cpp mà k nằm trong file .h thì khi include file .h sẽ k gọi đc các hàm đó. Đơn giản như tên gọi đó, .h là header chỉ để thông báo về các hàm, structure, constant mà nó cung cấp mà k cần biết chi tiết cài đặt, giúp cho việc dùng dễ hơn.
  2. Việc khai báo file .h mà vẫn gọi đc hàm đó thì mình nhớ k nhầm thì sẽ nằm ở quá trình link. Các file .c sẽ đc build ra file .o ở main.o nó có tham chiếu đến test.o qua header. Linking sẽ link các file .o lại với nhau.
3 Likes

Hi Phạm Cường.

  1. Bạn tìm trên diễn đàn có bài về chia file rồi link. Cơ bản việc chia file ra giống như chia sách toán thành toán lớp 1, lớp 2, lớp 3. Bạn sửa file nào thì chỉ cần biên dịch lại file đó rồi ghép lại (học lớp nào thì mang sách lớp đó). Nếu bạn include file .cpp thì nó sẽ copy toàn bộ nội dung file vào khi đó thì biên dịch bạn lại phải biên dịch lại toàn bộ (như bạn cho hết bộ sách toán các lớp vào cặp vậy.)
  2. Khi biên dịch một phần thì vấn đề đặt ra là làm sao kiểm tra code viết đúng cú pháp ? Cách giải quyết là dùng nguyên mẫu hàm. Giống việc khi xem thời khóa biểu có môn toán thì bạn biết là lấy sách bìa là toán không cần thiết phải mở ra xem trong đó viết gì.
2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?