본문 바로가기

C, C++

(48)
열거형 열거형은 변수 타입 중 하나로 다음과 같이 씁니다. enum [(타입 이름)] { (멤버1)[=(값)], (멤버2)[=(값)], (멤버3)[=(값)], ... }[(변수명)]; enum Fruit { APPLE, BANANA, GRAPE }fruit; //Fruit fruit;도 가능 fruit = APPLE;//fruit = Fruit::APPLE;도 가능 이런 식으로 값의 종류가 숫자나 문자가 아닌 여러 멤버를 갖고 있습니다. 이 멤버들은 내부적으로는 숫자(int)로 취급됩니다. 이 멤버들에 =(값)을 하지 않으면 첫 번째 값은 0이 되고 그 뒤로 =(값)을 한 부분 또는 끝까지 1씩 증가합니다. enum Animal { DOG,//0 CAT,//1 PIG = 3,//3 COW//4 }animal; ..
#pragma warning #pragma warning은 컴파일러가 경고를 출력하는 방법을 바꿔줍니다. #pragma warning(제어문:경고 번호) once:번호 : 경고를 한 번만 출력합니다. default:번호 : 기본값으로 재설정합니다. disiable:번호 : 경고를 출력하지 않습니다. error:번호 : 경고 대신 에러를 출력합니다. 레벨:번호 : 경고의 레벨을 변경합니다.(1,2,3,4) 경고 번호를 여러 개 써서 #pragma warning(disable:4705 4706) 이렇게 한 번에 여러 개를 동시에 disable 할 수 있고 #pragma warning(disable:4705; once:4706) 이렇게 여러 명령을 한 줄에 처리할 수 있습니다. 그리고 경고 번호가 0~999번까지는 해당 숫자에 4000을..
#pragma once test1.h struct Test1 { int a; int b; }; test2.h #include "test1.h" struct Test2 { Test1 a; }; test3.h #include "test1.h" struct Test3 { Test1 a; char b; }; test.cpp #include "test2.h" #include "test3.h" 이때, test2.h와 test3.h는 공통적으로 test1.h를 포함하고 있는데 test.cpp에서 test2.h와 test3.h를 포함하는 바람에 test1.h이 2개 포함돼 버려 헤더 중복이 됩니다. 즉, Test1가 두 번 정의되어 오류가 납니다. 문제를 해결하기 위해서 test1.h 코드를 다음과 같이 바꿉니다. #ifndef TEST1_..
미리 정의된 매크로 #define으로 정의하지 않아도 컴파일러에서 미리 정의된 몇 가지의 매크로가 있습니다. 이것들은 #undef할 수 없습니다. __cplusplus : C++로 컴파일할 때 정의됩니다. 그렇지 않을 때는 정의되지 않습니다. #ifdef __cplusplus//C++언어로 컴파일할 때 #endif __DATE__ : 소스가 최후 컴파일 된 때의 날짜(문자열) 2019년 1월 5일 -> Jan 5 2019값이 됩니다. __TIME__ : 소스가 최후 컴파일 된 때의 시간(문자열) 17시 39분 30초 -> 17:39:30값이 됩니다. __FILE__ : 이 매크로가 사용된 위치의 소스 파일 경로와 이름(문자열) __LINE__ : 이 매크로가 사용된 곳의 줄번호(숫자) C:\test\test.cpp 코드 #..
#error #error는 에러를 발생시키고 컴파일러 창에 에러 메시지를 출력해주는 역할을 합니다. #error (메시지)//""없이 씁니다.
#undef #undef는 정의된 매크로 상수를 삭제하는 매크로입니다. #undef (매크로 상수 이름) #undef를 사용하면 이미 정의된 매크로 상수 값을 바꿀 수 있습니다. #define ABC 1 #undef ABC #define ABC 2 ​
조건 매크로 #if는 일반 if 문처럼 값(조건)이 참일때 해당 블록을 실행합니다. #elif(elseif), #else도 마찬가지입니다. 다만, 일반 if 문처럼 {}로 시작과 끝을 구분하지 않고 끝부분에 #endif를 추가합니다. 또, 조건문에 ()를 쓰지 않아도 됩니다. #define LEVEL 1 #if LEVEL==1//#if (LEVEL==1)와 같은 뜻입니다. //코드1 실행 #elif LEVEL==2 //코드2 실행 #else //코드3 실행 #endif #if는 매크로라서 컴파일 시간에 실행됩니다. 그래서 LEVEL이 1인 경우 컴파일 되면 코드1만 실행되고 코드2, 3은 일반 if 문과 다르게 아예 없는 코드가 됩니다. 그리고 #if는 매크로 값을 평가하기 때문에 매크로만 넣어 비교해야 합니다. 만..
#, ##, \ #include #define PRINT(str) printf("출력:"#str) int main() { PRINT(안녕); return 0; } #은 매크로 함수에서 인수 앞에 쓸 수 있으며, 인수의 값을 문자열로 바꾸는 기능을 합니다. 여기서 str이 안녕으로 변해 "출력:"#안녕이 되고 이게 문자열로 변환돼서 "출력:""안녕" 즉, "출력:안녕"이 됩니다. ​ ##은 양옆 값 사이에 위치하며 두 값을 합치는 기능을 합니다. #include #define PRINT2(a,b) printf(a##b) int main() { PRINT2("안녕", "잘가"); return 0; } a, b가 안녕,잘가로 바뀌고 두 개가 합쳐져 안녕잘가가 됩니다. 여기서 ##가 빠지면 a, b가 아니라 ab 단일 문자가 ..