Khá một câu hỏi mới.Có đúng là tất cả các thư viện c có thể được sử dụng trong C++?
Trả lời
Câu trả lời là có. Hãy xem điều này:
Có. Không có lý do gì bạn không thể sử dụng các thư viện C trong C++. Mọi thứ thay đổi nếu bạn muốn biên dịch C trong trình biên dịch C++. C ABI được hỗ trợ đầy đủ từ C++, tuy nhiên mọi thứ không nhất thiết phải rất gọn gàng từ quan điểm API. Một số bổ sung C như restrict
không có trong tiêu chuẩn C++ và phải được xử lý cẩn thận.
Đánh bại tôi bằng 30 giây với cùng câu trả lời :) –
@ Morgan McK-Graham: Cầu thang dài trong tháp của bạn :) –
Trường hợp cực đoan hơn có thể là một hàm lấy đối số kiểu vla, ví dụ 'int foo (int n, char x [] [n]); '- hy vọng tôi đã đúng. –
Nếu tiêu đề được bảo vệ đúng cách với extern "C" { ... }
, thì có.
Nếu không, bạn có thể tạo tiêu đề của riêng mình hoặc bạn có thể bọc các tiêu đề hiện có. –
Tôi sẽ không gọi đặt 'extern" C "{...}' vào tiêu đề cho mã ngôn ngữ C "đúng", nhưng câu trả lời của Stephen có thể được hiểu là đặt 'extern" C "{...}' xung quanh dòng '# include'. –
@R ..: Tất nhiên, một trong hai bảo vệ 'extern" C "' với '#if được xác định __cplusplus', hoặc kết thúc tốt đẹp bao gồm thay vì tiêu đề chính nó. Nghĩ rằng đó là một cái đã cho. –
Có và không.
Các questionables là ...
Compund literals
số phức Native kiểu dữ liệu
"hạn chế" từ khóa
macro variadic
"long long int" datatype
Một số tính năng từ C được bao gồm trong C++ 0x và một số có sẵn dưới dạng phần mở rộng thư viện trong nhiều trình biên dịch mới hơn cho "bình thường" C++.
Vì vậy, nó phụ thuộc vào mức độ C bạn đang nói, mức tiêu chuẩn C++ và nền tảng nào của trình biên dịch nào khi triển khai trình biên dịch luôn có sự hỗ trợ đa dạng cho các tiêu chuẩn và lỗi.
Và sau đó có các từ khóa được sử dụng trong C++ không được xác định trong C, và do đó có sẵn để được sử dụng làm tên biến trong C nhưng làm cho trình biên dịch C++ bị ném lên. Trong C nó là hoàn toàn hợp pháp để sử dụng những lời sau đây là biến hoặc tên hàm, nhưng họ rõ ràng sẽ làm cho C++ ném một sự phù hợp hissy ...
- mẫu
- mới
- lớp
Oh và "goto" hoạt động khác nhau trong C++ và C. Trong C++ "goto" không thể được sử dụng để nhảy qua khởi tạo của biến, nhưng đó là ok cho C. Cùng đi cho báo cáo chuyển đổi. Trong C bạn có thể viết một câu lệnh switch hoặc một tập hợp các goto mà sẽ không biên dịch trong C++.
Còn gì nữa? "strchr" hoạt động khác nhau trong C so với C++. Trong C nó trả về một con trỏ char. Trong C++, nó trả về một con trỏ char const. Nếu bạn sử dụng đầu ra đó từ strchr một cách nào đó trong C, nó có thể thổi khối trong C++ vì tính chính xác const của C++.
Chức năng nội tuyến được xử lý khác nhau.Trong C chúng được scoped vào tập tin, nhưng trong C + + họ có liên kết bên ngoài theo mặc định.
Mã C++ cần các nguyên mẫu chức năng được xác định bằng extern "C" để gọi đến hàm C.
C++ mangles biểu tượng tên hàm nhưng C thì không.
"Về lý thuyết không có sự khác biệt giữa lý thuyết và thực tiễn Trong thực tế có.." - Yogi Berra
Tại sao một số downvoting? Có phải tôi đã phạm phải sai lầm? – Allbite
Tôi nghĩ rằng ví dụ contrived tôi sẽ cho bạn thấy lý do tại sao nó không phải là luôn luôn có thể:
#ifndef HEADER_H
#define HEADER_H
int class(int a, int b);
int private(int a);
#endif
C hợp lệ hoàn toàn nhưng không được biên dịch trong C++, ngay cả với khối "C" bên ngoài. Theo như tôi biết cách duy nhất để sử dụng một thư viện C như thế là tạo một thư viện C khác gọi các hàm đó và sau đó sử dụng thư viện trình bao bọc đó trong mã C++ của bạn.
Điều đó nói rằng, tôi nghĩ vấp ngã khi một cái gì đó như thế này trong "thế giới thực" là khá hiếm.
Để công bằng, không ai thực sự đặt tên cho các chức năng của chúng như vậy, nhưng điều này chứng minh rằng không phải tất cả các thư viện C đều tương thích. – dreamlax
Nhưng nếu bạn biên dịch nó thành một lib với trình biên dịch c bạn có thể sử dụng thư viện trong C++ - tên mangling sẽ xử lý nó –
@Martin - bạn sẽ sử dụng các hàm đó trong C++ như thế nào? –
- 1. Bạn có thể sử dụng thư viện C++ trong dự án Cocoa (Obj-C) không?
- 2. Tìm tệp trong tất cả các thư mục có thể?
- 3. thư viện c/C++ nào có thể được sử dụng để xử lý các kết nối wifi cho Linux?
- 4. Thư viện SMTP Client được sử dụng và linh hoạt nhất trong C/C++ là gì?
- 5. Nhận tất cả các thư mục trong Thư viện Explorer
- 6. Thư viện điểm chuẩn có thể sử dụng được từ C#
- 7. Có thể liên kết Thư viện tĩnh C++ với thư viện được chia sẻ không?
- 8. Sử dụng thư viện tăng C++?
- 9. Tôi có thể tìm mã nguồn cho tất cả các thư viện chuẩn của C ở đâu?
- 10. Sử dụng thư viện c/C++ sử dụng mạng cho mục tiêu ứng dụng iphone c
- 11. Có thể nhúng Haskell vào thư viện C không?
- 12. Sử dụng thư viện C từ mã C#
- 13. thư viện mp3 C++
- 14. Làm thế nào để sử dụng OpenSSL trong thư viện POCO C++ đúng
- 15. Sử dụng CXXI để bọc các thư viện C++
- 16. Tôi có thể tìm thư viện DNS C++ ở đâu?
- 17. Hướng dẫn thiết kế một C# thư viện cũng có thể sử dụng từ F #
- 18. Có thư viện giống jQuery được viết bằng C# không?
- 19. Sử dụng API thư viện java .jar trong C#?
- 20. Làm thế nào tôi có thể nhận được tất cả các tham chiếu với Reflection + C#
- 21. Cách tìm cách sử dụng phương thức API trong tất cả các thư viện trong classpath?
- 22. C# - Có thư viện toán học nổi 32 bit không?
- 23. Sự khác nhau giữa Thư viện C/C++ và Thư viện STL C++ trong XCode là gì?
- 24. Có thể tạo mô-đun node.js sử dụng thư viện c để kết nối monetdb không?
- 25. Tất cả các tập quán của '@' trong C# là gì?
- 26. là nó có thể sử dụng regex trong c + +?
- 27. Sử dụng C thư viện trong Android trên NDK
- 28. Tôi có thể sử dụng thư viện C# cũ của mình bằng WinJS không?
- 29. Thư viện được chia sẻ C++ được gọi từ C
- 30. bạn có thể sử dụng thư viện trong PL/Perl
Bạn có nghĩa là tiêu đề thư viện C chuẩn hoặc bất kỳ thư viện tùy chỉnh nào được viết bằng C không? Và chúng ta đang nói về phiên bản C nào? Ngoài ra, bạn có một nền tảng trong tâm trí? – Allbite
@Allbite: Tất cả đều không liên quan đến câu hỏi. –
Việc triển khai đó thay đổi theo sự hỗ trợ chính xác của họ đối với tiêu chuẩn C++ và có các phiên bản khác nhau của C và C++ (như trong C99, ANSI, C++ 0x, v.v.), một số làm rõ theo thứ tự. Cụ thể là, bạn có hỏi về các hàm thư viện chuẩn của C hay không, ví dụ: "strcpy", hoặc là bạn có nghĩa là hoàn toàn bất kỳ tùy chỉnh C lib được viết bởi bất cứ ai? – Allbite