#undef 앞에 #ifdef가 언제 필요합니까?
많은 C 및 C++ 파일에서 다음과 같은 매크로를 볼 수 있습니다.
#ifdef X
#undef X // no statements in between
#endif
저는 다음과 같이 간단히 쓰는 것이 적절하다고 생각합니다.
#undef X
매크로의 경우X정의되지 않았고, 그러면.#undef효과가 없어야 합니다.
독립 실행형으로 놓아도 괜찮습니까?#undef매크로 정의를 해제하려면 어떻게 해야 합니까?그것이 코딩 연습을 나쁘게 만드나요?
ISO C99 6.10.3.5 제2항 참조.
양식의 전처리 지시문
# undef identifier new-line지정한 식별자가 더 이상 매크로 이름으로 정의되지 않도록 합니다.지정한 식별자가 현재 매크로 이름으로 정의되지 않은 경우 무시됩니다.
Visual C++ 6(비주얼 C++ 6은 표준 준수가 나쁘기로 악명 높음)에서도 다음과 같은 이점을 제공합니다.
다음을 적용할 수도 있습니다.
#undef이전 정의가 없는 식별자에 대한 지시문입니다.이렇게 하면 식별자가 정의되지 않습니다.매크로 교체는 다음 기간 내에 수행되지 않습니다.#undef진술들.
역사의 유물이라고 확신합니다.jdigital의 답변에서 언급한 것처럼 K&R 2판은 다음과 같이 말합니다.
알 수 없는 식별자에 #undef를 적용하는 것은 잘못된 것이 아닙니다.
하지만, 그 문장은 1978년 판에는 없습니다.표준 컴파일러 이전 버전의 경우 오류가 자주 발생할 것입니다.#undef정의되지 않은 매크로
현재 정의가 없는 매크로에 대해 #undef를 해제할 수 있습니다.
저는 그것이 이미 보편적인 관행이었다면, 그것을 근거로 내세울 필요가 없을 것이라고 생각합니다.
이 모든 것이 현대 코드에서 필요하지는 않지만 실제로 아프지도 않습니다.
커니헌과 리치(2판)는 당신의 의견에 동의합니다.
편집: 출처 인용(섹션 A12.3):
양식의 제어선
# undef식별자식별자의 전처리기 정의를 잊어버리게 합니다.적용하기에 잘못된 것이 아닌 경우
#undef알 수 없는 식별자로.
언급URL : https://stackoverflow.com/questions/9090536/when-do-we-need-ifdef-before-undef
'programing' 카테고리의 다른 글
| Gradle 버전을 어떻게 결정합니까? (0) | 2023.08.17 |
|---|---|
| SQL Server에서 날짜 문자열을 날짜 시간과 비교하시겠습니까? (0) | 2023.08.17 |
| HTML5 텍스트 영역 자리 표시자가 나타나지 않음 (0) | 2023.08.17 |
| Android 웹 보기 느림 (0) | 2023.08.17 |
| 양호한 C 문자열 라이브러리 (0) | 2023.08.12 |