Search…

Inline Functions Trong C++

17/09/20203 min read
Tìm hiểu về về Inline function (hàm nội tuyến) trong ngôn ngữ lập trình C/C++.

inline là gì? Tại sao phải dùng inline? inline sử dụng như thế nào?

Inline functions là gì?

Inline function (hàm nội tuyến) là một loại hàm trong ngôn ngữ lập trình C/C++. Với việc sử dụng từ khoá inline, hàm này được sử dụng để đề nghị (không phải là bắt buộc) với compiler (trình biên dịch) thực hiện inline expansion (khai triển nội tuyến) với hàm đó hay nói cách khác là chèn code của hàm đó tại địa chỉ mà nó được gọi.

Cách sử dụng inline functions?

Nếu muốn sử dụng inline functions, chỉ cần đặt từ khoá inline ở trước một hàm bình thường lúc khai báo hoặc ở dòng đầu tiên của hàm lúc định nghĩa. Khi sử dụng cứ gọi nó ra như gọi một hàm bình thường.

Ví dụ:

#include <iostream>
using namespace std;

// Cach khai bao 1
// inline void foo();
// void foo ( )
// {
//    cout<< “Welcome to stdio.vn”;
// }

// Cach khai bao 2
inline void foo ( )
{
    cout<< “Welcome to stdio.vn”;
}

int main ( )
{
    // Cach su dung
    foo( );
    return 0;
}

Những vấn đề cần lưu ý khi dùng inline functions

Inline functions có ích trong việc tiết kiệm thời gian, tuy nhiên nếu sử dụng với các hàm có kích thước lớn có thể làm cho chương trình chạy chậm hơn. Do đó chỉ nên sử dụng inline với các chương trình nhỏ được gọi ra thường xuyên.

Trình biên dịch đôi khi có thể bỏ qua inline functions trong một số trường hợp như:

  • Inline functions không được khai báo prototype (nguyên mẫu) nhưng lại đặt sau hàm main. Điều này sẽ bị gây lỗi trong quá trình compiler.
  • Nếu inline đã được đặt trước prototype thì không được đặt ở định nghĩa hàm, làm như thế sẽ dẫn đến chương trình lặp vô hạn.
  • Hàm có chứa các biến static, các lệnh chu trình, lệnh goto, lệnh switch, hàm đệ quy chắc chắn từ khoá inline sẽ bị bỏ qua.

Mặt thuận lợi của inlines functions so với macro definition directives

inline functions cũng tương tự như macro definition directives vì code của hàm đều được inline expansion. Tuy nhiên, inline functions được compiler khai triển, trong khi đó các macro lại được khai triển bằng preprocessor (tức chỉ thị tiền xử lí, các bạn có thể tìm hiểu thêm về nó ở bài viết Preprocessor và #include Directive). Kết quả là có một số khác biệt quan trọng đã diễn ra làm cho macro definition directives không nên là lựa chọn đầu tiên cho người dùng. Những khác biệt đó là:

  • Trong quá trình khai triển, macro có thể gây ra những hậu quả kèm theo mà bạn không mong muốn, vì những thể hiện của macro được sao chép vào bất cứ nơi nào mà chúng xuất hiện trong chương trình.
  • Macro không an toàn vì nó có thể mở rộng bất kể là cú pháp có chính xác hay không, trong khi inline functions lại thực hiện kiểm tra điều này.
  • Macro linh hoạt và phức tạp hơn trong việc biểu diễn các cấu trúc, thậm chí có khi là không thể biểu diễn được. Trong khi đó, inline functions sử dụng dễ dàng và quen thuộc như một hàm bình thường.
  • Inline functions có thể cung cấp phạm vi cho các biến còn macro chỉ có thể làm điều này trong khối mã {…}.
  • Lỗi biên dịch của các macro thường là các lỗi trong phần code đã được khai triển nên sẽ gây khó khăn cho các lập trình viên trong quá trình sửa lỗi.
IO Stream

IO Stream Co., Ltd

30 Trinh Dinh Thao, Hoa Thanh ward, Tan Phu district, Ho Chi Minh city, Vietnam
+84 28 22 00 11 12
developer@iostream.co

383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024