加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C 03库与C 11源代码

发布时间:2020-12-16 05:29:14 所属栏目:百科 来源:网络整理
导读:如果我有C 03编写的库,并将其编译到静态库中,那么可以在C 11中使用它吗?也是相反的(C 11静态库与C 03). 更新: 我使用的编译器是clang或LLVM 解决方法 它主要取决于您如何在库中使用C标准库. 如果你根本不使用它,那么你不太可能会遇到任何问题. 如果使用lib
如果我有C 03编写的库,并将其编译到静态库中,那么可以在C 11中使用它吗?也是相反的(C 11静态库与C 03).

更新:
我使用的编译器是clang或LLVM

解决方法

它主要取决于您如何在库中使用C标准库.

>如果你根本不使用它,那么你不太可能会遇到任何问题.
>如果使用libstdc,可能会遇到一些问题:

>将标准库对象传递到库或从库传递标准库对象将不会始终工作(例如,C 11模式中的std :: list最终会比C 98模式中的更大,因为它正在增加大小数据成员,而std :: string的表示正在更改为非引用计数). g开发人员有计划在链接时引入一种符号污点的形式来捕捉这些问题,所以如果遇到任何有问题的案例,您将收到错误,但是这还没有在g中实现,并且可能永远不会实现铛.您可以通过确保库的界面不涉及标准库类型来避免此问题.
>某些符号可能会改变意义(例如,std :: complex :: real和std :: complex :: imag在C 98模式下的返回引用,但是由于constexpr的缺陷,在C 11模式下返回值).如果使用C 98和C 11表单链接(未优化)代码,则可能会选择错误的实现,并在运行时产生奇怪的结果.

>如果你使用libc,你不应该看到任何问题. libc被设计为在C 98和C 11模式之间是二进制兼容的.>如果您在程序中使用库中的libc和libstdc,反之亦然,则大多数不兼容性将在链接时被捕获. (libc使用命名空间std中的内联命名空间,其中包含大部分符号,如果您尝试跨越边界传递libstdc的类型,则会导致链接时间不兼容).但是,如果库的接口间接包含标准库类型(例如,如果使用具有标准库类型的结构作为成员),则可能仍然存在运行时问题.对于libc不是版本的类型,它的目标是与libstdc(C 98和C 11模式)二进制兼容.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读