浅谈assert的几种用法


1.函数参数有效性检查

Example:

① def         SetScale(self, s):
                   assert     s > 0.0, s
                   self.model.scale = math3d.vector(s, s, s)


② def         SetTexture(self, textureName):
                   assert   textureName != ''
 

③ def         RotateToHorzDirection(self, dir):
                   dir.y = 0.0
                   assert   abs(dir) >= 1e-3, dir



2.函数返回值检查,检查函数执行是否有效

Example:

① def         OnModelLoaded(self, model):
              self.model = model
              self.rootbone = self.model.get_root_bone()
              assert self.rootbone >= 0



3.执行环境有效性检查

Example:

① def         showPrompt(utf8_msg):
             assert   _WorldProcInst.IM.IsActive()
            _WorldProcInst.IM.AddToChatBox(utf8_msg)


② def         BindSocket(self, socket,  o):
             assert self.model is not None
             self.model.bind(socket,o)


③ if msg_type == raidprotocol.RD_MSG_SCENE_FOG_PROPERTY_UPDATE:
              assert  self.scn is not None
              self.scn.set_fog(FogType, FogMode, FogColor, FogStart, FogEnd,FogDensity)


④ if msg_type == gsprotocol.GS_MSG_SIGN_OUT_RES_SUCCEEDED:
              assert   self._proc_state == self.PROC_STATE_NORMAL
             self._SwitchState(self.PROC_STATE_SIGN_OUT)
              returnFalse


⑤ def         __OnPickMember(self, obj):
              assert self.squad is not None
 


4.非法情况检查,非法逻辑分支

Example:

① def         ShowStall(self, bShow, type):
                     if       type == gsconsts.STALL_TYPE_COMMON:
                            self._stall_common=render.model('./meshes/items/sellbag.gim')
                     elif    type == gsconsts.STALL_TYPE_ADVANCE1:
                            self._stall_common=render.model('./meshes/items/tanwei01.gim')
                     else:
                            assert  0, 'unknown stall type'


② def         MainSubProc(self):
                    for v in [self.WorldGame,self.RaidGame, self.Farm.home]:
                           if v.IsActive():
                                  return v
                    
                    assert   0, 'should never come tohere'
                    return None


③ void  OnEvent(event,  args)
        {
              switch(event)
              {
              case EVENT0:
                  ...
              break;
              
              case EVENT1:
                  ...
              break;
              
              case EVENT2:
                  ...
              break;
              
               default:
                     assert    0 &&  "invalid event"
              }
       }



5.防止重入

Example:

① def       OnCharacterEnterAOI(self, char_aoi, pet_aoi):
              key = char_aoi.char_rtid
              assert   key not in self.aoiRemoteChar,  char_aoi.char_name


② def       AddBuffer(self, bufferRtid, typeID, srcRtID, life_Time=0.0,int_Mode=0, real_Mod=0.0):
              assert  bufferRtid not in  self.BufferMap


③ def        Initial(self, initChildProcName):
              global Instance
              assert Instance is None                        #全局共享数据写保护
              Instance = self
              return True



6.多个需要保持同步的变量一致性检查

Example:

1)       class       CString:
                def  __init__(self,s):
                       self._str = s
                       self._len= len(s)


               def  length(self):
                       assert  self._len == len(self._str)
                       returnself._len


               def  set(self,s):
                       self._str = s
                       self._len= len(s)


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言中的assert函数是一个调试工具,用于在程序中检查条件是否为真。当条件为假时,assert函数会中断程序的执行并输出错误信息。 assert函数的定义如下: #include <assert.h> void assert(int expression); assert函数的作用是检查expression是否为真。如果expression为假,则assert函数会打印出错误消息,并终止程序的执行。如果expression为真,则assert函数不会有任何操作。 以下是assert函数的用法总结和注意事项: 1. 在函数中使用assert可以检验传入参数的合法性。例如,在函数开始处可以使用assert检查参数的范围是否合理。 2. 每个assert只检验一个条件,以便在断言失败时可以准确定位到哪个条件失败。 3. 不要在assert中使用改变环境的语句,因为assert只在调试模式下生效,如果包含改变环境的语句,可能会导致程序在真正运行时遇到问题。 4. 在调试结束后,可以通过在包含#include <assert.h>的语句之前插入#define NDEBUG来禁用assert调用。 下面是一个使用assert函数的示例代码: #include <stdio.h> #include <assert.h> int main() { int i = 0; while (1) { i++; printf("Before assert is %d.\n", i); assert(i <= 5); printf("After assert is %d.\n", i); // 当i>5时,不会执行到这一句 } return 0; } 在上面的示例中,assert函数用于检查变量i是否小于等于5。如果i大于5,则assert函数会中断程序的执行,并输出错误信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值