Tôi có một thư viện C ++ cung cấp nhiều lớp khác nhau để quản lý dữ liệu. Tôi có mã nguồn cho thư viện.
Tôi muốn mở rộng API C ++ để hỗ trợ các lệnh gọi hàm C để thư viện có thể được sử dụng với mã C và mã C ++ cùng một lúc.
Tôi đang sử dụng chuỗi công cụ GNU (gcc, glibc, v.v.), vì vậy hỗ trợ ngôn ngữ và kiến trúc không phải là vấn đề.
Có bất kỳ lý do tại sao điều này là không thể về mặt kỹ thuật ?
Có bất kỳ của Gotcha mà tôi cần phải xem ra cho?
Có tài nguyên, mã ví dụ và / hoặc tài liệu về điều này không?
Một số điều khác mà tôi đã tìm ra:
- Sử dụng phần sau để bao bọc các tiêu đề C ++ của bạn cần được mã C sử dụng.
#ifdef __cplusplus
extern "C" {
#endif
//
// Code goes here ...
//
#ifdef __cplusplus
} // extern "C"
#endif
- Giữ các giao diện C ++ "thực" trong các tệp tiêu đề riêng biệt mà C. Hãy suy nghĩ nguyên tắc PIMPL ở đây. Sử dụng
#ifndef __cplusplus #error
công cụ giúp ở đây để phát hiện bất kỳ sự điên rồ nào. - Cẩn thận với các định danh C ++ làm tên trong mã C
- Enums có kích thước khác nhau giữa các trình biên dịch C và C ++. Có lẽ không phải là vấn đề nếu bạn đang sử dụng chuỗi công cụ GNU, nhưng hãy cẩn thận.
Đối với các cấu trúc theo mẫu sau để C không bị nhầm lẫn.
typedef struct X { ... } X
Sau đó, sử dụng con trỏ để truyền xung quanh các đối tượng C ++, chúng chỉ cần được khai báo trong C là struct X trong đó X là đối tượng C ++.
Tất cả những điều này là nhờ sự hỗ trợ của một người bạn là thuật sĩ về C ++.