2014-12-06 3 views
4

제발, 아래의 코드는 무엇을 말해 줄 수 있습니까?C의 코드 중간에 포함되는 것은 무엇입니까?

...code... 
#include file.h 
...code... 

각 파일의 시작을 포함하는 데 사용되었습니다. 나는 전에 이것을 본 적이 없으며 인터넷에서도 아무것도 찾을 수 없었습니다.

+2

인클루드 위 아래에 몇 줄을 제시해주십시오입니다! 어쩌면 그것은 함수 선언 전에 나도 몰라. (코드가하는 것은 파일을 포함하고있다. 알다시피, 너는 할 수있다.) – Rizier123

+2

전처리 기는 소스 파일에서 * 아무 데나 * 지시자를 허용한다. 그것들은 첫 줄에'# '과 함께 자신의 줄에있다.), 특정 장소에있을 필요는 없다. 그래서'#include' 지시자는 당신이 익숙한 것을 수행합니다. 그것은 현재 파일에 다른 파일의 내용을 포함합니다. –

+0

파일의 맨 위에 #include와 동일한 작업을 수행합니다. 그것은 단지 다른 장소에서 그것을합니다. 기본적으로 포함 된 파일을 열고 해당 파일의 내용을 #include 문이 차지하는 공간에 복사합니다. –

답변

3

#include은 주어진 파일을 인수로 가져 와서 현재 파일의 내용을 덤프하는 사전 처리기 지시문입니다. 일반적으로 이것은 헤더 파일의 commons 함수에 대한 정의를 포함하기 위해 사용되지만, 그렇게 사용하지 않아도됩니다.

3

파일의 시작에만 국한되지 않지만이 헤더에 선언 된 변수, 매크로 또는 함수는 같은 파일에 있더라도 include 문 앞에 사용할 수 없습니다.

1

모든 사람이 당신에게 #include은 모든 곳에서 사용할 수 있다고 알려주므로 (자신의 로직 라인에있는 경우). 그리고 원하는 경우가 있습니다 #include동일 파일. 먼저 X macro wikipage를 읽고 C preprocessor wikipage를 읽으십시오.

그리고 MELT monitor에 구체적인 예가 있습니다 (MELT과 관련 있음).

제가
MOM_PREDEFINED_NAMED( 이름 , ID , 해시 ) 예처럼 라인을 포함하는 predef-monimelt.h (생성) 파일을
MOM_PREDEFINED_NAMED(GET,_9dsak0qcy0v_1c5z9th7x3i,1573018885) 
MOM_PREDEFINED_NAMED(HEAD,_47fatww79x6_vh8ap22c0ch,3922245622) 
MOM_PREDEFINED_NAMED(web_handler,_7sav6zery1v_24sa6jwwu6c,2339220870) 
#undef MOM_PREDEFINED_NAMED 

monimelt.h 파일 (실제 헤더 파일) 그래서 특히이 외부 포인터와 열거 형을 정의

// declare the predefined 
#define MOM_PREDEFINED_NAMED(Name,Id,H) extern momitem_t* mom_named__##Name; 
#include "predef-monimelt.h" 

/// declare the hash of the predefined as an enum 
#define MOM_PREDEFINED_NAMED(Name,Id,H) mom_hashname__##Name = H, 
enum { 
#include "predef-monimelt.h" 
}; 

main.c 파일이 특히 루틴이 포함되어

// if this routine is compiled, we are sure that all predefined hashes 
    // are unique 
    const momitem_t * 
    mom_predefined_item_of_hashcode (momhash_t h) { 
    switch (h) { 
    #define MOM_PREDEFINED_NAMED(Nam,Id,Hash) case Hash: return mom_named__##Nam; 
    #include "predef-monimelt.h" 
    default: 
    return NULL; 
    } 
    } 

하지만, 내 items.cpredef-monimelt.h 파일 을 두 번 두 번 (미리 정의 된 항목을 만들려면 초기화 등) 자신의 변수를 정의 :

void mom_create_predefined_items (void) { 
    int nbnamed = 0; 
#define MOM_PREDEFINED_NAMED(Nam,Id,H) do { \ 
    mom_named__##Nam = mom_make_item_of_identcstr(#Id); \ 
    mom_named__##Nam->i_space = momspa_predefined; \ 
    mom_register_item_named_cstr (mom_named__##Nam, #Nam); \ 
    nbnamed ++; \ 
} while(0); 
#include "predef-monimelt.h" 
} // end of mom_create_predefined_items 

// declare the predefined 
#define MOM_PREDEFINED_NAMED(Nam,Id,H) momitem_t* mom_named__##Nam; 
#include "predef-monimelt.h" 

FWIW을, 용융 모니터는 GPLv3에 + 라이센스 소프트웨어가

관련 문제