[問題] 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