循环外迭代器的声明和注册迭代器:它们有多有用?
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
关键字标记每个迭代器是否有利可图?
这里有两件事:
“在循环内声明变量” 功能已添加到 C99
,在此之前的任何遗留代码都将绑定声明变量在循环之前。对于遗留代码,它更像是一种要求而不是一种实践。不过,postC99
时代,可以有两全其美。有些人(包括我)发现声明最接近其用法的变量很有用。
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.
为什么有些人用它们声明一个循环的迭代器?像这样:
int do_work(const int iqt) {
register int i;
for (i = 0; i < iqt; i++) {
/* very busy work ;d */
}
return 0;
}
这是一个好习惯吗?
还有另一个问题:用register
关键字标记每个迭代器是否有利可图?
这里有两件事:
“在循环内声明变量” 功能已添加到
C99
,在此之前的任何遗留代码都将绑定声明变量在循环之前。对于遗留代码,它更像是一种要求而不是一种实践。不过,postC99
时代,可以有两全其美。有些人(包括我)发现声明最接近其用法的变量很有用。register
关键字不是保证,它是给编译器的提示。编译器可以随意忽略它。引用C11
,章节 §6.7.1A 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.