2014-12-19 2 views
-3

헤더 파일에 #define이 있으면이 헤더를 포함하는 소스 코드에서 사용할 수 있습니까? [예 : #define Bytef unsigned int]#define (preprocessor directives)가 헤더 파일에서 상속받습니다.

+1

이것은 좋은 질문이 아닙니다. 왜 물어 봤어? 너 해봤 니? –

+0

@SouravGhosh 버그를 고치려고합니다. zlib의 changelog에서 정의 된 typedef를 찾았습니다. 그래서 우리는 소스에 "정의"를 추가해야하기 때문에 변경이 정의 된 것으로 생각했습니다. 나는 상속을 정의하고 결과를 찾을 수 없다는 구글을 시도했다. 그래서 나는 묻어야한다고 생각했다. –

+0

전 처리기는 포함 된 파일의 내용으로'# include' 지시자를 대체 할 것이다. 전처리 된 소스를 얼마 동안 보려고하는 것이 좋습니다. –

답변

1

네, 그렇게 할 수 있습니다.

imagin 당신이 파일을 다음과 같이

이 작품을 포함한다.

header.h 

내용 :

void HappyMakerPrototype(); 
void AnotherPrototype(); 

및 소스 파일

src.c 

내용 :이 전처리를 통해 실행됩니다 컴파일의 첫 번째 단계에서

void dummydec(); 
#include "header.h" 

void main() 
{ 
    return; 
} 

.

여기에 포함 된 줄은 포함 된 파일의 모든 내용으로 바뀝니다.

그래서 당신은 전처리 된 파일의 출력을 요청한다면 것처럼 보일 것 :

(GCC와 그 소리 컴파일러에 당신은 내가 그건 당신이 이해하는 도움이 될 것 같아요 매개 변수 -E와 전처리 된 파일을 요청할 수 있습니다)

void dummydec(); 
void HappyMakerPrototype(); 
void AnotherPrototype(); 

void main() 
{ 
    return; 
} 
+0

downvote 주셔서 감사합니다. 너는 그렇게 공정하고 나에게 이것으로 잘못된 것이 맞을 까? 나는 지식과 포스트를 향상시키고 싶다. – dhein

+0

이것은 잘못되었습니다. 전 처리기가 완료된 후'# define's가 출력되지 않습니다. 모든 전 처리기 지시문은 전처리 기가 처리합니다. 'gcc -E'로 테스트하면 이것을 확인할 수 있습니다. – unwind

+0

@unwind. 나는 "첫 실행"에 대해 더 잘 보여주기 위해 무슨 일이 일어나는지 보여줍니다. 나는 그들이 결과물에있을 것이라고 결코 말하지 않았다. 나는 그것을 분명히 할 것이다. – dhein

0

예 할 수 있습니다. 해당 헤더 파일을 포함하는 동안 헤더에서 모든 것을 상속받습니다. 그래서 당신은 그 매크로를 사용할 수 있습니다.

0

예. 파일 포함은 #include 지시문과 정확히 일치하는 위치에서 헤더 파일의 내용을 복사하여 붙여 넣는 것과 같습니다.