[英]What does the 'keyword' phrase do in header file?
不要使用 C++,所以這可能是一個愚蠢的問題。 根據文檔,我正在檢查一個頭文件 .h,其中應該定義了參數 ID。 我遇到了參數所在的行,它們如下:
#define SPCDLL_ERROR_KEYWORDS \
{ \
keyword (NONE), \
keyword (OPEN_FILE), \
keyword (FILE_NVALID), \
keyword (MEM_ALLOC), \
};
#define PARAMETERS_KEYWORDS \
{ \
keyword (LIMIT_LOW), \
keyword (LIMIT_HIGH), \
keyword (LEVEL), \
keyword (HOLDOFF), \
};
#ifdef keyword
#undef keyword /* prevents redefinition warning */
#endif
#define keyword(key) key
但是我已經搜索過,但無法確切地找出關鍵字(鍵)行在做什么? 它是否根據列表中的順序分配每個參數和 ID? 這會使 LIMIT_LOW, ID=1 嗎? 為什么沒有明確定義。 此外,由於有兩個關鍵字定義列表,它是如何工作的?
我來自 Python 領域,在那里我將它們定義為兩個字典,其中包含 Error_names 和 Parameter_vals 的 ID 和值。
如果有人可以解釋這一點,我將不勝感激。
#define
表示您正在制作一個宏。 keyword(key)
表示您正在該宏中創建一個函數,該函數接受一個參數key
。 最后一個key
意味着您正在使用該鍵參數,然后您正在用它做一些事情。 它可以是任何東西,您可以使用std::cout
或其他任何東西。
當您調用該宏時,您傳入了 macro keyword
並為 key 輸入了任何內容。
您在文件頂部使用X 宏,並在這些函數中使用keyword
宏。
請注意,線條
keyword (SOME_CONSTANT), \
都是宏的一部分。 也就是說,它們將出現在宏SPCDLL_ERROR_KEYWORDS
和PARAMETERS_KEYWORDS
展開的任何地方。
而且,無論擴展發生在哪里,它都會使用代碼片段最后一行中的keyword()
定義。 因此,表達式PARAMETERS_KEYWORDS
實際上將擴展為
{
LIMIT_LOW,
LIMIT_HIGH,
LEVEL,
HOLDOFF,
};
但是,這取決於在使用時如何實際定義keyword()
,它可以定義為擴展到 C 預處理器能夠生成的任何內容。 例如
#define keyword(foo) 1
char foo[] = SPCDLL_ERROR_KEYWORDS;
printf("There are %d SPCDLL_ERROR keywords\n", sizeof(foo));
將在SPCDLL_ERROR_KEYWORDS
生成keyword()
調用的實際計數。
我不知道這些宏在哪個上下文中實際使用/有用,但此類構造通常用於某些特定目的: keyword(FOO)
的效果本身與FOO
基本相同,但它標志着FOO
用於其他用途. 這種其他用途可以在一些其他宏或用於處理源代碼的其他工具中。 像文檔工具、linters、自動頭生成腳本等等。
找出答案的唯一方法實際上是在整個代碼庫中查找表達式\\<keyword\\>
的使用位置。 最有可能的是,這會讓您偶然發現提供提示的注釋和/或一些實際執行額外處理的腳本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.