Vì vậy trong bài này mình sẽ hướng dẫn anh em cách để có thể dùng được C library trong C++.
Giả sử chúng ta có có file header Sample.h như sau →
Bạn đang đọc: Sử dụng C library trong C++ | CppDeveloper
1 |
voiddoSomething(); |
Vì vậy trong bài này mình sẽ hướng dẫn đồng đội cách để hoàn toàn có thể dùng được C library trong C + +. Giả sử tất cả chúng ta có có file header Sample. h như sau →Chúng ta có khai báo của một hàm có tên là doSomething, hàm này được implement trong file Sample. c như sau →
1234567 |
# include ” Sample. h “
#include voiddoSomething() { printf(” doSomething “); } |
#include
như sau →
1234567 |
# include ” Sample. h “ intmain() { doSomething(); return 0 ; } |
1 |
errorLNK2019:unresolvedexternalsymbol” void __cdecl doSomething ( void ) “(?doSomething@@YAXXZ)referencedinfunction_main |
Tiếp tục, tất cả chúng ta có 1 chương trình C + + với file main.cpp cónhư sau → Build chương trình này sẽ xảy ra lỗi compile kiểu như sau ( bên dưới là ví dụ build trên VS2015 ) →Nguyên nhân ở đây là ở quá trình linking những object với nhau thì compiler đang hiểu hàm doSomething là hàm C + + và tìm kiếm hàm này, mặc dầu hàm này có trong file object Sample. o tuy nhiên do Sample. c có đuôi. c nên nó được compiler biên dịch theo C convention. Trong khi đó compiler cứ mải tìm kiếm hàm doSomething theo C + + convention, tác dụng là compiler tìm không ra dẫn đến lỗi linking .
Để giải quyết vấn đề này thì chúng ta cần thêm extern
“C”
vào header file như sau →
123456789 |
# ifdef __cplusplus extern” C “{ # endif voiddoSomething(); # ifdef __cplusplus }/ * end of ” extern C ” block * / # endif |
extern “C”, nhờ đó compiler sẽ hiểu rằng doSomething là hàm C. Done ! Mọi chuyện đã được giải quyết êm.
Để xử lý yếu tố này thì tất cả chúng ta cần thêmBây giờ khi Sample. h được include vào trong file C + + thì nó sẽ được đặt trong block, nhờ đó compiler sẽ hiểu rằng doSomething là hàm C. Done ! Mọi chuyện đã được xử lý êm .— Phạm Minh Tuấn ( Shun ) —
Source: https://final-blade.com
Category: Kiến thức Internet