Menu
CoddyTech

Tệp mã nguồn

Thuộc phần Lập trình hướng đối tượng trong hành trình C của Coddy. Bài học 3 trên 61.

Cho đến nay, chúng ta đã đặt các khai báo hàm trong tệp header, nhưng phần code hàm thực tế (định nghĩa) vẫn nằm trong tệp chính. Bước tiếp theo trong lập trình mô-đun là chuyển các định nghĩa đó vào tệp mã nguồn (tệp .c).

Cách này tạo ra cấu trúc gọn gàng gồm ba phần: tệp header khai báo các hàm, một tệp mã nguồn riêng định nghĩa chúng, còn main chỉ cần sử dụng chúng. Cấu trúc này trông như sau:

// math_utils.h
#ifndef MATH_UTILS_H
#define MATH_UTILS_H

int add(int a, int b);

#endif
// math_utils.c
#include "math_utils.h"

int add(int a, int b) {
    return a + b;
}
// main.c
#include <stdio.h>
#include "math_utils.h"

int main() {
    printf("%d\n", add(5, 3));
    return 0;
}

Lưu ý rằng math_utils.c có đưa tệp tiêu đề của chính nó vào. Điều này đảm bảo phần định nghĩa hàm khớp với phần khai báo. Nếu hai phần không khớp, trình biên dịch sẽ phát hiện lỗi. Tệp chính chỉ cần đưa tệp tiêu đề vào để sử dụng hàm, không cần biết add hoạt động bên trong như thế nào.

Cách tách riêng này giúp ẩn các chi tiết triển khai và cho phép bạn thay đổi logic của hàm mà không cần chỉnh sửa các tệp sử dụng những hàm đó.

challenge icon

Thử thách

Dễ

Hãy xây dựng một tiện ích toán học đơn giản bằng cách sắp xếp code theo cấu trúc ba tệp phù hợp: một tệp header để khai báo, một tệp nguồn để định nghĩa và một tệp main để sử dụng chúng.

Bạn sẽ tạo ba tệp:

  • math_ops.h: Tệp header chứa các khai báo hàm cho hai phép toán: multiply và subtract. Cả hai hàm nhận hai số nguyên và trả về một số nguyên. Đừng quên thêm các chỉ thị bảo vệ header bằng ký hiệu MATH_OPS_H.
  • math_ops.c: Tệp nguồn chứa phần định nghĩa thực tế của multiply và subtract. Tệp này cần include header của chính nó để bảo đảm các khai báo khớp với phần định nghĩa.
  • main.c: Tệp main include header và sử dụng cả hai hàm để thực hiện phép tính.

Hàm multiply cần trả về tích của hai số nguyên, còn subtract cần trả về hiệu của số nguyên thứ nhất trừ số nguyên thứ hai.

Bạn sẽ nhận hai đầu vào kiểu số nguyên: a và b.

Trong hàm main, hãy in kết quả của cả hai phép toán trên các dòng riêng:

Product: {result of multiply}
Difference: {result of subtract}

Ví dụ, với đầu vào là 8 và 3, đầu ra sẽ là:

Product: 24
Difference: 5

Tự làm thử

#include <stdio.h>
#include "math_ops.h"

int main() {
    int a, b;
    scanf("%d", &a);
    scanf("%d", &b);
    
    // TODO: Gọi hàm (function) multiply với a và b, lưu kết quả
    
    // TODO: Gọi hàm subtract với a và b, lưu kết quả
    
    // TODO: In kết quả theo định dạng:
    // Product: {kết quả của multiply}
    // Difference: {kết quả của subtract}
    
    return 0;
}
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Lập trình hướng đối tượng

Tự luyện tập: Trình biên dịch C online