請問, 你能告訴我下面的代碼是做什麼的?C中的代碼中包含了什麼?
...code...
#include file.h
...code...
我曾經習慣把包括每個文件的開始。我從來沒有見過這個,也無法在互聯網上找到任何東西。
請問, 你能告訴我下面的代碼是做什麼的?C中的代碼中包含了什麼?
...code...
#include file.h
...code...
我曾經習慣把包括每個文件的開始。我從來沒有見過這個,也無法在互聯網上找到任何東西。
#include
是一個預處理器指令,將指定的文件作爲參數並轉儲其當前文件中的內容。通常,這用於包含來自頭文件的公共函數的定義,但沒有必要以這種方式使用它。
它的用法不限於文件的開始,但是請注意,即使在同一個文件中,包含語句之前聲明的變量,宏或函數也不可用。
大家都告訴你,#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.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,熔體顯示器的GPLv3 +正版軟件
請出示上方,下有幾行!也許它是在我不知道的函數聲明之前(並且代碼的作用是:它包含一個文件!因爲你知道,你可以......) – Rizier123 2014-12-06 18:51:45
預處理器允許源文件中的指令*任意位置*(只要他們是在他們自己的路線上,在第一欄用'#'),它不一定要在特定的地方。所以'#include'指令只是做你習慣的,它包含了另一個文件的內容到當前文件中。 – 2014-12-06 18:53:08
它與文件頂部的#include執行相同的操作。它只是在不同的地方。本質上,它打開包含文件並將該文件的內容複製到#include語句佔用的空間中。 – 2014-12-06 18:53:39