Если-еще проблема - PullRequest
       9

Если-еще проблема

0 голосов
/ 21 августа 2010

Я изучаю очереди и наткнулся на этот кусок кода.Это из книги, поэтому я не могу опубликовать весь код здесь, но то, что я публикую, будет достаточно.Больше чем проблема, я просто хочу подтвердить, правильно ли я понимаю этот код.

В функции delete_ap () оператор if вызывает функцию qretrieve () и сохраняет ее возвратзначение в указателе 'p'.Моя проблема: если возвращаемое значение не NULL, то выполняется оператор if, не так ли?Таким образом, значение по-прежнему сохраняется в «p», и мы можем просто напечатать это значение без использования оператора «else», как в этом примере.

Спасибо!

/* Delete an appointment from the queue. */
void delete_ap(void)
{
  char *p;
  if((p=qretrieve()) ==NULL) return;
  printf("%s\n", p); <--Problem is in this line and the one above it.
}

/* Retrieve an appointment. */
char *qretrieve(void)
{
  if(rpos==spos) /* spos:holds the index of the next free storage location.
                    rpos:holds the index of the next item to retrieve.*/

   { 
    printf("No more appointments.\n");
    return NULL;
   }
  rpos++;
  return p[rpos-1];
}

Ответы [ 2 ]

1 голос
/ 21 августа 2010

Это так же, как:

char *p = qretreive(); // <-- will always execute
if(p==NULL) 
  return; // <-- will not execute the next line if p is invalid
printf("%s\n", p);
1 голос
/ 21 августа 2010

Оператор return используется вместо помещения остальной части функции в блок else.

То есть выполнение достигнет printf, только если p != NULL.

Примечание: Многие люди утверждают, что возврат в середине кода затрудняет чтение кода и приводит к ошибкам из-за слишком отсутствующей очистки, которая обычно выполняется в конце метода.

...