繁体   English   中英

使用C ++库

[英]Using C++ libraries

我们整个项目的开发都在C中进行。但是,这里到处都有很多字符串操作,我们需要多加注意..我们最终在字符串操作中遇到了编码错误,并且大多数情况下这导致缓冲区溢出..stack损坏等由于程序员的错误。

仅使用C ++字符串类的想法有多好? 因此,仅在我们的项目中介绍使用字符串库的CPP就是一个好主意吗? 这会对性能产生影响吗? 还是不好

请提供您的意见。

为什么不能只使用string.h中的函数?

您是否考虑过用C语言编写一个简单的字符串库,并在需要时进行扩展? 这样,即使您没有立即得到正确的解决,您(不同的开发人员)也不会一遍又一遍地犯同样的错误。

或者,您可以仅使C字符串库成为C ++标准库字符串类的包装。

关于C ++(主要是C的超集)的历史,最令人高兴的事情之一就是您可以按照自己的建议轻松使用它。 您将遇到的最大问题是malloc / free与new / delete。

继续尝试一下,您没有损失。

C ++的设计主要是向后兼容的,因此将C项目切换到C ++通常相当容易。 (改变思维方式和编程习惯是另外一回事。)

需要注意的主要事情是:

  • 如果C代码具有任何声明为return_type f()的函数(无参数列表),但这些函数确实具有参数,则需要对其进行修复。 在C语言中, f()表示我不告诉参数类型是什么。 在C ++中, f()声明中的是一样的f(void)
  • 您必须使用C ++编译器编译main() C ++允许在main之前和之后发生一些事情,这可以确保确实发生,正如您的C ++库可能期望的那样。
  • 如果某些部分仍将使用C编译器进行编译,而仅部分部分将使用C ++编译器进行编译,请确保您了解extern "C"规则

在其他一些挑剔的差异中,C和C ++的行为也有所不同,但是它们并不经常引起问题。

开始混用某些C ++是否值得,取决于您和您的团队。

以我的经验,即使编译器升级也经常以意想不到的方式破坏代码。 此更改是语言更改。 这是一个重大变化。 不引入大量错误的可能性是多少,开发人员可能很难发现其中的许多错误(但对客户而言却很容易)。

另外,我猜测您使用C而不是C ++的主要原因是团队经验。 上世纪90年代,我们学会了一种艰难的方法,即将OO和结构化范式混合在一起会比坚持一个或另一个范式引起更多的问题。 如果您的团队没有使用C ++的经验,那么他们会在最不合适和最容易引起错误的地方混在一起。

我可以肯定地说,改用C ++编译器会产生巨大的负面影响。 从长远来看,您可能会有所收获,但这可能需要数年的时间。

最好的选择是编写一个字符串库(用C语言编写),以帮助解决您遇到的问题。 然后,强制您的开发人员使用该库。 您是否考虑过使用替代安全版本的功能,例如snprintf,strncpy等...,如果您的编译器尚不具备这些功能,请使用该接口并编写自己的接口。

如果您真的想使用C ++,请在下一个项目中使用它。 同时,列出此项目的问题清单,以便您可以向管理层推销C ++是比下一个项目更好的方法。 除非您在编写设备驱动程序或数学算法,否则这应该很容易做到。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM