簡體   English   中英

頭文件中的“關鍵字”短語有什么作用?

[英]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_KEYWORDSPARAMETERS_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM