格式化功能不适用于BCC32C

时间:2016-09-09 10:09:48

标签: c++builder

BCC32和BCC32C之间的另一个区别。 BCC32C无法正确显示格式化功能。 在以下示例中,BCC32显示" 7测试测试7" (正确),但BCC32C显示" 7测试测试"。 我正在使用Rad Studio 10.1。您可以复制它创建一个空项目,添加一个按钮,然后是以下代码:

void __fastcall TForm1::Button2Click(TObject *Sender)
{
    int i=7;

    String str="test";

    ShowMessage(Format("%d %s %s %d", ARRAYOFCONST((i, str, str, i))));
}

有解决方法吗?我开始认为BCC32C尚未准备好投入生产。我发现了很多问题。

2 个答案:

答案 0 :(得分:1)

我认为正确的方法是这样做:

void __fastcall TForm1::Button2Click(TObject *Sender)
{
    int i=7;
    String str="test";
    TVarRec Args[] = {i, str, str, i};

    ShowMessage(Format("%d %s %s %d", Args, 3));
}

萨姆

答案 1 :(得分:1)

经过研究,似乎我需要等待Rad Studio的新版本。 与此同时,我已经创建了一个解决方法,现在似乎有效:

#if defined(__clang__)
    #define VRARRAY(...) (TVarRec[]){__VA_ARGS__}, sizeof((TVarRec[]){__VA_ARGS__})/sizeof(TVarRec)
#else
    #define VRARRAY(...) System::OpenArray<System::TVarRec>(__VA_ARGS__), sizeof(System::OpenArrayCounter<System::TVarRec>::Count (__VA_ARGS__))-1
#endif

然后,我可以使用:

ShowMessage(Format("%d %s %s %d", VRARRAY(i, str, str, i)));