其他分享
首页 > 其他分享> > C使用较新编译器的功能生成供旧编译器使用的代码

C使用较新编译器的功能生成供旧编译器使用的代码

作者:互联网

我一直在研究“新的”C标准(C 11和C 14)的一些特性,这让我想到了什么.我目前正在为我的项目使用VC 2008编译器(出于各种原因),这意味着我可以访问的最新标准是C 03,加上TR1. TR1有一些不错的东西,但C 11和C 14中的功能很不错.

我的问题是:是否有任何方法可以使用较新的编译器(比如MSVC2012或2013)使用较新的C 11和C 14功能构建库或DLL,然后将其链接到运行’08编译器?

我能想到的唯一不起作用的是我必须在我的’08编译器项目包含的头中具有C 11或C 14特性的任何地方.但是,只要所有“新”都隐藏在我的界面后面,这不应该起作用吗?

解决方法:

是的,但它会变得丑陋..因为ABI不兼容你必须下到“extern”C“{}”ABIness.

这意味着你根本无法传递C对象……就像我说的那样痛苦.它还意味着它必须是一个DLL,因为您将无法在静态库中与另一个ABI链接.

如果它值得在C API中包装一个DLL只是为了使用一些新功能,那么由我决定,我建议只升级整个项目.

我差点忘了,你可能也无法链接导入库,所以你必须有一些使用LoadLibrary,GetProcAddress和FreeLibrary的代码(我提到这是丑陋/痛苦吗?).

标签:c,c11,c14,visual-c,c03
来源: https://codeday.me/bug/20190728/1560128.html