sizeof 不应再作用于 sizeof 表达式
10.7.7 ID_sizeof_sizeof
sizeof(sizeof(...)) 等价于 sizeof(size_t),在实际应用中没有任何必要写成连续 sizeof 的形式,往往意味着逻辑错误,多数由复制粘贴或错误的宏展开导致。
示例:
void foo() {
T* p = (T*)malloc(sizeof(T));
p->nLength = sizeof(sizeof(T)); // Non-compliant, copy-paste error
....
}
依据
ISO/IEC 9899:1999 6.5.3.4(4)
ISO/IEC 9899:2011 6.5.3.4(5)
ISO/IEC 14882:2003 5.3.3(6)
ISO/IEC 14882:2011 5.3.3(6)
ISO/IEC 14882:2017 8.3.3(6)