사내 HP-UX 서버에서 컴파일을 하다, 아래의 Warning 이 나왔다.
Warning (suggestion) 887: “SharedMemory.cpp”, line 711 # Type ‘int’ is smaller than type ‘unsigned long’, unwanted widening in value may result. memset(szTotalHexData, 0x00, (iSize * 3) + 1); ^^^^^^^^^^^^^^
이유인즉, unsigned long type 이 와야 하는데, int type 이 왔다는 것.
이상할 것이 없어서 memset man 페이지를 확인해 보았다.
void *memset(void *s, int c, size_t n);
결론은, 저 size_t 의 type. 그냥 int 형 타입인 줄 알았는데, 그게 아니었다. unsigned long type 이었다.
혹시나 HP-UX aCC 에서만 적용되는건 아닌가 싶어서 g++ 에서도 찾아보았다.
확인 결과, 둘 다 unsigned long type 이 맞았다.
g++-4.7.3
#ifndef __SIZE_TYPE__ #define __SIZE_TYPE__ long unsigned int #endif #if !(defined (__GNUG__) && defined (size_t)) typedef __SIZE_TYPE__ size_t;
aCC: HP ANSI C++ B3910B A.03.37
#include <sys/stdsyms.h> #ifndef _SIZE_T_INCLUDED # define _SIZE_T_INCLUDED # ifndef _SIZE_T # define _SIZE_T _NAMESPACE_STD_START typedef unsigned long size_t; _NAMESPACE_STD_END # endif /** _SIZE_T **/ #endif /** _SIZE_T_INCLUDED **/