循环外迭代器的声明和注册迭代器:它们有多有用?

Declaration of an iterator out of a cycle and registered iterators: How useful they are?

为什么有些人用它们声明一个循环的迭代器?像这样:

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

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

    return 0;
}

这是一个好习惯吗?

还有另一个问题:用register关键字标记每个迭代器是否有利可图?

这里有两件事:

  1. “在循环内声明变量” 功能已添加到 C99,在此之前的任何遗留代码都将绑定声明变量在循环之前。对于遗留代码,它更像是一种要求而不是一种实践。不过,postC99时代,可以有两全其美。有些人(包括我)发现声明最接近其用法的变量很有用。

  2. register关键字不是保证,它是给编译器的提示。编译器可以随意忽略它。引用 C11,章节 §6.7.1

    A declaration of an identifier for an object with storage-class specifier register suggests that access to the object be as fast as possible. The extent to which such suggestions are effective is implementation-defined.