理解一段C代码背后的逻辑

时间:2017-02-05 17:59:47

标签: c

我很乐意,如果你们能向我解释为什么以下的递归代码不会打印“test”这个词。提前谢谢。

void drawTetriminosEachPosition(int **tetriminos, char **dBoard, int **tBoard, int i){
  char c;
  char **dBoard2;

  if(tetriminos[i] == '\0')
  {
      return;
  }    
  else
  {
     dBoard2 = dBoard;
     DrawTetrimino(tBoard, tetriminos[i], dBoard, i+65);
  }
  i++;
  return (drawTetriminosEachPosition(tetriminos,dBoard,tBoard,i));

  ft_putstr("test");
  if(checkChar(tBoard,tetriminos[i]))
  {
      dBoard = dBoard2;
      return (drawTetriminosEachPosition(tetriminos,dBoard,tBoard,i));
  }     
}

2 个答案:

答案 0 :(得分:2)

返回后的语句永远不会执行。自从第一次

return (drawTetriminosEachPosition(tetriminos,dBoard,tBoard,i));

不依赖于任何条件,不执行以下代码。

答案 1 :(得分:1)

当控制到达return ...时,它只返回并且不执行下一行。也许你错过了一些逻辑?

截至目前,您可以删除此部分无关紧要

ft_putstr("test");
  if(checkChar(tBoard,tetriminos[i]))
  {
      dBoard = dBoard2;
      return (drawTetriminosEachPosition(tetriminos,dBoard,tBoard,i));
  }