请, 你能告诉我下面的代码是做什么的吗?
...code...
#include file.h
...code...
我习惯把包括每个文件的开头。我以前从未见过这个,也无法在互联网上找到任何东西。
答案 0 :(得分:3)
#include
是一个预处理器指令,它将给定的文件作为参数并将其内容转储到当前文件中。通常,这用于包括头文件中的公共函数的定义,但是没有必要以这种方式使用它。
答案 1 :(得分:3)
它的用法不仅限于文件的启动,但请注意,即使在同一文件中,此标头中声明的变量,宏或函数在include语句之前也不可用。
答案 2 :(得分:1)
正如大家所说,#include
可以在任何地方使用(前提是它在自己的逻辑线上)。在某些情况下,您希望多次#include
相同的文件。首先阅读X macro wikipage和C preprocessor wikipage。
我在MELT monitor(与MELT相关...)中有一个具体的例子。
我有一个包含类似行的predef-monimelt.h(生成的)文件
MOM_PREDEFINED_NAMED(
名称 ,
id ,
哈希 )
例如< / p>
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 +许可软件