1. 변수 선언하기
타입명을 적고 띄우고, 변수명을 적는다. 공백은 스페이스 탭등이 여러개 들어가도 된다. 콤마(,)로 구분하여 여러개를 한번에 선언할 수 있다.
int a;
int b, c, d;
2. 변수값 초기화
선언과 동시에 초기화 한다.
int value = 0;
함수 호출 처럼 초기화 할 수 도 있다.
int value(0);
여러개를 한번에 초기화 할 수도 있다.
int a = b = c = 0;
콤마(,)로 분리해서 여러개를 초기화 할 수 도 있다.
int a = 0, b = 1;
선언 후에 초기화 해도 된다.
int a;
a = 1;
3. 데이터 타입
C++에는 아주 많은 데이터 타입이 있다. C++ 언어의 데이터 타입이 가지는 저장공간은 컴파일러마다 다를 수 있다. 이 글은 Visual Studio 2017 Community Edition 기준이다.
데이터 타입은 기본적으로 음수부터 양수까지의 값을 가지는데, unsigned가 지원되면 0을 포함하는 양수 만을 가지게 된다. 예로 int 는 음수에서 양수의 범위를 가진다. unsigned int 로 선언하면 양수의 값만을 가지게 된다.
형식 이름 | 바이트 | 기타 이름 | 값의 범위 |
---|---|---|---|
int | 4 | signed | -2,147,483,648 to 2,147,483,647 |
unsigned int | 4 | unsigned | 0 to 4,294,967,295 |
__int8 | 1 | char | -128 to 127 |
unsigned __int8 | 1 | unsigned char | 0 to 255 |
__int16 | 2 | short, short int, signed short int | -32,768 to 32,767 |
unsigned __int16 | 2 | unsigned short, unsigned short int | 0 to 65,535 |
__int32 | 4 | signed, signed int, int | -2,147,483,648 to 2,147,483,647 |
unsigned __int32 | 4 | unsigned, unsigned int | 0 to 4,294,967,295 |
__int64 | 8 | long long, signed long long | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 |
unsigned __int64 | 8 | unsigned long long | 0 to 18,446,744,073,709,551,615 |
bool | 1 | none | false or true |
char | 1 | none | -128 to 127 by default 0 to 255 when compiled by using /J 옵션 |
signed char | 1 | none | -128 to 127 |
unsigned char | 1 | none | 0 to 255 |
short | 2 | short int, signed short int | -32,768 to 32,767 |
unsigned short | 2 | unsigned short int | 0 to 65,535 |
long | 4 | long int, signed long int | -2,147,483,648 to 2,147,483,647 |
unsigned long | 4 | unsigned long int | 0 to 4,294,967,295 |
long long | 8 | none (but equivalent to __int64) | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 |
unsigned long long | 8 | none (but equivalent to unsigned __int64) | 0 to 18,446,744,073,709,551,615 |
enum | varies | none | |
float | 4 | none | 3.4E +/- 38 (7 digits) |
double | 8 | none | 1.7E +/- 308 (15 digits) |
long double | same as double | none | Same as double |
wchar_t | 2 | __wchar_t | 0 to 65,535 |
4. 리터럴(literal)
변수에 들어가는 변수에 값을 직접 입력할 때의 즉시값이다. int, long은 같은 형식의 숫자를 값으로 가지고, 범위만 다른 경우이다. 이러한 경우에서 처럼 서로 구분할 필요가 있을때 값뒤에 표시를 하여 구분한다. 이때 표시하는 문자는 대소문자를 구분하지 않는다.
int a = 1;
long a = 1L; // 뒤에 L 을 붙여 표시한다.
문자형(char)의 경우 숫자로도 표현할 수 있다.
char a = 'A'; // 작은 따옴표로 둘러싸준다.
char a = 65; // ASCII 코드 65는 문자 'A' 를 뜻한다.
wchar_t a = L'A'; // wchar_t 는 유니코드는 저장한다. 문자 리터럴 앞에 L을 붙인다.
불리언 타입 변수는 true 와 false 두 개의 리터럴 만을 가진다.
bool a = true;
실수형은 F를 위에 붙인다.
float a = 1.1F;
5. 열거형(enumeration) - enum 타입
남자, 여자를 나타내는 데이터를 저장하고 싶다고 가정해 보겠다. 이러한 타입은 언어 자체에서 제공하지 않으므로, 정수형 숫자로 0은 남자, 1은 여자라고 정의해 두고 사용할 수 있을 것이다. 값이 0이면 남자를 출력하고, 1이면 여자라고 출력하는 프로그램을 작성하는 것이다.
이 방법의 단점은 코드만 봐서는 의미를 알기 힘들고 정수값은 0, 1외에도 많은 값이 있으므로 성별을 표시하는 변수에 0, 1 외에 다른 값을 입력하는 실수를 할 수 도 있을 것이다. bool 타입을 사용해서 true이면 남자, false이면 여자로 정의 해서 사용하는 것도 것도 가능하다. 이번에는 두 가지 값밖에 입력하지 못하니까 엉뚱한 값을 입력할 염려는 없다. 하지만 아직도 의미적으로 정확한 것은 아니다. 다음과 같이 enum 타입을 사용해서 정의한다. 이제 Sex 라는 새로운 타입이 생성하고 Man, Woman 두 개의 값을 가지게 선언한다.
enum Sex {Man, Woman};
이제 enum Sex 타입을 정의해서 사용할 수 있다. enum 타입은 함수처럼 초기화 할 수 없다. enum Sex a(Man); 처럼 쓸 수는 없다.
enum Sex a = Man;
enum Sex b = Woman;
if(a == b) { ... }
변수의 선언시 enum 을 빼고 사용할 수 도 있다.
Sex a = Man;
이제 각각의 의미도 명확 해졌고, 다른 값을 입력하는 오류도 발생하지 않게 되었다. 이 처럼 성별, 요일, 코드성 데이터등 갯수가 제한되어 있는 데이터를 표현하는데 enum 타입이 사용된다. enum 타입에 대해서 좀 더 자세히 알아보면 위의 정의에서 Man과 Woman 은 실제로 0, 1의 값을 가진다. 언어 내부적으로는 정수형으로 처리되는 것이다. 값이 자동으로 붙는데 그 값을 직접 지정할 수 있다.
enum Sex {Man = 1, Woman };
하나씩 각각을 지정할수도 있고 위에서처럼 하나의 값을 지정하고 뒤의 값을 지정하지 않으면, 지정된 곳부터 순서대로 값이 들어가게 된다. Man = 1, Woman = 2 가 되는 것이다. 하나씩 직접 지정하여 중간의 값을 건너뛰고 지정할 수도 있다.
enum 타입을 선언과 동시에 변수를 만다는 방법도 있다.
enum Sex {Man, Woman} a, b;
또 다른 사용법은 다음과 같이 타입 명칭을 지정하지 않는 것이다.
enum {Man, Woman} a, b;
6. 상수(const)
변수 선언시 앞에 const 를 붙이면 상수가 된다. 상수는 최초 한번 값을 초기화 한 후에는 값을 변경할 수 없다.
const int a = 5;
또한 값의 초기화도 선언과 동시에 해야한다. 아래와 같이 선언과 초기화를 별도로 하려고 하면 컴파일이 되지 않는다.
const int a;
a = 5;
이러한 상수는 Magic number라고 불리는 프로그램에서 사용되는 주요 상수를 저장하는 많이 사용된다.
const float pi = 3.14f;
이처럼 변하지 않는 원주율 같은 것이 예가 될 수 있다.
출처: https://offbyone.tistory.com/115 [쉬고 싶은 개발자:티스토리]
'프로그래밍 언어 > C++' 카테고리의 다른 글
C++ 난수 생성 std::random + 생성 시간 측정하는 std::chrono 라이브러리 (0) | 2022.10.24 |
---|---|
C 난수 생성 (0) | 2022.10.24 |
C++ std::tuple 여러가지 타입들의 객체를 보관 / Structured binding (0) | 2022.10.12 |
std::variant와 std::monostate 여러가지 타입 중 한 가지의 객체를 보관 (0) | 2022.10.10 |
C extern (변수 / 함수 외부 선언) (0) | 2022.09.27 |