SQLITE_PRIVATE void sqlite3PagerPagecount(Pager *pPager, int *pnPage){
  assert( pPager->eState>=PAGER_READER );
  assert( pPager->eState!=PAGER_WRITER_FINISHED );
  *pnPage = (int)pPager->dbSize;
}  
 if( nPage==0 ) sqlite3PagerPagecount(pBt->pPager, &nPage);上面的代码中为什么使用函数获取nPage的值而不直接使用
nPage=(int)pBt->pPager->dbSize;?我在sqlite源码中看到很多类似的用法,很迷惑,望大侠们指点一下!

解决方案 »

  1.   

    assert( pPager->eState>=PAGER_READER );
    assert( pPager->eState!=PAGER_WRITER_FINISHED );
    做了一些断言,保证有效性。直接取,不知道变量是否有效。
    还有就是,有些类的变量是private或保护类型的,直接访问是不允许的。只有通过调类里面的函数接口实现访问
      

  2.   

    他这儿每次赋值的时候先对数据的有效性做了检查我觉得一般用来封装一个操作,这样便于修改。假如你的操作算法改变了,如果已经封装了这个操作,那么直接改函数就行,如果没有封装那就惨了,全部使用的地方全部修改
    假设他现在写成了nPage=(int)pBt->pPager->dbSize;
    那么他以后改变nPage计算的算法了,比如改成(int)pPager->dbSize%12这种形式就麻烦大了