函式呼叫
A 函式呼叫是一個會控制、 傳遞引數 (如果有的話) 的函式的運算式,其格式:
運算式(運算式清單選擇)
其中運算式 函式名稱,或會評估為函式的位址和 運算式清單是一份運算式 (以逗號分隔)。 這些第二個運算式的值是傳給函數的引數。 如果函式不會傳回一個值,那麼您宣告為函式會傳回void。
如果宣告存在之前函式呼叫,但沒有資訊,提供 concerning 的參數,未宣告的任何引數只會經歷一般的算數轉換。
注意事項 |
---|
可以任何順序進行評估函式的引數清單中的運算式,以便從另一個引數的副作用可能會變更其數值的引數中有未定義的值。函式呼叫運算子所定義的序列點只保證會評估引數清單中的副作用,再將控制項傳遞至被呼叫的函式。(請注意引數推入堆疊順序是不同的緣故)。 請參閱序列點如需詳細資訊。 |
所有函式呼叫中唯一的需求是之前的括號運算式必須評估為函式位址。 這表示可以透過任何函式指標運算式呼叫的函式。
範例
這個範例說明如何從呼叫的函式呼叫switch陳述式:
int main()
{
/* Function prototypes */
long lift( int ), step( int ), drop( int );
void work( int number, long (*function)(int i) );
int select, count;
.
.
.
select = 1;
switch( select )
{
case 1: work( count, lift );
break;
case 2: work( count, step );
break;
case 3: work( count, drop );
/* Fall through to next case */
default:
break;
}
}
/* Function definition */
void work( int number, long (*function)(int i) )
{
int i;
long j;
for ( i = j = 0; i < number; i++ )
j += ( *function )( i );
}
在這個範例中,函式呼叫中main,
work( count, lift );
傳遞一個整數變數, count,和函式的位址lift函式work。 請注意函式的位址傳遞只要函式的識別項,因為指標運算式的評估函式的識別項。 若要使用函式的識別項,如此一來,函式必須宣告或定義之前使用的識別項。 否則,無法辨識的識別項。 在這種情況下,原型work的開頭,提供main函式。
參數function在work宣告為變數的指標,採取下列一項函式int引數,並傳回長值。 括號括住參數名稱是必要的。 沒有它們,宣告會指定函式傳回的指標, 長的值。
函式work中的所選取函式會呼叫的迴圈,使用下列的函式呼叫:
( *function )( i );
一個引數, i,會傳遞至呼叫的函式。