Gọi C++ từ C

Goi C Tu C



Trong lập trình, thường cần C và C++ hoạt động cùng nhau, điển hình là khi cập nhật mã cũ hoặc kết hợp các mô-đun bằng nhiều ngôn ngữ khác nhau. Việc sử dụng mã C++ trong chương trình C rất hữu ích cho người lập trình, đặc biệt khi cập nhật một phần mềm cũ hoặc trộn các phần được viết bằng cả hai ngôn ngữ. Hướng dẫn này sẽ chỉ cho bạn cách làm cho các hàm C++ hoạt động với C bằng các ví dụ đơn giản và hữu ích. Việc gọi C++ từ một chương trình C có vẻ phức tạp, nhưng bài viết này giải thích mọi thứ từng bước một, vì vậy thật dễ dàng để làm theo và bắt đầu sử dụng hai ngôn ngữ cùng nhau. Hướng dẫn này hữu ích cho các dự án của bạn bất kể trình độ kiến ​​thức lập trình của bạn như thế nào.

Hiểu những điều cơ bản

Khi nói đến việc gọi các hàm C++ từ C và sử dụng các đối tượng C++, một số yếu tố chính cần được xem xét:

Tham khảo các lớp C++ trong C

Một cách tiếp cận phổ biến để tham chiếu các lớp C++ trong C liên quan đến việc sử dụng các con trỏ tới các lớp có thể được truyền giữa mã C và C++.







Tên Mangle

Để ngăn việc thay đổi tên có thể ảnh hưởng đến khả năng nhận dạng trong C, điều quan trọng là phải giữ các tên nhất quán. Điều này đảm bảo rằng C có thể xác định và sử dụng chính xác các chức năng và đối tượng.



Tệp tiêu đề cho mục đích kép

Tệp tiêu đề đóng vai trò then chốt, phục vụ mục đích kép cho cả C và C++. Nó bao gồm các định nghĩa lớp mà C++ có thể nhận ra và đóng gói các hàm truy cập cho C.



Cách gọi C++ từ C

Để gọi các hàm C++ từ C, việc khai báo “C” bên ngoài là rất quan trọng. Khi áp dụng cho các hàm C++, nó đảm bảo rằng tên hàm được xử lý theo kiểu C (sử dụng liên kết C) trong quá trình biên dịch. C không nhận ra các tính năng của C++ như nạp chồng hàm và xáo trộn tên có thể xảy ra trong quá trình biên dịch C++. Bằng cách sử dụng “C” bên ngoài, trình biên dịch C++ sẽ tạo ra các tên hàm tuân thủ các quy ước C, cho phép khả năng tương tác liền mạch. Tuyên bố này cung cấp một giao diện được tiêu chuẩn hóa, cho phép mã C truy cập và sử dụng các hàm C++ mà không gặp phải xung đột đặt tên hoặc các vấn đề tương thích. Sau đây là các ví dụ về cách gọi C++ từ C. Để hiểu cách kết hợp này hoạt động, chúng ta hãy xem xét kỹ hơn các trường hợp.





Ví dụ thực tế: Tính diện tích hình tròn bằng cách gọi C++ từ C

Trong ví dụ đơn giản này, chúng tôi sẽ hướng dẫn bạn cách tính diện tích hình tròn bằng cách gọi hàm C++ trong C. Mã này bao gồm tệp tiêu đề (circle.h) và tệp triển khai (circle.cpp). Phần đầu tiên của mã liên quan đến khai báo C bên ngoài trong tệp tiêu đề. Xem đoạn mã sau. Sau đó, hãy giải thích chi tiết từng dòng mã:

#ifndef CIRCLE_AREA
#xác định CIRCLE_AREA

bên ngoài 'C' {

gấp đôi tính_CAdiện tích ( gấp đôi rad ) ;

}

#endif

gấp đôi Circle_CAkhu vực ( gấp đôi rad ) {

trở lại 3.14159 * rad * rad ;

}

Hãy chia nhỏ từng phần:



#ifndef CIRCLE_AREA và #define CIRCLE_AREA

Những dòng này là một phần của bộ bảo vệ bao gồm để đảm bảo rằng nội dung của tệp tiêu đề chỉ được đưa vào một lần trong quá trình biên dịch. Nếu CIRCLE_AREA không được xác định, mã tiếp theo sẽ được bao gồm và CIRCLE_AREA sẽ được xác định.

bên ngoài 'C'

Cú pháp này được sử dụng để khai báo rằng hàm sau có liên kết C. Điều này rất cần thiết khi viết mã sẽ được gọi từ cả C và C++.

gấp đôi tính_CAdiện tích ( gấp đôi rad ) ;

Dòng này khai báo một hàm có tên là “Calculate_Carea” nhận một đối số kép (rad) và trả về một đối số kép.

Khai báo “C” bên ngoài trong tệp tiêu đề sẽ thông báo cho trình biên dịch sử dụng liên kết kiểu C cho hàm, làm cho nó có thể gọi được từ mã C. Sử dụng mã này để tìm diện tích hình tròn bằng cách lưu nó vào tệp “circle.h”. Khi bạn lưu tệp tiêu đề này, tất cả những gì bạn cần làm là đưa tệp này làm tệp tiêu đề trong chương trình C++ và thực hiện chức năng mong muốn. Sau đây là mã C tính diện tích hình tròn. Tệp “main.c” bao gồm tiêu đề C++ và gọi trực tiếp “Circle_Carea”. Xem đoạn mã sau:

#include 'vòng tròn.h'

int chủ yếu ( ) {

gấp đôi rad = 5.0 ;

gấp đôi khu vực = Circle_CAkhu vực ( rad ) ;

printf ( 'Diện tích của hình tròn là:  %.2f \N ' , khu vực ) ;

trở lại 0 ;

}

Chương trình C đơn giản này tính toán và in diện tích hình tròn bằng cách sử dụng hàm được xác định trong tệp trước đó có tên “circle.h”. Hãy chia nhỏ mã:

#include 'vòng tròn.h'

Dòng này bao gồm nội dung của tệp tiêu đề “circle.h” trong chương trình. Tệp tiêu đề có thể chứa các khai báo hàm hoặc macro có liên quan đến tính toán vòng tròn.

int chủ yếu ( ) {

Việc thực thi chương trình bắt đầu với hàm main, điểm vào của chương trình C.

gấp đôi rad = 5.0 ;

Một biến rads kiểu double được khai báo và gán giá trị là 5,0. Biến này có thể đại diện cho bán kính của vòng tròn.

gấp đôi khu vực = Circle_CAkhu vực ( rad ) ;

Một hàm có tên “Circle_Carea” được gọi với bán kính rads làm đối số và kết quả được lưu trữ trong vùng biến.

printf ( 'Diện tích hình tròn là: %.2f \N ' , khu vực ) ;

Kết quả được in ra bàn điều khiển bằng cách sử dụng “printf”. Chuỗi “Diện tích hình tròn là: %.2f\n” là chuỗi định dạng có phần giữ chỗ “%f” cho giá trị diện tích. “.2” trong “%.2f” chỉ định rằng chỉ được hiển thị hai chữ số thập phân.

trở lại 0 ;

Hàm chính kết thúc bằng cách trả về 0, biểu thị việc thực thi chương trình thành công đối với hệ điều hành.

Tóm lại, tệp tiêu đề khai báo một hàm có liên kết C và tệp triển khai xác định logic để tính diện tích hình tròn. Sự tách biệt này cho phép mã được sử dụng trong cả chương trình C và C++. Tham khảo đầu ra của mã được đưa ra trong hình ảnh sau:

Như bạn có thể thấy ở kết quả đầu ra, diện tích được tính toán của hình tròn là 78,54, tức là diện tích tính toán = 3,14*5*5 = 78,54. Hàm tính diện tích được xác định trong tệp tiêu đề “circle.h”, sau đó được gọi trong tệp C++ với sự trợ giúp của extern “C”.

Phần kết luận

Chúng tôi đã hướng dẫn bạn quy trình tích hợp C++ vào các chương trình C của bạn trong hướng dẫn này. Việc tích hợp chức năng C++ vào cơ sở mã C đòi hỏi phải xem xét cẩn thận các con trỏ, xáo trộn tên và các tệp tiêu đề có mục đích kép. Các ví dụ được cung cấp minh họa một cách tiếp cận thực tế để đạt được sự tích hợp này. Bây giờ bạn đã biết cách kết nối hai ngôn ngữ lập trình này, bạn có nhiều công cụ hơn. Khai thác sức mạnh của C++ khi làm việc với C có thể mang lại cho dự án của bạn một cấp độ chức năng hoàn toàn mới.