d合约同发布开关编译
version (assert) int foo;
void test()
in (!foo)
{}
void main() {
test();
}
用'-release'生成时,不会编译进'foo',编译失败,并显示:
错误:未定义`'foo'`标识.
在发布版本中,不删除合约吗?
删除了合约(即它不出现在可执行文件中),但这不表明未分析它.因为你的代码没有通过语义分析,所以得到错误.
无法实现这一点,因为这样你的合约中可能会有语义错误的代码,不论是否在目标代码中生成,编译器需要报告它.
在合约中报告语义错误,编译器不是一成不变的.注意,当前,如果不用-unittest编译,可能会在unittest块中出现语义错误的代码.(甚至不需要正确解析,解析器只是跳至下个括号)
但是,合约可影响推导属性:'@system'约定调用'@system'函数.基于-checkaction开关的更改函数属性,分开编译时,可能会导致链接器错误.
浙公网安备 33010602011771号