请问,下面的代码是做什么用的?
...code...
#include file.h
...code...
我习惯于在每个文件的开头加入 includes。我以前从未见过这种做法,也无法在互联网上找到任何相关信息。
#include
是一个预处理器指令,它会将给定的文件内容导入到当前文件中。通常情况下,我们会使用它来引用头文件中公共函数的定义,但其实并非必须如此。
它的使用并不限于文件开头,但请注意,即使在同一文件上,声明在此标头中的变量、宏或函数在包括语句之前也无法使用。
#include
可以在任何地方使用(只要它在自己的逻辑行上)。有时您想要多次#include
相同的文件。首先阅读X macro和C preprocessor维基页面。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"
#
位于第一列),而不必在特定位置。因此,#include
指令所做的就像您所习惯的一样,它将另一个文件的内容包含到当前文件中。 - Some programmer dude