태그 보관물: c-preprocessor

c-preprocessor

C ++ 헤더 파일에 #ifndef 및 #define이 사용되는 이유는 무엇입니까? 헤더 파일의 시작 부분에서 다음과

헤더 파일의 시작 부분에서 다음과 같은 코드를 보았습니다.

#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 사이의 부분 만 그렇지 않으면 실행되지 않습니다. 이렇게하면 식별자, 열거 형, 구조 등을 다시 선언하지 못하게됩니다.


답변