被除数不应是作用于指针的 sizeof 表达式
10.7.4 ID_sizeof_pointerDivision
形如 sizeof(p) / n 的表达式往往意在获取数组元素的个数,如果 p 是指针,sizeof(p) 是指针大小而不是数组大小,结果很可能是错误的。
示例:
void foo(T* p) {
size_t n = sizeof(p[0]);
qsort(p, sizeof(p) / n, n, cmp); // Non-compliant, logic error
}
例中 sizeof(p) / n 并不能获取 p 所指数组中元素的个数。
本规则是 ID_sizeof_pointer 的特化,sizeof 作用于指针是可疑的,再作为被除数就更加可疑了。