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