안녕하세요. 명월입니다.
이 글은 C++에서 사용되는 변수와 상수, 그리고 데이터 타입에 대한 글입니다.
C++에서 변수 선언법은 다른 언어와 마찬가지로 「데이터 타입 변수명」으로 나타냅니다.
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
// 정수형 타입
// char는 1byte : -127 ~ +128
char var1 = 'a';
// short는 2byte : -32,768 ~ +32,767
short var2 = 100;
// int는 4byte : -2,147,483,648 ~ +2.147,483647
int var3 = 1000;
// long는 4byte : -2,147,483,648 ~ +2.147,483647
long var4 = 10000;
// 실수형 타입
// float는 4byte : -3.4e-37 ~ +3.4e+37
float var5 = 200;
// double는 8byte : -1.7e-307 ~ +1.7e+307
double var6 = 2000;
cout << "char : " << sizeof(var1) << "bit : " << CHAR_MIN << " ~ " << CHAR_MAX << endl;
cout << "short : " << sizeof(var2) << "bit : " << SHRT_MIN << " ~ " << SHRT_MAX << endl;
cout << "int : " << sizeof(var3) << "bit : " << INT_MIN << " ~ " << INT_MAX << endl;
cout << "long : " << sizeof(var4) << "bit : " << LONG_MIN << " ~ " << LONG_MAX << endl;
cout << "float : " << sizeof(var5) << "bit : " << FLT_MIN << " ~ " << FLT_MAX << endl;
cout << "double : " << sizeof(var6) << "bit : " << DBL_MIN << " ~ " << DBL_MAX << endl;
return 0;
}
여기서 정수형은 소수점이 없는 수이고 실수는 소수점이 있는 수입니다.
특히나 c++에서는 많이 사용하는 자료형은 int와 float입니다. 다른 데이터 타입은 그렇게 자주 사용하지 않습니다. 한 20~30년 전이야 하드웨어가 지금처럼 좋지 않았을 때는 메모리를 아낀다고 세부적으로 메모리 계산해가며 변수선언 했지만, 지금이야 메모리가 몇 기가 단위인데 short 타입을 int로 쓴다고 크게 시스템이 느려지지 않습니다.
java나 C#과 다른 점은 string 객체가 없습니다.
사실 string은 원시 데이터 타입(Primitive type)이 아니고 클래스 타입입니다.
사실 java나 C#에서의 문자열은 byte배열(unsigned char(음수가 없는 char))타입입니다. 그것에 관한 자료형은 wchar_t 자료형이 있습니다.
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
// 문자열은 배열식으로 할당되고 변수는 포인터를 받는다.
const wchar_t* var = (L"안녕하세요. 명월입니다.");
// wchar_t타입은 cout으로 출력이 되지 않는다.
// wcout 타입으로 출력을 해야한다.
// 그냥 wcout를 사용하면 콘솔에서 글자가 깨진다. 한글 설정을 해야한다.
wcout.imbue(locale("kor"));
wcout << var << endl;
return 0;
}
C++이 java와 C#과 다르게 문자열 다루기가 매우 까다롭습니다. c++이 다른 언어보다 어렵다는게 이 문자열 다루기가 매우 까다로워서 그렇습니다.
c++에서 문자열을 이해할려면 문자열의 변천사도 알아야 합니다.
처음에는 const char에서 const wchar_t로 바뀌었고 이게 ascii코드에서 멀티바이트코드, 현재는 유니코드를 가장 많이 사용합니다.
유니코드의 문자열 타입은 wchar_t입니다.
또 문자열은 포인터로 받았는데, 이건 포인터와 배열을 이해해야 하는 부분이기 때문에 여기서는 일단 생략하겠습니다.
wchar_t*앞에 const의 키워드를 사용했습니다.
const의 키워드는 변수와 상수의 차이입니다.
변수는 값이 변하는 변수이고 상수는 값이 변하지 않는 변수입니다.
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
// const가 없는 변수는 값이 변할 수 있다.
int a = 0;
// 변수에 값을 재설정이 가능하다.
a = 10;
// 상수 선언 b는 1로 선언이 되었으면 값이 변할 수 없다.
const int b = 1;
// 에러가 발생한다.
b = 11;
return 0;
}
에러가 발생했습니다. const가 설정되면 값이 바뀌지 않는 상수의 개념이 됩니다.
문자열에 const가 붇는 이유는 역시 포인터의 개념을 알아야 하기 떄문에 또 생략합니다.
참 string개념 때문에 설명이 복잡해졌습니다.
저도 예전에도 그랬지만 C++로 개발하다가 보면 string때문에 정말 짜증나는 일이 많습니다...ㅎㅎㅎ
개인적으로 문자열만 좀 사용하기 쉬우면 java나 C#보다는 C++를 쓸텐데 말입니다. Java와 C#은 그놈의 가비지 컬렉션... 짜증납니다.
여기까지 C와 C++에서 사용되는 변수, 그리고 데이터 타입에 대한 글이었습니다.
궁금한 점이나 잘못된 점이 있으면 댓글 부탁드립니다.
'Study > C , C++ , MFC' 카테고리의 다른 글
[C++] 함수 사용법(가변 파라미터 stdarg.h, 함수 포인터 그리고 범용 포인터 void*) (0) | 2020.03.15 |
---|---|
[C++] 배열과 포인터(메모리 주소) 그리고 할당(new){stack과 heap에 대해서} (0) | 2020.03.14 |
[C++] 제어문 (0) | 2020.03.12 |
[C++] 연산자 (0) | 2020.03.11 |
[C++] CMake의 사용법 (0) | 2020.03.10 |
[C++] Make와 Makefile 작성법 (0) | 2020.03.09 |
[C++] Visual Studio 설치와 Linux의 g++ 설치 (0) | 2020.03.06 |
[C API] 환경파일(INI) 읽고 쓰기 (0) | 2013.03.02 |