※ 이전 블로그의 포스트임(2016/11/1)


 C#에는 C 언어와 유사한 기본 자료형이 존재한다. 이름도 어딘가 비슷하다. 예를 들면 int, uint 같은 자료형이 있다. C 에는 uint 가 없다고 생각할 수 있는데, C99 표준에 따라 int32_t, uint32_t 라는 자료형이 존재한다.

 

 다만, C 에서는 uint32_t 가 예약어로 지정된 것이 아니라 stdint.h 라는 표준 헤더에 의해

 

typedef int int32_t;
typedef unsigned int uint32_t;

 

 와 같이 자료형 정의 형태로 지원이 되고 있다.

 

 C#도 이와 비슷하게 실제 자료형의 이름은 System.Int32, System.UInt32 와 같이 닷넷에서 제공하는 이름이 따로 존재하며 int, uint 는 이들의 alias 이다. 이런 부분들이 C 와 참 많이 닮아서 재미있다.

 

 공부를 할겸하여 C 와 C# 의 기본 자료형 비교표를 만들어 본다.

 

 크기 (byte)  .NET C# C++ 
1 System.SByte sbyte int8_t "
1 System.Byte byte uint8_t "
2 System.Int16 short int16_t "
2 System.UInt16 ushort uint16_t "
4 System.Int32 int int32_t "
4 System.UInt32 uint uint32_t "
8 System.Int64 long int64_t "
8 System.UInt64 ulong uint64_t "
4 System.Single float float "
8 System.Double double double "
16 System.Decimal decimal N/A "
2 System.Char char ≒ wchar_t ※ "
 Variable-Length System.String string N/A N/A 
1 System.Boolean bool N/A  bool ※

 

※ C/C++ 언어에서 bool, wchar_t 는 플랫폼이나 컴파일러마다 크기가 다를 수 있음.

 

 

책을 읽어보니 C# 에서는 downsizing 즉, 아래와 같은 경우

int a = 262144;
short b = a;

 2번 줄에서 빌드 에러가 난다고 한다. 반면, C/C++ 에서는 기본적으로 묵시적 casting 이 이루어지며, 특별히 옵션을 주어야 warning/error 로 만들 수 있다.

 

 

 C#의 char 형은 C의 char(int8_t) 와는 다르다. JAVA의 그 것과 동일하다고 보면 된다. 아예 언어 자체가 유니코드만 쓰겠다는 의지의 표현인데... C/C++ 숙련공인 나로서는 적응하기 참 난해할 것 같다.

 

Posted by JMAN