14

我想了解下KRC的一些基本的C程序设计语言说函数调用中,操作符是什么,操作数是什么?

函数调用是一个后缀表达式,称为功能标志,然后是包含括号可能是空的,用逗号分隔赋值表达式列表(Par.A7.17), 构成函数的参数。

  1. 在一个函数调用,什么是运营商,什么是操作数?

    ()运营商?

    函数名是操作数吗?

    是否在()操作数内的参数?

  2. 函数指示符是函数调用的同义词吗?

谢谢。

+2

函数调用是在黄色框中定义的,它显然是* not *函数指示符,它是函数名称。 –

回答

9

在函数调用中,()是一个运算符,就像[]是访问数组元素时的运算符。

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标准,表达式列表指定函数的参数。

+3

正式的语法定义绝对是初学者最需要的东西:) –

+2

*操作数*本质上是*参数*的同义词。 - * [操作数,也被称为“操作的输入(数量)之一”。](https://en.wikipedia.org/wiki/Operand)* – Octopus

+1

@PeterJ,也许,但OP的代表是23K,几乎不是初学者。 – Octopus

4

在C标准的文字是几乎相同的,6.5.2.2:

包含表达式的可能 空,逗号分隔的列表后缀表达式后跟括号()是一个函数调用。 后缀表达式表示被调用的函数。表达式列表 指定函数的参数。

的语法(6.5.2):

postfix-expression (argument-expression-listopt) 

这意味着函数名是一个“后缀表达式”和()是实际的操作者。 C标准并没有提到这个操作符的操作数,但我想你可以把这个函数的名字称为操作数。参数列表不是一个操作数,而是一个特例。


函数指示符的定义是(6.3.2。1):

A 函数指示符是一个具有函数类型的表达式。

在表达func();含义,func将是功能标志,但表达作为一个整体将是一个函数调用。所以这不完全一样。

考虑示例funcptr_t f = func;其中涉及函数标识func但没有函数调用。

+3

顺便说一句,知道这些东西是非常没用的知识,谁不写一个编译器。 – Lundin

+1

*我想你可以调用函数名称作为操作数*这不是常见的做法:在函数调用的上下文中,* operand *这个词通常指定参数列表中的每个表达式,即参数的同义词。 C标准没有使用* operand *,也没有使用宏参数或参数,但是其他编程语言的规范,比如Python。 – chqrlie

+0

@chqrlie因此“我想”:)我确实强调标准在这种情况下没有提及任何操作数。 – Lundin