前几天一位网友咨询如何用C++中调用CBrother,我发了Demo给他,结果他一直告诉我有问题,远程调试了下,发现他在Winows下用的编译器是MinGW,而我发布CBrother的windows版本使用的是VS,结果发现MinGW和VS在对于同名虚接的重载实现不同,调用错了接口地址导致了崩溃。如此看来,C++的ABI真是一件让人头疼的事情。
这些年来,C++组委会不停的更新C++特性和语法,把C++搞的花里胡哨的,也没说把ABI的实现在各个平台上统一一下。
C++尚且如此,Rust和新出的Carbon还声称要替代C++,不知道是谁给的勇气。我一直理解一门编程语言的存在指的是这门语言的语法,而不应该是对应的某一套代码。比如说老牌的C和C++其语法深入人心,就会有不同的人按照标准去实现不同的编译器。假设某一天世界上所有语言的编译器和解释器代码都丢失了,我相信C语言一定会有人写出新的编译器,并兼容之前历史上的所有二进制文件接口,那么这些所谓的要替代老前辈的新语言会有人为它们重写吗?就算写,又如何兼容以前编译器编译的二进制文件接口呢?想要乱拳打死老师傅,这些年轻的语言需要考虑的问题还很多,不只是简化语法这么简单。他们喊的替代C++的口号,也就是只能圈一波年轻粉了。
CBrother升级到v2.5.2
为了兼容所有编译器,默认提供C接口,如果要使用C++接口需要添加__CBROTHER_CPLUS_PLUS宏,开源的代码也修改为C接口的
支持代码中空闲的大括号,之前注释掉一个if语句后,多余的两个大括号会报错,这一点之前忽视了
新增strascii接口通过下标获取字符串内字符的ascii值
CLibFunc支持从一个地址创建函数
Xml操作类问题修复,增加了几个接口
全局const在module里无法访问的