我正在尝试理解C语言的一些基础知识。KRC的《C程序设计语言》中说:
函数调用是后缀表达式,称为函数名,后跟包含可能为空的逗号分隔赋值表达式列表(Par.A7.17)的括号,这构成了函数的参数。
在函数调用中,什么是运算符,什么是运算数?
()
是运算符吗?函数名是一个运算数吗?
括号内的参数是运算数吗?
- 函数名是否等同于函数调用?
谢谢。
我正在尝试理解C语言的一些基础知识。KRC的《C程序设计语言》中说:
函数调用是后缀表达式,称为函数名,后跟包含可能为空的逗号分隔赋值表达式列表(Par.A7.17)的括号,这构成了函数的参数。
在函数调用中,什么是运算符,什么是运算数?
()
是运算符吗?
函数名是一个运算数吗?
括号内的参数是运算数吗?
谢谢。
()
就像访问数组元素时 []
一样是一个操作符。
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标准没有提到这个运算符的操作数,但我想你可以称函数名为操作数。参数列表不是操作数,而是一个特殊情况。
在表达式函数设计者是具有函数类型的表达式。
func();
中,func
将是函数设计者,但整个表达式将是函数调用。因此,这不完全是相同的术语。funcptr_t f = func;
,其中涉及函数设计者func
,但没有函数调用。