[问题] C++ Builder的编译器规格

楼主: z1976 (z1976)   2017-10-19 21:13:47
因为我现在做的专案希望可以在不同编译器和IDE之间 (e.g. bcb, vc++, qt, gcc or cl
ang) 共用程式码,所以要做一个桥接的程式,把差异的地方统一1个对外接口。需要透过
一些宏来判断环境。
其实毛最多的就字串处理函数而已。但我发现C++ Builder (以下简称BCB)
在32字节态下的支援性不是很好判断。公司用的版本是XE7。
它的__cplusplus是1,但是它却有define __STDC_LIB_EXT__ ,
所以它有一些 _s结尾的函数可以用。
但也不是每个_s 函数它都有支援,像是宽字串互转的mbstowcs_s和wcstombs_s就没有。
所以也不能用__STDC_LIB_EXT__或__plusplus来概括说有无支援_s函数
必须额外针对if defined(__BORLANDC__)来处理。
另外,像是vswprintf 在别的编译器都是4个参数,但BCB是3个(少了数量那一个)
这也要另外判别是不是BCB
会不会是BCB 32位元的tool chian比较没办法用通用的macro来判断其支援性?
(也许规格上没完全支援到C++11,但是有implement了部份函数来相容之类的?)
作者: Sidney0503 (Sidney0503)   2017-10-19 21:31:00
请讲中文
作者: Bencrie   2017-10-19 21:47:00
帮翻译 宏 = macro = 宏
作者: longlongint (华哥尔)   2017-10-19 22:35:00
最后一段可以补一行 "请问BCB的规范要去哪里查?"之类的所以就是开自己的函数,函数内用宏来分环境?
楼主: z1976 (z1976)   2017-10-19 22:39:00
楼上,是的还有像是没有_s函数的版本就自己加这样。因为MS-VS14对于字串函数是规定要用xxx_s来取代旧的;这样也比较安全
作者: kingofsdtw (不能閒下來!!)   2017-10-21 01:14:00
typedef unsigned long long UINT64;typedef unsigned int UINT32;或许tools chain <type.h>会定义https://goo.gl/6QbfkS不然就是运行build.bash/build.batecho "BUILD_TOOLS=xxx" > env.h
作者: Sirctal (母猪母猪 夜里哭哭)   2017-10-22 20:32:00
天阿 什么年代了 还在C++ builder...
作者: Bencrie   2017-10-22 21:04:00
还好吧。又不是 BCB6

Links booklink

Contact Us: admin [ a t ] ucptt.com