Объявление итератора вне цикла и зарегистрированных итераторов: насколько они полезны? - PullRequest
0 голосов
/ 02 октября 2018

Почему некоторые люди объявляют итератор цикла из них?Например:

int do_work(const int iqt) {
    register int i;

    for (i = 0; i < iqt; i++) {
    /* very busy work ;d */
    }

    return 0;
}

Это хорошая практика?

И еще один вопрос: выгодно ли отмечать каждого итератора ключевым словом register?

1 Ответ

0 голосов
/ 02 октября 2018

Здесь есть две вещи:

  1. Функция «Объявление переменной внутри цикла» была добавлена ​​в C99, любой прежний код до этого был быобязан объявить переменные перед циклом.Для унаследованного кода это было больше требованием, чем практикой.Однако, после C99 эры, это может быть в любом случае.Некоторые люди (включая меня) считают полезным объявлять переменные, наиболее близкие к их использованию.

  2. Ключевое слово register не является гарантией, это подсказка компилятору.Компиляторы могут игнорировать это.Цитирование C11, глава §6.7.1

    Объявление идентификатора для объекта со спецификатором класса хранения register предполагает, что доступ к объекту должен быть максимально быстрым.Степень эффективности таких предложений определяется реализацией.

...