누구나 STRAY 정의를 정의 할 수 있습니까? . 두 번째 질문 : 나는 책을 읽으면서 "21 일 동안 C++을 가르쳐 라."그는 DEBUG라는 용어를 정의해서는 안된다고 말했다. 왜 그런지 알고 싶습니까? 질문의C++ 전 처리기 정의
답변
첫 번째 부분 :
잃은 정의이 가장 가능성이 의도적되지 않습니다 일부 다른 코드 (또는 실제 코드)의 동작을 변경하는 처리기 정의입니다. 예를 들어, 헤더 파일을 작성하고 다음 줄을 사용할 수 있습니다
#define main is_awesome
이것은 아마도 심지어 코드에서, 헤더 파일에 직접적인 영향을주지 않습니다,하지만 다른 사람이이 헤더 파일을 포함 이 빗나가는 정의은 해당 함수의 이름을 int is_awesome(int argc, char **argv)
으로 바꿀 것이고 갑자기 응용 프로그램에 대한 main
엔트리 포인트가 없기 때문에 int main(int argc, char **argv)
함수를 포함하는 파일이 문제가 될 것입니다!
마찬가지로 매크로 DEBUG
은 이러한 문제를 일으킬 수 있습니다. 일반적으로 DEBUG
은 디버그 코드 작성 여부에 따라 컴파일러 자체에서 정의해야합니다 (컴파일러에 따라 직접 설정해야 할 수도 있음). 자신의 어딘가에서 DEBUG
을 정의한다면 실제로 릴리스 빌드를 작성하더라도 디버그 코드를 트리거 할 수 있습니다.
일반적으로 이러한 버그 나 문제는 추적하기가 어려울 수 있습니다. 특히 전처리 된 코드를 보는 방법을 모르는 경우 (기본 코드에서 문제/오류를 볼 수없고 보고 될 가능성이 가장 높은 행 번호도 해제됩니다).
어떻게 피하려면? 당신의 삶과 훨씬 쉽게 다른 사람의 것을 만들 것 세 가지 간단한 규칙 :
- 당신이 정말로 (컴파일시 코드 포함을 제어하기 위해, 예를 들어)에있을 경우에만 처리기 정의를 사용합니다.
- 헤더 파일 외부에서 필요하지 않은 항상 사전 처리기 정의를 정리하십시오 (
#undef
). - 일부 전역 전 처리기 정의를 사용해야하는 경우 이름을 고유하게 지정하십시오 (예 : 라이브러리 나 프로젝트 이름 앞에 붙이면됩니다. 예 :
DEBUG
을 정의하는 대신MYLIB_DEBUG
을 사용할 수 있습니다.
ok 천재. 나는 네 thourough- 유용한 설명을 주셔서 감사합니다. – ProDev7
- 1. Visual C++ 전 처리기 정의
- 2. 플랫폼 C 전 처리기 정의
- 3. 전 처리기 정의
- 4. C++ 전 처리기 변수
- 5. C++ 전 처리기 지시문
- 6. 지수 전 처리기 매크로 정의
- 7. Visual C++ 덤프 전 처리기 정의
- 8. 전 처리기 정의 - 빌드시 프롬프트?
- 9. C++ 전 처리기 결정
- 10. C 전 처리기 라이브러리
- 11. & 심볼의 C++ 전 처리기
- 12. C++ 전 처리기 푸시
- 13. C++ #define 전 처리기
- 14. 사용자 정의 gcc 전 처리기
- 15. Doxygen에서 전 처리기 정의 문서화
- 16. C# 전 처리기 클래스 접근성
- 17. C 전 처리기, 매크로 "오버로드"
- 18. 접기 C VIM의 전 처리기
- 19. C- 매크로를 정의하는 전 처리기
- 20. C 전 처리기, 재귀 매크로
- 21. C 컴파일러 전 처리기 출력
- 22. 전 처리기 지시문 conio.h C++
- 23. C# 전 처리기 매크로 대체
- 24. SWIG의 전 처리기 매크로
- 25. C에서 작동하지 않는 전 처리기 정의
- 26. gcc : 전 처리기 목록 전달 정의
- 27. C, Objective-C 전 처리기 출력
- 28. Notepad ++ C/C++ 전 처리기 강조 표시
- 29. cmake를 통해 전 처리기 매크로 정의
- 30. vs08에서 _win32_wce의 전 처리기 정의 설정 방법
아마도 책을 읽어야합니다. – progrenhard
내가 아는 한 'DEBUG'에는 아무런 문제가 없습니다. 하지만 밑줄로 시작하는 식별자를 사용하지 않으려 고합니다. 여러 가지 방법으로 구현에 사용하도록 예약되어 있으므로 발가락을 밟을 수도 있습니다. –
확인. 고맙습니다. 나는 그것을 가지고있다 – ProDev7