키워드와 리터럴

1. 키워드

 

프로그래밍 언어에서 특별한 의미로 미리 정의해 둔 식별자

 

int, long, short, break, bool, case, catch, else, if, and,....

 

char, int, float 등 데이터 형식부터 using, return 등 여러 문법들이 키워드

 

etc-image-0
https://en.cppreference.com/w/cpp/keyword

 

 

 

변수, 함수, 클래스 등 식별자를 정의할 때 미리 정의된 키워드와 똑같은 이름으로는 만들 수 없음

 

1) 키워드는 식별자로 사용할 수 없다

 

2) 식별자는 대소문자, 숫자, 문자로만 구성할 수 있다

 

3) 식별자는 대소문자, _(밑줄)로만 시작해야한다. 숫자로는 시작할 수 없다

 

4) 대문자와 소문자를 구별한다. nValue, nvalue, NVALUE... 등등은 모두 다른 것

 

 

2. 리터럴

 

코드에 직접 표현된 변하지 않는 값 그 자체

 

int vlaue = 5;
double value = 0.5;
char value = 'A';

 

 

여기서 5, 0.5, 'A' 같은 것들이 모두 리터럴

 

리터럴도 데이터 형식을 가진다

 

----------------------------------------------------------------------------------------------------------------------------------------------------------

 

문자 : char, 예: 'A'

 

정수: int, 예: 0,1,2,-1,-2

 

부동 소수점: double, 예: 0.5, 1.5, -0.5

 

문자열: char[], 예: "Hello", "안녕하세요"

 

불리언: bool, 예: true, false

 

----------------------------------------------------------------------------------------------------------------------------------------------------------

 

부동소수점이 기본이 float가 아니라 double임에 주목하자

 

기본 리터럴 외에도 별도의 접미사를 붙여서 지정할 수 있는 리터럴도 있다

 

float value = 0.5f;

unsigned int value = 5u;

long value = 5L;

 

 

접미사는 생략할 수 있다

 

그 경우 컴파일러는 해당 리터럴의 데이터 형식을 유추하여 임의로 지정

 

예를 들어 float value = 0.5; 이렇게 하면 0.5를 float가 아닌 double로 처리한다고함

 

그래서 웬만하면 명확히 명시하는게 좋다

 

----------------------------------------------------------------------------------------------------------------------------------------------------------

 

unsigned int >> u, U

 

long >> l, L

 

unsigned long >> ul, uL, Ul, UL, lu, lU, Lu, LU

 

long long >> ll, LL

 

unsigned long long >> ull, ULL, Ull, ULL, llu, llU, LLu, LLU

 

float >> f, F

 

long double >> l, L

 

*** long double은 실수형이고 long은 정수형

 

** 소문자 l은 1이랑 헷갈릴 수 있어서 대문자 L을 쓰는게 좋긴함

 

 

3. 문자열의 표현 방식

 

c언어의 문자열

 

char *str = "Hello";
char str[] = "Hello";

 

 

이 코드는 내부적으로 char 배열을 만들고 해당 배열에 문자 하나씩을 차례로 저장함

 

그리고 배열의 마지막에 문자열의 끝을 알리는 널 문자를 저장(\0)

 

실제로 5번 문자 string[5]를 출력하면 빈 문자가 나옴

 

etc-image-1

 

 

c++은 c언어를 계승했기 때문에 이 구조를 그대로 사용할 수 있다

 

하지만 문자열을 좀 더 편리하게 사용할 수 있도록 표준 라이브러리인 string 클래스를 지원

 

string 변수를 쓸려면 string 헤더를 포함해야하지만 iostream에 포함되어있어서

 

iostream을 쓰면 쓰지 않아도 된다고함

 

#include <iostream>

// #include <string> //iostream에 string이 포함된다고함
using namespace std;

int main(){

	string string_value("Hello");

	cout << string_value << endl;

	string_value = "World";

	cout << string_value << endl;

	return 0;
}

 

etc-image-2

 

 

 

4. 문자 리터럴

 

'a'나 '\'처럼 작은 따옴표로 묶인 단일 문자

 

특정 문자를 표현하는데 매우 유용

 

개행 문자를 콘솔에 출력하고 싶다면 '\n'

 

cout << "Hello World!\n" << endl;

 

 

또는 다음과 같이 줄바꿈 문자 리터럴을 그대로 사용

 

참고로 endl 자체가 \n을 포함한다는 것에 유의

 

cout << "Hello World!";

 

etc-image-3

 

 

 

cout << "Hello World!" << '\n';

 

 

etc-image-4

 

 

 

이처럼 문자 리터럴을 사용하면 코드에서 특정 문자를 더 간결하고 명확하게 표현할 수 있다

 

입력 유효성 검사나 문자열에서 특정 문자를 확인하는 등의 작업에도 사용 가능

 

1) 일반 문자: 'a', std::string str("Hello");

 

2) 와이드 문자: L'a' , std::wstring str3(L"Hello");

 

3) UTF-8 문자: u8'a' , std::u8string u8str2(u8"Hello");

 

4) utf-16 문자: u'a', std::u16string str4(u"Hello");

 

5) utf-32 문자: U'a', std::u32string str5(U"Hello");

 

앞에 접두사 L,U 등을 쓰지 않으면 일반 문자로 인코딩됨

 

 

5. 사용자 정의 리터럴

 

기본으로 제공되는 리터럴 외에도, 개발자가 리터럴을 직접 정의할 수도 있다

 

리터럴을 나타내는 접미사를 함수 이름으로 만들면 된다

 

사용자 정의 리터럴 연산자 operator""을 사용

 

반환 타입 operator"" 리터럴_접미사(매개변수)
{
    return val
}

 

 

이렇게 하면 해당 접미사를 붙인 값은 사용자가 정의한 값으로 바꿔 사용할 수 있다

 

 

#include <iostream>
using namespace std;

const long double km_per_mile = 1.609344L;

long double operator"" _km(long double val) { // _km 사용자 리터럴
	return val;
}

long double operator"" _mi(long double val) { //_mi 사용자 리터럴 
	return val * km_per_mile;
}

int main(){

	long double distance_1 = 1.0_km; // 킬로미터는 그대로
	long double distance_2 = 1.0_mi; //마일은 킬로미터 단위로 변환

	cout << distance_1 + distance_2 << " km" << endl; //km로 출력

	return 0;
}

 

 

_km은 전달받은 값을 그대로 반환

 

_mi는 전달받은 값을 킬로미터로 변환하여 반환

 

 

etc-image-5

728x90

'프로그래밍 > C++' 카테고리의 다른 글

C++의 연산자와 표현식  (0) 2025.03.01
C++의 변수 형식 변환  (0) 2025.02.12
L-value와 R-value??  (0) 2025.02.12
C++ 변수 유효 범위  (0) 2025.01.23
C++에서 사용하는 데이터 형식  (0) 2024.12.30