我正在尝试了解 C 的一些基础知识。KRC 的 The C Programming Language 说
函数调用是一个后缀表达式,称为函数指示符,后跟括号,其中包含可能为空的、以逗号分隔的赋值表达式列表 (Par.A7.17),它们构成函数的参数。
在函数调用中,什么是运算符,什么是操作数?
是
()
运营商吗?函数名是操作数吗?
参数是否在
()
操作数内?- 函数指示符是函数调用的同义词吗?
谢谢。
我正在尝试了解 C 的一些基础知识。KRC 的 The C Programming Language 说
函数调用是一个后缀表达式,称为函数指示符,后跟括号,其中包含可能为空的、以逗号分隔的赋值表达式列表 (Par.A7.17),它们构成函数的参数。
在函数调用中,什么是运算符,什么是操作数?
是()
运营商吗?
函数名是操作数吗?
参数是否在()
操作数内?
谢谢。
在函数调用中,()
is 运算符就像[]
访问数组元素时的运算符一样。
6.5.2 后缀运算符
Syntax 1 postfix-expression: primary-expression postfix-expression [ expression ] postfix-expression ( argument-expression-listopt ) postfix-expression . identifier postfix-expression -> identifier postfix-expression ++ postfix-expression -- ( type-name ) { initializer-list } ( type-name ) { initializer-list , } argument-expression-list: assignment-expression argument-expression-list , assignment-expression
此运算符的操作数是函数名(或指向函数的指针)。
参数是否在
()
操作数内?
不。根据 C 标准,表达式列表指定函数的参数。
C 标准中的文本几乎相同,6.5.2.2:
后缀表达式后跟括号 () 包含可能为空的逗号分隔的表达式列表是函数调用。后缀表达式表示被调用的函数。表达式列表指定函数的参数。
语法是(6.5.2):
postfix-expression ( argument-expression-listopt )
这意味着函数名是一个“后缀表达式”,并且( )
是实际的运算符。C 标准没有提及此运算符的操作数,但我想您可以将函数名称称为操作数。参数列表不是操作数,而是一种特殊情况。
函数指示符的定义是(6.3.2.1):
函数指示符是具有函数类型的表达式。
func();
表达式中的含义func
将是函数指示符,但整个表达式将是函数调用。所以它不是完全相同的术语。
考虑funcptr_t f = func;
涉及函数指示符func
但没有函数调用的示例。