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