在C ++中实现C库函数

时间:2011-10-14 16:56:16

标签: c++ c windows visual-studio

在C ++中实现C库有什么缺点?该库将用于使用Visual Studio 2008或更高版本为常规PC构建Windows应用程序。目前尚不清楚为什么规范声明它应该是C库。我猜他们想要的是普通的C-API,而不是纯粹的C lib。但我的老板不同意。

无论如何,我想做的是extern "C"所有函数声明并在实现文件中使用C ++。我做了一些测试,即使将应用程序编译为C(通过在Visual Studio中更改项目选项),一切都运行正常。

3 个答案:

答案 0 :(得分:2)

我见过人们这样做,比如说,将STL集合暴露给C程序。如果您确定该库仅用于具有理智的C / C ++编译器的环境(例如,仅限VS和gcc),我认为从技术角度来看这是一件非常安全的事情。 ñ 这听起来你在这里有一些外部要求,但显然我们无法对此发表评论。使用需求源进行双重检查可能会更糟糕吗?

更新:哦,我应该提一下,它会影响你的库需要的DLL。与C ++运行时一样,除了CRT之外还需要加载DLL。

答案 1 :(得分:0)

extern c一直用于将一些功能从c转移到c ++。例如,new运算符inturn从std c调用malloc()。这是c库被赋予c ++外观的一个很好的例子。 new运算符使分配内存变得更加容易,除此之外,它还允许运算符重载等许多功能,这在c中是不可用的。我的猜测是添加更多功能并制作整洁的界面。

如果你正在考虑disadvatanges,那么它可能是相关的编译器特定问题,其中为c ++程序生成的ABL与C的程序不同,如果编译器无法区分这两者,那么你就可以解决它。 / p>

我不确定这是否是您所寻求的,如果不是尝试此链接,它可能会有所帮助。

http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=180

答案 2 :(得分:0)

如果他们要将它用于C程序,即main()函数是由C编译器编译的,那么你必须非常小心地使用C ++库。问题是c程序不会为静态变量执行任何构造函数。所以你必须省略构造函数的任何静态变量的用法。这对于您的库本身来说很容易,但是如果它依赖于静态初始化变量的存在(例如std::coutstd::cin等),则必须检查对库C ++函数的每次调用。