In linux, if i were to write a lib that used c++ in the lib, but the function that were used to interface with lib were standard c, would i be able to use the lib from a c program?
Printable View
In linux, if i were to write a lib that used c++ in the lib, but the function that were used to interface with lib were standard c, would i be able to use the lib from a c program?
I don't think you can use any exported classes, but if you export functions with extern "C" I think they will be usable in C. If not, then a DLL will work for sure.
As long as the functionsQuote:
Originally posted by theBUSH
In linux, if i were to write a lib that used c++ in the lib, but the function that were used to interface with lib were standard c, would i be able to use the lib from a c program?
a) are "extern C functions" and
b) The arguments to the functions are not references or C++ types
then you won't have a problem calling it from 'C' code.
For a), it doesn't matter what the function does internally or what language it was coded in. As long as the function name is a 'C' function name (not a C++ mangled name), then it can be called from a 'C' program. I have many libraries whose internals are C++, but the function interface is 'C'.
You accomplish this by making the function extern "C". A lot of people believe that this means the function is a 'C' function -- this is not true. All "extern C" does is allow it to have 'C' linkage, which makes the function callable from a 'C' module. The function that is "extern "C" can use as much C++ as you feel like.
As for the arguments, you cannot use reference types in a 'C' function interface, or C++ types (such as std::string, std::vector, etc.).
Regards,
Paul McKenzie