此代碼與合同:ldc和gdc是否支持D語言合約?
import std.stdio;
int TestContract(int a)
in
{
assert(a > 0);
}
do
{
return a + 1;
}
int main(string[] args)
{
auto a = 2;
try
{
writeln(a," + 1 is ",TestContract(a));
a = -2;
writeln(a," + 1 is ",TestContract(a));
}
catch (Exception e)
{
writeln(e);
}
return 0;
}
編譯並用DMD(v2.076.0髒),但不LDC(0.17.1)或GDC(5.4.0 20160609)中運行。
LDC說:
contracts.d(12): Error: declaration expected, not 'do'
contracts.d(15): Error: unrecognized declaration
和GDC說:
contracts.d:12:1: error: declaration expected, not 'do'
do
^
contracts.d:15:1: error: unrecognized declaration
}
編輯:用 「身體」 編譯,而不是 「做」,每答案與最不發達國家成功。 GDC得到一個新的編譯錯誤:
/usr/include/d/core/stdc/stdarg.d:48:5: error: undefined identifier __va_list_tag
alias __va_list = __va_list_tag;
注意,在目前的時間爲contract programming的dlang.org文件沒有提到身體,而可能過時,仍然有效,而且是必要的DMD的版本早於[未知版本]的編譯器以及在版本[未知版本]之前使用dmd前端的任何版本的gdc或ldc。
ldc(0.17.5)爲我工作,使用'do'而不是'body'。並且dmd(2.077.0)也可以工作,這並不奇怪。 – Eljay