티스토리 뷰
반응형
마이크로소프트 Visual Studio를 사용하면서 Visual C++를 사용하다보면 종종 새 헤더를 생성하면서 '#pragma once'라는 코드와 생성되는 것을 확인할 수 있다.
또, C 또는 C++ 헤더를 작성하면서 헤더가 중복돼서 포함되지 않도록 매크로를 사용하는 경우가 많..지 않고 모든 경우에서 사용한다.
#ifndef __SOME_OF_HEADER_H #define __SOME_OF_HEADER_H // ... code ... #endif
매크로의 이름은 다양하게, 각자의 코딩 스타일에 맞게 작성하겠지만 이런 뉘앙스의 코드를 작성해서 중복된 헤더 포함을 피할 것이다.
하지만 이쁘지도 않고 vim같은 도구로 코드를 작성하는 사람들은 귀찮거나 보기 나쁜 코드가 될 수도 있다. 이를 한번에 해결해주는 것이 #pragma once 이다.
말 그대로 한번만 작동하게끔 하라는 뜻인데 맨 위 한 줄만 작성하는 것으로 그 기능을 하게 된다.
문제는 이 기능이 비표준으로 어디에서나 생성가능한 코드라는 것을 보장하지는 않는다.
물론 MSVC뿐만 아니라 GCC나 clang같은 컴파일러도 모두 지원은 하니, 굳이 표준에 꼭 맞는 프로그램을 짜야하는 라이브러리 같은 프로젝트가 아니라면 사용하는 것도 괜찮을 것 같다.
표준에 대해서 이야기 하자면 #pragma 자체는 표준 지시어가 맞지만 once가 표준이 아닐 뿐이다.
Preprocessor가 인식하는 차이가 있었지만(이전에는 #ifndef는 매번 파일을 불러오고 읽고 확인한 후 정의되어있었다면 무시하는 방법) 이제는 많은 전처리기들이 기억하는 방식이 되어 같은 원리로 작동된다.
반응형
'낙서' 카테고리의 다른 글
C와 C++에서의 구조체 차이 (0) | 2018.01.14 |
---|---|
빠른 프로그램, 동적 프로그래밍 (0) | 2017.10.19 |
Java에는 포인터가 없다? (0) | 2017.10.19 |
C++ 포인터 주소값 저장하기 (0) | 2017.10.12 |
C++ 동적할당의 고찰 (0) | 2017.08.07 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- LG
- rule_of_three
- c++11
- f320s
- rule_of_five
- C++ 업캐스팅
- cyanogenmod
- G2
- g2 korea
- f320k
- vector
- C++
- c++ 상속
- dokdo project
- PipelineContext
- 객체지향
- d802
- OOP
- inline class
- Kotlin
- CM10.2
- dokdo-project
- linaro
- c++ struct
- Java
- C
- nodeal
- 포인터
- CM11
- dokdo 4.0.3
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함