• 식별자

"밑줄문자 두개"로 시작

"밑줄문자+대문자"로 시작

 

이 두가지는 예약어의 규칙에 속하기 때문에 훗날 문제가 될 수 도있으니

 

예약어 목록에 없다면 실행은되나 되도록 피하자

#include <iostream>

int main() {

	int __ABC = 3;
	int _Abc = 2;
	
	std::cout << __ABC << _Abc; //모두 출력 성공
	
	return 0;
}

 


 

  • 정수 자료형

소수부가 없는 자료형

 

char, short, int, long 같은 자료형, 크기는 컴파일러마다 다를 수 가 있다

 

 

※ 보통 8비트 = 1바이트 이지만 c++에서는 컴파일러의 기본 문자 세트를 수용할 수 있는 최소한의 비트수가 바이트!

ex) ASCII는 최소 8비트로 나타내므로 ASCII가 기본 문자 세트라면 8비트가 1바이트가 된다

 

정수 상수가 저장되는 자료형은 최소 int형이다

 

문자를 정수형으로 표현한다 (Char)

char형은 문자와 숫자를 저장한다

 

wchar_t형은 1바이트로 나타낼수 없는 문자를 위해 탄생

상수형은 접두사로 'L'이 붙는다

 


 

  • 멤버 연산자 (memvership operator)

객체의 멤버 사용할 경우 사용

 

ex) std::cout.puts(); 에서

1. " std::cout " // 2. " . "  // 3. " puts(); "

1.(객체)  2.(멤버연산)  3.멤버(함수)

 


 

  • const

상수, 값이 변화하지 않는다.

 

한마디로 데이터를 값이변하지않게 상수화 시킨다

 

그렇기에 무조건 선언과 동시에 정의로 초기화해야한다

[단 메모리에 올라갈때만 초기화 해주는듯 하다]

사용하지 않아 에러 X
바로 에러
해결

※클래스는 생성자에 이니셜라이저로 초기화, [ C++11 부터 바로 초기화 가능 ]

 

보통 관습으로 모두 대문자로 식별자를 만든다 

 

 

위치에 따라 상수화되는게 다르다!

const의 위치에 따라 어느게 상수화 되는지 달라진다

※ const int * == int const *

 

멤버 함수 한정으로 함수의 선언 뒤에 const를 붙일 수 있는데

붙이게 되면 함수 내에서 멤버변수를 변경할수 없게 만든다

접근지정자는 상관없다

 


 

  • 지수 표기법

ex) 314.234

가수부(기본값) 3.14234 // 지수부(스케일) E+3 ( 10의 3제곱이라는 뜻 )

=> 3.14234E+3  ( = 31.4234E+2 최종값이 똑같으면 가수부에 소수점을 어디에 찍든 상관없는듯하다 ) 

 

저장하는 방식은 위의 지수표기법과 비슷한데  [부호(0 or 1), 가수부(기본값), 지수부(스케일)]로 나누어 저장

 


 

  • 부동 소수점

부동자세의 움직이지 않는다는 느낌이 아닌

 

뜰 부, 움직일 동/ 공중에 떠서 (소수점이) 움직인다는 느낌 = 소수점을 움직이므로 여러 자리의 소수점을 표현 가능

 

※ 부동소수점 오차의 이유

https://ddidding.tistory.com/57

 


 

  • static_cast<> ()

자료형 변환

보통 형변환과 마찬가지로 사용한다고 데이터형이 영구적으로 바뀌는게 아니라 일시적이다

 

저렇게 상수를 포인터로 캐스팅하는건 안되나보다

 

주소연산자를 사용해서 다른 형의 주소로 캐스팅도 안된당

그냥 선형변환 후연산이 된다는 추가 사진


 

  • auto

"초기화 된 변수만" 자동으로 자료형을 추론해 정의해주는 키워드

 

편리하다! 하지만 아무곳이나 사용한다면 다른사람이나 훗날 코드를 본다면 욕나올듯

 

아직은 모르지만 나중에 복잡한 데이터형을 다룰때 가끔 사용할거같다

  • 전처리기 (preprocesser)

 

컴파일직전에 실행되는 프로그램

 

#으로 시작하여 줄바꿈으로 끝난다

 

 


 

  • name space

식별자의 영역을 생성

 

같은 식별자를 구분할수있게 해줌 & 확실한 출처의 식별자를 사용할수있게 한다

 

근데 중복정의가 가능한가보다

[ 하지만 식별자까지 중복은 불가능 ]

 

#include <iostream>

namespace AA {
	int a = 1;
}

namespace AA {
	int b = 2;
}

int main() {

	//실행가능
	std::cout << AA::b;
	
	return 0;
}

 

근데 내부에 중복으로 사용했을 경우 식별자까지 중복이 가능하다 ㅋㅋ [ 내부 중첩은  C++17부터 가능 ]

#include <iostream>

namespace AA {
	int a = 1;

	namespace AA {
		int a = 3;
	}
}

namespace AA {
	int b = 2;
}

int main() {

	std::cout << AA::a; // 1출력
	std::cout << AA::AA::a; // 3출력
	
	return 0;
}

 

namespace의 이름이 길다면 별명도 붙일수있다


using으로 간편하게 사용할수 있는데 using이 들어간 영역안에서만 유효하다

#include <iostream>

namespace AA {
	int myInt = 1;
}

void test() {

	//test()안에서만 AA를 사용시 정의를 하지 않아도 된다
	using namespace AA;

	//AA안에있는 myInt
	std::cout<< myInt;
}

int main() {

	//using namespace AA가 없으니 AA를 정의해줘야 한다

	std::cout << myInt; // 오류
	
	return 0;
}

using으로 간편하게 사용할수 있는데 using이 들어간 영역안에서만 유효하다

 

 

 


 

  • 함수 선언
//테스트 함수 선언
void A(int n) {

	std::cout << n;
}

int main() {

	A(5);

	return 0;
}

main에서 A가 호출되었을 때 일어난 일은

 

1. 함수 A시작 

 

2. 지역변수 n 생성

 

3. 지역변수 n에 5가 대입

 

이다. 

 

이걸 확실하게 알고있으면 나중 매개변수에 포인터 장난질 해놓은걸 덜 헤멜수있다

 

 


 

  • 키워드

특별한 의미가있는 미리 정해놓은 예약된 식별자,

 

사용자가 다른 의미로 사용할수 없다.

(단 사용 할 수 있는 언어도 있음 / C++은 X )

 

int for = 0;  // for도 키워드중 하나이기에 따로 사용 불가능

 

 

예약어라는 비슷한 개념도 있는데

 

키워드는 어떠한 사용의미를 지니고 있는 말이고

 

예약어는 사용하지 않지만 사용자에게 혼란을 막고

ex) java에서 const는 사용하지 않지만 예약어로 정해져있기에 사용 불가능하다 ( final사용 )

 

다음 버전이 업그레이드 될때의 사용하게 될지도 모르는 단어들을 미리 예약어로 정해놓아 사용못하게 해놓는다

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=youmasan&logNo=130025032660

 

 

 

Win Api를 정리하던 중에 클래스만 따로모아서 저장해두려고 복사 후에 기본적인 틀만 남기고 다 지운 후에

 

실행을 시켰는데.. 이게 갑자기 오류가 다다다 나오면서 안되는거다..!

 

 

나 같은 경우 

(좌) Window.cpp  (우) Window.h

 

오류 목록

나는 당연히 cpp와 헤더 파일 간의 호환에 있어서 문제가 있나? 싶어서 계속 찾아봤지만..

 

쥰내 빡친 와중에... 정말로 이 둘은 문제가 없는거 같아 혹시 관련 된 include된 파일에 문제가 있나 보았는데

 

ㅋㅋㅋㅋㅋㅋㅋ

';'가 정말로 없었다

 

해결^~^

 

이번에 느낀건 정말 아직도 시야가 굉장히 좁은거 같고..

 

아무리 봐도 문제가 없다면 점점 멀리서 크게 봐야하는데 그 이상을 생각을 못하는거 같다..

 

이런일이 종종 자주 있어서 시간을 많이 뺏기는데 다음부터 더 의식적으로 생각해야겠다

'C++ > 오류' 카테고리의 다른 글

멤버 이니셜라이저 순서  (0) 2022.04.26

+ Recent posts