В вызове функции, что такое оператор и что такое операнды?
Я пытаюсь понять некоторые основы C. KRC в языке программирования C говорит
вызов функции является постфиксным выражением, вызывается обозначением функции, за которым следуют скобки, содержащие, возможно, пустой, разделенный запятыми список выражений присваивания (Par.А7.17), которые составляют аргументы функции.
-
в вызове функции, что такое оператор и что такое операнды?
и
()
оператор?- имя функции операнд?
аргументы внутри
()
операнды? - является ли обозначение функции синонимом вызова функции?
спасибо.
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
но нет вызова функции.