본문 바로가기
C++/C++ 기초 문법

[C++] 변수 variable, format(식별자가 정의되지 않습니다.)

by 후야- 2023. 12. 26.

📙 어트리뷰트

-> 어트리뷰트는 소스 코드에 벤더에서 제공하는 정보나 옵션을 추가하는 메커니즘이다.

 

◾ [[nodiscard]]

-> 함수가 호출될 때 리턴값에 아무런 작업을 하지 않으면 경고 메세지를 출력한다.

-> 이 기능은 에러 코드를 리턴하는 함수 등에 활용할 수 있다.

-> C++ 20 부터는 이유를 설명하는 스트링을 추가할 수 있다.


[[myabe_unused]]

-> 뭔가 사용하지 않았을 때 컴파일러가 경고 메세지를 출력하지 않도록 설정하는 데 사용한다.


[[noreturn]]

->호출 지점으로 다시 돌아가지 않는다.


[[deprecated]]

->지원 중단된 대상임을 지정하는 데 사용한다.


[[likely]], [[unlikely]]

-> 컴파일러가 최적화 작업을 수행하는 데 도움을 줄 수 있다.

 

 

 

변수는 코드 안 어디에서나 선언할 수 있다.

0. 타입 종류

// signed = 평소에 생략되어 있음
(signed) int       : 정수 표현 4byte

(signed) short     : 정수 표현 2byte

(signed) long      : 정수 표현 4byte
(signed) long long : 정수 표현 8byte

// unsigned = 0 이상만 (양수만)
unsigned int       
unsigned short
unsigned long
unsigned long long

float              : 부동소수점수 4byte
double             : 부동소수점수 8byte
long double        : 부동소수점수

char               : 단일문자 1byte
unsigned char
signed char

bool               : 부울 타입으로 true 나 false 중 하나의 값을 가진다.

1. 숫자 경곗값

숫자의 경곗값(정수의 최댓값)을 알아내는 방법

클래스 템플릿을 사용하려면 꺽쇠괄호 사이에 원하는 타입을 지정해야 한다.

#include <iostream>
#include <format>

using namespace std;

int main()
{
	cout << "int:\n";
	cout << format("Max int value: {} \n", numeric_limits<int>::max());
	cout << format("Min int value: {} \n", numeric_limits<int>::min());
	cout << format("Lowest int value: {}\n", numeric_limits<int>::lowest());

	return 0;
}


2. 영 초기화

변수는 유니폼 초기자(균일 초기자) {0}을 이용하여 0으로 초기화할 수 있다. 이 때 0은 생략해도 된다.

int main()
{
	float myFloat {};     // 0.0
	//float myFloat = 0;
	int myInt{};          // 0
	//int myInt = 0;

	return 0;
}

-> { } 같은 경우 = 0; 을 의미한다.  어떤 걸 사용하든 상관없다.


3. 캐스트

캐스트는 변수가 실행 도중 타입을 명시적으로 바꾸는 경우를 말한다. 예를 들어 int 를 float로 캐스트 할 수 있다.

C++ 에서 변수의 타입을 변환하는 방법은 세가지가 있다.

#include <iostream>

int main()
{
	float myFloat{ 3.14 };
	int i1{ (int)myFloat };     // c 언어 방식
	int i2{ int(myFloat) };     // 거의 사용하지 않는다.
	int i3{ static_cast<int>(myFloat) };

	return 0;
}

 

💡 format 사용법 (식별자가 정의되지 않습니다.)

#include <iostream>
#include <format>

using namespace std;   // std 생략 가능

int main()
{
	cout << format("  ", ) << endl;
}

-> format 을 사용하려면 include로 <format> 을 불러와야 한다.

그럼에도 불구하고 format 의 식별자가 정의되지 않습니다라고 나온다면 디버그 속성에서 언어 표준을 바꿔야한다.

format 은 C++ 20 부터 지원하기 때문이다. ❗❗  이거 찾느라 2시간을 소비했다.

맨 밑에 디버그 속성을 들어간다.

 

C++ 언어 표준 옆에 문구에서 c++20으로 바꿔준다.

 

'C++ > C++ 기초 문법' 카테고리의 다른 글

[C++] 함수  (1) 2023.12.26
[C++] 3방향 비교 연산자  (0) 2023.12.26
[C++] 조건 연산자(?:) -> 삼항 연산자  (0) 2023.12.26
[C++] 조건문 if , switch 문  (0) 2023.12.23
[C++] 구조체  (0) 2023.12.23