В вызове функции, что такое оператор, и каковы операнды?
Я пытаюсь понять некоторые основы C.KRC Язык программирования C говорит
Вызов функции - это постфиксное выражение, называемое обозначением функции, за которым следуют скобки, содержащие, возможно, пустые, разделенные запятыми списки выражений присваивания (Par.A7.17), которые составляют аргументы функции.
-
В вызове функции, что такое оператор, и каковы операнды?
Является ли ()
оператором?
Является ли имя функции операндом?
Являются ли аргументы внутри операндов ()
?
- Является ли обозначение функции синонимом вызова функции?
Спасибо.
Ответы
Ответ 1
В вызове функции ()
является оператором, так же как []
является оператором при доступе к элементу массива.
6.5.2 Операторы Postfix
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 список выражений указывает аргументы функции.
Ответ 2
Текст в стандарте 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
, но не вызов функции.