헤더 파일의 시작 부분에서 다음과 같은 코드를 보았습니다.
#ifndef HEADERFILE_H
#define HEADERFILE_H
그리고 파일의 끝에는
#endif
이것의 목적은 무엇입니까?
답변
이를 #include guards 라고 합니다.
헤더가 포함되면 고유 한 값 (이 경우 HEADERFILE_H
)이 정의 되어 있는지 확인합니다 . 정의되지 않은 경우이를 정의하고 나머지 페이지로 계속 진행합니다.
코드가 다시 포함되면 첫 번째 코드가 ifndef
실패하여 빈 파일이 생성됩니다.
유형, 열거 형 및 정적 변수와 같은 식별자의 이중 선언을 방지합니다.
답변
#ifndef <token>
/* code */
#else
/* code to include if the token is defined */
#endif
#ifndef
주어진 토큰이 #defined
파일 또는 포함 된 파일의 이전에 있는지 확인합니다 . 그렇지 않은 경우에는 코드와 닫는 사이의 코드 #else
또는 #else
존재 하지 않는 경우 #endif
명령문이 포함됩니다. #ifndef
파일이 포함되면 토큰을 정의하고 해당 파일의 맨 위에 토큰이 설정되지 않았는지 확인하여 헤더 파일을 dem 등원으로 만드는 데 종종 사용됩니다.
#ifndef _INCL_GUARD
#define _INCL_GUARD
#endif
답변
이렇게하면 동일한 헤더 파일이 여러 번 포함되지 않습니다.
#ifndef __COMMON_H__
#define __COMMON_H__
//header file content
#endif
이 헤더 파일을 여러 파일에 포함했다고 가정하십시오. 따라서 __COMMON_H__이 처음 정의되지 않으면 정의되고 헤더 파일이 포함됩니다.
다음에 __COMMON_H__이 정의되었으므로 다시 포함되지 않습니다.
답변
그것들을 ifdef라고 부르거나 가드를 포함합니다.
작은 프로그램을 작성하는 경우 필요하지 않은 것 같지만 프로젝트가 커짐에 따라 의도적으로 또는 실수로 한 파일을 여러 번 포함 할 수 있으므로 이미 선언 된 변수와 같은 컴파일 경고가 발생할 수 있습니다.
#ifndef checks whether HEADERFILE_H is not declared.
#define will declare HEADERFILE_H once #ifndef generates true.
#endif is to know the scope of #ifndef i.e end of #ifndef
선언되지 않은 경우 #ifndef가 true를 생성하면 #ifndef와 #endif 사이의 부분 만 그렇지 않으면 실행되지 않습니다. 이렇게하면 식별자, 열거 형, 구조 등을 다시 선언하지 못하게됩니다.