d合约同发布开关编译

原文

version (assert) int foo;

void test()
in (!foo)
{}

void main() {
    test();
}

'-release'生成时,不会编译进'foo',编译失败,并显示:

错误:未定义`'foo'`标识.

发布版本中,不删除合约吗?

删除了合约(即它不出现在可执行文件中),但这不表明未分析它.因为你的代码没有通过语义分析,所以得到错误.
无法实现这一点,因为这样你的合约中可能会有语义错误的代码,不论是否在目标代码中生成,编译器需要报告它.

合约中报告语义错误,编译器不是一成不变的.注意,当前,如果不用-unittest编译,可能会在unittest块中出现语义错误的代码.(甚至不需要正确解析,解析器只是跳至下个括号)
但是,合约可影响推导属性:'@system'约定调用'@system'函数.基于-checkaction开关的更改函数属性,分开编译时,可能会导致链接器错误.

posted @   zjh6  阅读(11)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示