Sự khác nhau giữa inline và macro trong C là gì?

Hello các bác, e lang thang tự dưng gặp được câu hỏi này nên search GG nhưng đọc mãi mà k hiểu.
Những thứ e đọc được và hiểu thì là:

  1. Inline function sẽ báo cho compiler biết rằng hàm đó được đánh dấu là inline, nó sẽ xem xét việc import trực tiếp code của hàm đó vào vị trí của lời gọi hàm. giúp tránh việc push pop stack khi gọi các hàm này.
  2. Không phải lúc nào inline cũng được compiler thực hiện.
  3. có 2 loại inline : static inline và extern inline. (nhưng e chưa biết sự khác nhau giữa nó).
  4. Macro được thực hiện tại thời điểm tiền xử lý (pre-processor) .

Mong các pro ai biết trả lời giúp e để e được thông não ạ. Thanks all.

2 Likes

Hi Trọng Dũng.
Bạn xem thêm về tiền biên dịch. Macro được thực hiện tại thời điểm tiền xử lý, nó sẽ thay thế macro bằng chỗi được định nghĩa. (Copy code ghi đè vào.)

Macro là phần riêng rẽ với C và có thể được dùng để search + replace text trong source code trước khi được đưa vào compiler để dịch, còn inline là keyword của ngôn ngữ, semantics của nó chặt chẽ hơn.

Việc dùng macro thực ra chỉ là Ctrl + V body của hàm đó lúc biên dịch, nếu bạn có biến a trong macro thì khi nó copy + paste vào đâu đó thì biến a cũng có ở đó, và nếu bạn có 1 biến a trước đó đã được định nghĩa thì biến a đó của bạn sẽ bị che (shadow). Có thể dùng scope để che lại do { ... } \, nhưng đó là hack.

Inline thì an toàn hơn vì bạn có type safety, và vì nó cũng đưa function vào chỗ gọi lúc được gọi nhưng không phải kiểu copy + paste cả cục.

extern với static inline thì cũng hệt như extern với static nhưng nó là inline thôi.

2 Likes

https://gcc.gnu.org/onlinedocs/gcc-4.0.4/gcc/Function-Attributes.html

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