Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

So sánh Macro và Function trong C

Ở đây ta xem khác biệt giữa macro và hàm trong C. Macro được tiền xử lý, nghĩa là tất cả macro được xử lý trước khi biên dịch. Hàm không tiền xử lý mà biên dịch trực tiếp.

Macro không kiểm tra kiểu, có thể gây vấn đề với kiểu nhập khác nhau. Hàm thì có kiểm tra kiểu. Nếu đối số macro không đúng, có thể cho kết quả sai.

Ví dụ

#include <stdio.h>

#define SQUARE(x) x * x

int sqr(int x) {
    return x * x;
}

int main() {
    printf("Use of sqr(). The value of sqr(3+2): %d\n", sqr(3+2));
    printf("Use of SQUARE(). The value of SQUARE(3+2): %d", SQUARE(3+2));
    return 0;
}

Kết quả

Use of sqr(). The value of sqr(3+2): 25
Use of SQUARE(). The value of SQUARE(3+2): 11

Hàm và macro mong muốn làm cùng việc, nhưng kết quả khác. Hàm: 3+2=5, 5*5=25. Macro: 3+2*3+2 = 3+6+2=11 (do độ ưu tiên toán tử).

Macro không khuyến khích vì:

  • Không kiểm tra kiểu
  • Khó debug (thay thế đơn giản)
  • Không có namespace
  • Tăng độ dài mã (thêm vào trước khi biên dịch)
  • Không kiểm tra lỗi compile-time