Program Language/C & C++

[C++] 미리 정의된 매크로

야곰야곰+책벌레 2022. 1. 13. 11:31
728x90
반응형

몇 가지 매크로는 컴파일러에서 미리 정의한다.

  • __cplusplus. C++컴파일에 정의되어 있다.(C컴파일에는 없음)
  • __DATE__. "yyyy:mm:dd" 형식의 날짜
  • __TIME__. "hh:mm:ss"형식의 시간
  • __FILE__. 현재 소스 파일의 이름
  • __LINE__. 현재 소스 파일 내의 소스 라인 번호
  • __FUNC__. 현재 함수의 이름을 지정하는 구현 정의 구현 정의된 C-스타일 문자열
  • __STDC_HOSTED__. 구현이 호스팅 되는 경우 1 그렇지 않으면 0. 또한 구현 시 몇 가지 매크로가 조건부로 정의됨
  • __STDC__. C 컴파일에서 정의됨(C++ 컴파일에서는 없음)
  • __STDC_MB_MIGHT_NEQ_WC__. wchar_t에 대한 인코딩에서 기본 문자 집합의 구성원이 일반 문자 리터럴의 값과 다른 코드 값을 가질 수 있는 경우 1
  • __STCPP_STRICT_POINTER_SAFETY__. 구현에 엄격한 포인터 안정성이 있는 경우 1 그렇지 않으면 정의되지 않음
  • __STCPP_THREADS__. 프로그램이 둘 이상의 실행 스레드를 가질 수 있는 경우 1. 그렇지 않으면 정의되지 않음.

예를 들면,

cout << __FUNC__ << "() in file " << __FILE__ << " on line " << __LINE__ << "\n";

대부분의 C++ 구현에서는 사용자가 명령줄이나 다른 형태의 compile-time 환경에서 임의의 매크로를 정의할 수 있다. 예를 들어 NDEBUG는 컴파일이(일부 구현 별) '디버그 모드'에서 수행되고 assert() 매크로에서 사용되지 않는 한 정의된다. 이것은 유용할 수 있지만 소스 텍스트를 읽는 것만으로는 프로그램의 의미를 확신할 수 없음을 의미한다.

728x90
반응형

'Program Language > C & C++' 카테고리의 다른 글

[C++] Finally  (0) 2022.01.13
[C++] 리소스 관리  (0) 2022.01.13
[C++] constexpr 함수  (0) 2022.01.13
[C++] 함수의 지정자와 수정자  (0) 2022.01.13
[C++] 명시적 유형 변환  (0) 2022.01.12