标识符和宏有什么区别?
What is the difference between identifier and macro?
当我们编写预处理器指令时,例如:
#define PI 3.1416
// Is PI is a macro or an identifier and how do we distinguish
// one from another?
在您的示例中,PI
既是宏又是标识符。 "Identifier" 粗略地说是指定名称的语法的正式术语。宏、函数、命名空间、类型、变量都有名称,所有这些名称都是使用标识符指定的。从上下文中应该清楚 PI
是指宏还是标识符:
The above defines PI
as 3.1416
.
这里用来引用宏
The PI
following the #define
specifies the name of the macro.
这里用来指代标识符:用来指代源代码中指定宏名的两个字符
接受的答案不准确。
通常,#define
预处理指令引入的标识符(作为预处理标记)是 宏名称。这与宏本身不同。
预处理令牌的标识符在翻译过程中经过预处理阶段后转换为令牌。有两种令牌看起来很像预处理令牌的标识符,即标识符和关键字。关键字是由语言的句法规则定义的,经过转换后永远不是标识符。请注意,令牌的标识符与预处理令牌的标识符不同。
在给定的示例中,预处理标记 PI
将转换为标记 3.1416
。这既不是标识符也不是关键字(在 C 中,常量;在 C++ 中,文字)。从概念上讲,原始预处理标记在转换后的翻译阶段不存在。因此,它与转换后的token标识区别开来。
当我们编写预处理器指令时,例如:
#define PI 3.1416
// Is PI is a macro or an identifier and how do we distinguish
// one from another?
在您的示例中,PI
既是宏又是标识符。 "Identifier" 粗略地说是指定名称的语法的正式术语。宏、函数、命名空间、类型、变量都有名称,所有这些名称都是使用标识符指定的。从上下文中应该清楚 PI
是指宏还是标识符:
The above defines
PI
as3.1416
.
这里用来引用宏
The
PI
following the#define
specifies the name of the macro.
这里用来指代标识符:用来指代源代码中指定宏名的两个字符
接受的答案不准确。
通常,#define
预处理指令引入的标识符(作为预处理标记)是 宏名称。这与宏本身不同。
预处理令牌的标识符在翻译过程中经过预处理阶段后转换为令牌。有两种令牌看起来很像预处理令牌的标识符,即标识符和关键字。关键字是由语言的句法规则定义的,经过转换后永远不是标识符。请注意,令牌的标识符与预处理令牌的标识符不同。
在给定的示例中,预处理标记 PI
将转换为标记 3.1416
。这既不是标识符也不是关键字(在 C 中,常量;在 C++ 中,文字)。从概念上讲,原始预处理标记在转换后的翻译阶段不存在。因此,它与转换后的token标识区别开来。