안녕하세요. 플래쉬 메모리 소스를 보다가 질문이 생겨 문의드립니다.

nand.c에 보면 아래와 같은 함수가 있습니다.
int  NAND_ScanBadBlock( TNandInfo *NandDev )
{
     int ScanBlock, IndexBlock;
     int ReplaceBlock,  VirIndex;
   
     ScanBlock = USED_BOOT_BLOCK_COUNT;  //NandDev->TotalSize/NandDev->EraseSize;
     NandDev->BadBlockCount = 0;
   
     for( IndexBlock = 0; IndexBlock < ScanBlock; IndexBlock++ )
     {
         if( NAND_CheckBadBlock( NandDev, IndexBlock ) == FALSE )
         {
              NandDev->BadBlockCount++;
         }
     }
     
     // 배드블럭을 제거한 가상블럭을 정열한다.
     ReplaceBlock = 0;
     VirIndex     = 0;
     for( IndexBlock = 0; IndexBlock < ScanBlock; IndexBlock++ )
     {
         if ( 'X' == NandDev->BadBlock[IndexBlock] )
         {
   ReplaceBlock ++;
   continue;
         }

  if ( ReplaceBlock < ScanBlock )
  {
         NandDev->VirBlock[VirIndex++] = ReplaceBlock++;
        }
        else
        {
         NandDev->VirBlock[VirIndex++] = ScanBlock-1;
        }
     }
     return NandDev->BadBlockCount;
}

궁금한 것은 마지막 for loop문의 내용입니다.
BadBlock에 'x'가 없을 경우 다음의 두가지 궁금증이 생겨납니다.
1. 소스 구조상 항상 ReplaceBlock < ScanBlock이 아닌가요? else로는 빠질 수가 없을 듯 합니다.
2. VirBlock[VirIndex++] = ReplaceBlock++을 하는 이유가 무엇이고 의미가 무엇인지 잘 모르겠습니다.