找回密码
 注册
搜索
查看: 1247|回复: 3

[讨论] deassert是什么意思?

[复制链接]
发表于 2006-5-31 11:20:00 | 显示全部楼层 |阅读模式
谁帮忙解释一下在硬件领域assert和deassert都是什么意思?
发表于 2006-6-6 11:29:00 | 显示全部楼层
assert 断言
deassert解除断言
一种debug方法
[br]<p align=right><font color=red>+3 RD币</font></p>
点评回复

使用道具 举报

发表于 2006-6-12 16:41:00 | 显示全部楼层
<P>“assert 断言
deassert解除断言
一种debug方法”</P><P>上面应该是指程序设计里的意思吧,从硬件方面来理解的话应该是“建立”“撤销”,比如信号的建立与撤销时间。</P>[br]<p align=right><font color=red>+3 RD币</font></p>
点评回复

使用道具 举报

发表于 2006-6-14 01:15:00 | 显示全部楼层
<DIV 8px; PADDING-LEFT: 8px; PADDING-BOTTOM: 8px; WIDTH: 100%; PADDING-TOP: 8px" align=left>應該是指不要將斷言作為程式邏輯的一部份,除了判斷程式中某點情況或值的判斷之外,assert不作其它的用途。。。

例如一個使用斷言的時機是內部不變量(Internal invarant)的判斷,例如在某個時間點上,或某個狀況發生時,您判斷某個變數必然要是某個值,舉個例子來說:
<UL><LI>AssertionDemo.java</LI></UL><PRE>public class AssertionDemo {
    public static void main(String[] args) {
        if(args.length &gt; 0) {
            System.out.println(args[0]);
        }
        else {
            assert args.length == 0;
            System.out.println("沒有輸入引數");
        }
    }
}</PRE>
在正常的預期中,陣列長度是不會小於0的,所以一但執行至else區塊,陣列長度必然只有一個可能,就是等於0,您斷言args.length==0結果必然成立,else之中的程式碼也只有在斷言成立的狀況下才能執行,如果不成立,表示程式運行存在錯誤,else區塊不應被執行,您要停下來檢查程式的錯誤,事實上斷言主要的目的通常是在開發時期才使用。

另一個使用斷言的時機為控制流程不變量(Control flow invariant)的判斷,例如在使用switch時,假設您已經列出了所有的可能常數:
<DIV 40px">...<BR bold; FONT-FAMILY: Courier New,Courier,monospace">switch(var) {<BR bold; FONT-FAMILY: Courier New,Courier,monospace">case Constants.Con1:<BR bold; FONT-FAMILY: Courier New,Courier,monospace">...<BR bold; FONT-FAMILY: Courier New,Courier,monospace">break;<BR bold; FONT-FAMILY: Courier New,Courier,monospace">case Constants.Con2:<BR bold; FONT-FAMILY: Courier New,Courier,monospace">...<BR bold; FONT-FAMILY: Courier New,Courier,monospace">break;<BR bold; FONT-FAMILY: Courier New,Courier,monospace">case Constants.Con3:<BR bold; FONT-FAMILY: Courier New,Courier,monospace">...<BR bold; FONT-FAMILY: Courier New,Courier,monospace">break;<BR bold; FONT-FAMILY: Courier New,Courier,monospace">default:<BR bold; FONT-FAMILY: Courier New,Courier,monospace">assert false : "非定義的常數";<BR bold; FONT-FAMILY: Courier New,Courier,monospace">}<BR bold; FONT-FAMILY: Courier New,Courier,monospace">...
</DIV>
假設您已經在switch中列出了所有的常數,即var不該出現Constants.Con1、Constants.Con2、 Constants.Con3以外的常數,則如果發生default被執行的情況,表示程式的狀態與預期不符,此時由於assert false必然斷言失敗。

總結就是,斷言是判定程式中的某個執行點必然是某個狀態,所以它不能當作像if之類的判斷式使用,簡單的說它不應是程式執行流程的一部份。
</DIV><P><FONT size=2><FONT color=#00648a>參考資料</FONT>
</FONT>http://caterpillar.onlyfun.net </P>
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-12-23 14:24 , Processed in 0.042770 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表