В вызове функции, что такое оператор и что такое операнды?

Я пытаюсь понять некоторые основы C. KRC в языке программирования C говорит

вызов функции является постфиксным выражением, вызывается обозначением функции, за которым следуют скобки, содержащие, возможно, пустой, разделенный запятыми список выражений присваивания (Par.А7.17), которые составляют аргументы функции.

  1. в вызове функции, что такое оператор и что такое операнды?

    и () оператор?

    - имя функции операнд?

    аргументы внутри () операнды?

  2. является ли обозначение функции синонимом вызова функции?

спасибо.

2 ответов


В вызов функции () является оператором так же, как [] - оператор при доступе к элементу массива.

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:

постфиксное выражение, за которым следуют скобки (), содержащие возможно пустой, разделенный запятыми список выражений является вызовом функции. Этот выражение postfix обозначает вызываемую функцию. Список выражения указываются аргументы функции.

синтаксис (6.5.2):

postfix-expression ( argument-expression-listopt )

это означает, что имя функции является "постфиксным выражением" и ( ) является фактическим оператором. Стандарт C не говорит об операндах для этого оператора, но я полагаю, что вы можете назвать имя функции операндом. Список аргументов-это не операнд, а скорее частный случай.


определение обозначения функции (6.3.2.1):

A обозначение функция - выражение, имеющее тип функции.

значение в выражении func();, func будет обозначение функции, но выражение в целом будет вызовом функции. Так что это не совсем тот же срок.

Рассмотрим пример funcptr_t f = func; который включает в себя функцию designator func но нет вызова функции.