본문 바로가기

Programming/C, C++

(11)
strtok()의 작동과정중 유의점 char *strtok(char *strToken, const char *strDelimit); strToken에서 찾은 구분자(strDelimit)는 NULL값으로 바뀜. 원본 데이터에 변화가 생기므로 조심해야한다더라
자꾸 잊어버려서 써두는 scanf 경고 무시 #define _CRT_SECURE_NO_WARNINGS 프로젝트 설정에서 SDL checks No 등등
C++ 클래스에대해 그냥 C언어에서 구조체가 있었다. 사용자정의 자료형, 사용자지정 자료형 등등 아무튼 의미는 같겠지만 위와같은 형식으로 서로다른 자료형들을 하나로 묶어주는 것이다. C++에도 구조체와 비슷한 녀석이 있다. 바로 '클래스' 라는 것이다. 개념면에서는 많이 다르지만, 내 개인적인 경험상 구조체를 떠올린 덕분에 '클래스'에 대해 감을 잡기 쉬웠다. 그렇다면 제대로 클래스에 대해 정리를 해본다. 클래스의 형태 예시 -기본적인 형태- class 클래스명 { private: public: } -메모- 클래스 내부에는 보통 private과 public과같은 접근제어자*로 자료들을 구분하여 사용한다. 필요에따라 활용하면 되는데, 비주얼스튜디오 버전이나 설정에 따라 기본적으로 private: 과 public: 이 미리 작..
scanf와 scanf_s의 차이 scanf의 경우 입력받고자하는 자료형의 크기를 벗어난 입력값이 들어왔을경우 에러가 발생하지만scanf_s의 경우는 에러를 발생시키지 않고 아무런 값도 입력받지 않은것으로 처리한다. 안정성 면에서는 scanf_s 쪽이 안정적일수 있겠으나개발중에 코드에 구조적 문제가 발생하거나 했을경우에도 아무런 에러를 띄우지 않는다면어디서 문제가 발생하였는지 찾아내기가 힘들것이다.scanf로 코딩을 하는 편이 더 좋을듯..
메모리의 동적할당 malloc malloc(할당크기) malloc은 stdlib.h 헤더파일 내의 함수이므로 2줄의 #inlcude라인이 필요하다. malloc함수는 void포인터를 반환하는 함수이므로 10줄에서 int포인터인 ptr에 맞춰서 int*로 자료형을 바꿔 사용했다. 예제는 malloc을 이용해 배열을 만든것과 비슷한 기능을 구현한 것이다. 다음은 위 코드를 실행하고 5를 입력시켰을때의 결과이다. free(주소); 프로그램 실행중 동적할당 된 메모리를 반환한다.
구조체크기할당조절 pragma pack #pragma pack(push, 크기) #pragma pack (pop) 주로 구조체에서 서로다른 자료형을 이용하는경우 메모리 최적화를 위하여 사용한다. 예시의 출력결과는 9이다. int형, char형, float형이 각각 하나씩 있으니 총 9Byte의 공간을 차지하기 때문이다. 만약 3,10줄을 지운뒤 코드를 실행시켜본다면 출력결과는 12가 될 것이다. 가장 큰 자료형의 크기가 4Byte이기 때문에 모든 자료형에 똑같이 4Byte씩을 할당하였기 때문이다. #pragma pack의 분할 크기는 1,2,4,8,16 등이 모두 가능하다.
열거형 enum enum내부의 상수들은 자동적으로 0부터 순서대로 1,2,3,4,,,의 값들을 부여받게된다. enum내부에서 사용자가 임의로 값을 부여할수도 있다.
#if ~ #endif #if 조건 코드 #endif 필요한 상황에 따라 #if~#endif 내부의 코드를 실행하거나 하지않게 할수있다. 조건에는 #define으로 선언한 변수를 이용하여야한다. #if #elif #else #endif 등등 여러 형태가 있다. 9번째 줄의 USER_LOCAL의 국가설정에 따라 NAME의 길이를 조절할 수 있다.