C中的代码中间包含了什么?

拜托,您能告诉我下面的代码是做什么的吗?

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

我曾经习惯于把每个文件包括起来。 我以前从未见过这个,也无法在互联网上找到任何东西。

#include是一个预处理器指令,它将给定的文件作为参数并将其内容转储到当前文件中。 通常,这用于包含头文件中的commons函数的定义,但没有必要以这种方式使用它。

它的用法不仅限于文件的启动,但请注意,即使在同一文件中,在此标头中声明的变量,宏或函数在include语句之前也不可用。

正如大家告诉你的那样#include可以在每个地方使用(只要它在它自己的逻辑行上)。 并且有些情况下你想要#include 几次 相同的文件。 首先阅读X宏 wikipage和C预处理器 wikipage。

我在MELT监视器中有一个具体的例子(与MELT有关……)。

我有一个包含类似行的predef-monimelt.h (生成)文件
MOM_PREDEFINED_NAMED( name , id , hash )例如

 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.c包含两次 predef-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,MELT显示器是GPLv3 +许可软件