■1.memsetのよくある間違い
#include <string.h>
int main(void) {
int ary[1024];
struct {
float f;
double d;
} buf;
//1.[(warning)memsetZeroBytes]
memset(ary,0x12,0);
//2.[(portability)memsetFloat]
memset(ary,3.14,sizeof(ary));
//3.[(warning)memsetValueOutOfRange]
memset(ary,0x1234,sizeof(ary));
//4.[(portability)memsetClassFloat] C++だけ
memset(&buf,0,sizeof(buf));
//5.[(warning)incompleteArrayFill]
memset(ary,0,1024);
//6.[(warning)sizeofDivisionMemfunc]
memset(ary,0,sizeof(ary)/sizeof(ary[0]));
}
■2.[(warning)memsetZeroBytes]
第3引数のサイズが0
■3.[(portability)memsetFloat]
第2引数に指定できるのはint型だが
実質unsigned char型
浮動小数点はint型に型変換される
■4.[(warning)memsetValueOutOfRange]
第2引数に指定できるのはint型だが
実質unsigned charで 0~0xFFまで
■5.[(portability)memsetClassFloat]
C++だけ
第1引数の指す先に浮動小数点メンバーがある。浮動小数点0.0の内部表現が0とは限らない
■6.[(warning)incompleteArrayFill]
第3引数は要素数ではなくてサイズ
■7.[(warning)sizeofDivisionMemfunc]
第3引数で要素数を求める割り算をしている