Хобрук: Ваш путь к мастерству в программировании

Зачем вам увеличивать здесь?

Функция взята отсюда: http://v6shell.org/history/if.c

Или с подсветкой синтаксиса: http://pastebin.com/bj0Hvfrw

char *nxtarg() {

    if (ap>ac) return(0*ap++);
    return(av[ap++]);
}

Это функция, которая возвращает следующий аргумент. ac — количество аргументов в argv, а ap — индекс текущего аргумента.

Так что думаю с if ( ap > ac ) проверяем, есть ли еще аргументы. И вот мой вопрос:

Зачем увеличивать ap [ return( 0 * ap++ ) ], если ap уже больше, чем ac, и, следовательно, аргументов больше нет?

Я бы просто вернул (0). Какие проблемы возникнут, если я просто верну (0)? Можете ли вы привести пример?

Обратите внимание, что это старый K&R-C.

05.01.2015

  • Возможно, он будет использован позже, и это свидетельствует о том, что массив уже был итерирован. 05.01.2015
  • По всему коду разбросано ap--. Предположительно все работает вместе. 05.01.2015
  • Обратите внимание, что ap — это глобальная переменная, используемая различными функциями. 05.01.2015
  • См. также Вызов функции без аргумента, хотя он нужен (K&R C) и Зачем вам return (0 * ap++);?. 06.01.2015

Ответы:


1

В файле есть несколько мест, которые выглядят так:

if (eq(nxtarg(), "!"))
    return(!e3());
ap--;

Псевдокод:

if nxtarg returns some string { do something }
else    // nxtarg returns 0 or another string
{
    // probably they want to test the same argument against another string
    ap--; 
}

Чтобы сделать это возможным, они в любом случае увеличивают ap.

В соответствии с запросом, это код вызывающей стороны в случае, если nxtarg не увеличивает ap, возвращая 0:

char* p = nxtarg();
if ( p != 0 ) 
{
    if (eq(p, "!")) return(!e3());
    ap--;
}
// p == 0 - don't decrement ap
05.01.2015
  • Какая будет проблема, если я просто верну(0) вместо return(0*ap++)? У вас есть пример? 05.01.2015
  • В этом случае значение ap будет другим, когда nextarg возвращает 0 или нет, и код вызывающей стороны также должен быть другим. Они хотят уменьшить ap в случае любого нежелательного результата. 05.01.2015
  • Верно! Спасибо Алекс :) 05.01.2015
  • Новые материалы

    Как свинг-трейдеры могут использовать ИИ для больших выигрышей
    По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

    Как построить любой стол
    Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

    Обзор: Машинное обучение: классификация
    Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

    Разработка расширений Qlik Sense с qExt
    Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..

    React Hooks: основы деструктуризации массива
    Kent C. Dodds написал классный пост о том, как грядущая функция React под названием Hooks работает на капоте. Предстоящий хук React useState основан на деструктурировании массива, давайте..

    Пакеты R, используемые в Tesla
    Добро пожаловать обратно! R — очень популярный язык программирования, используемый множеством компаний, включая Tesla! Итак, давайте взглянем на некоторые пакеты R, которые использует Tesla...

    Сокращение и слияние токенов для эффективных моделей VL: обзор
    Часто в задачах, связанных с компьютерным зрением и НЛП, вычислительно затратная и требующая большого объема памяти обработка становится препятствием для более быстрого логического вывода модели, а..