傳回類型
函式的傳回型別會建立函式傳回值的大小和類型。 它會對應至 [語法] 區段中的 type-specifier
:
語法
function-definition
:
declaration-specifiers
opt attribute-seq
opt declarator
declaration-list
opt compound-statement
/* attribute-seq
為 Microsoft 特定 */
declaration-specifiers
:
storage-class-specifier
declaration-specifiers
opt
type-specifier
declaration-specifiers
opt
type-qualifier
declaration-specifiers
opt
type-specifier
:
void
char
short
int
__int8
/* Microsoft 特定 */
__int16
/* Microsoft 特定 */
__int32
/* Microsoft 特定 */
__int64
/* Microsoft 特定 */
long
long long
float
double
long double
signed
unsigned
struct-or-union-specifier
enum-specifier
typedef-name
type-specifier
可以指定任何基本、結構或等位型別。
函式定義中提供的傳回型別必須符合程式中其他位置之函式宣告中的傳回型別。 當包含運算式的 return
陳述式執行時,函式就會傳回值。 會求出運算式的值,於必要時轉換成傳回值類型,並且返回呼叫函式所在的點。 如果函式是使用傳回類型 void
宣告,則包含運算式的傳回陳述式會產生警告,而且不會評估運算式。
下列範例將說明函式傳回值。
typedef struct
{
char name[20];
int id;
long class;
} STUDENT;
/* Return type is STUDENT: */
STUDENT sortstu( STUDENT a, STUDENT b )
{
return ( (a.id < b.id) ? a : b );
}
這個範例會定義具有 STUDENT
宣告的 typedef
類型,並且將函式 sortstu
定義為具有 STUDENT
傳回類型。 函式會選取並傳回它的兩個結構引數的其中一個。 在後續函式呼叫中,編譯器會檢查並確定引數類型為 STUDENT
。
注意
不傳遞整個結構,而是傳遞結構的指標,可提升效率。
char *smallstr( char s1[], char s2[] )
{
int i;
i = 0;
while ( s1[i] != '\0' && s2[i] != '\0' )
i++;
if ( s1[i] == '\0' )
return ( s1 );
else
return ( s2 );
}
這個範例會定義傳回字元陣列指標的函式。 這個函式會採用兩個字元陣列 (字串) 做為引數,並傳回兩個字串中較短者的指標。 陣列指標會指向第一個陣列元素並擁有其類型,因此,函式的傳回類型會是 char
類型的指標。
您不需要在呼叫函式之前使用 int
傳回類型宣告函式,不過建議您使用原型,如此才能夠檢查引數和傳回值的類型是否正確。
另請參閱
意見反映
https://aka.ms/ContentUserFeedback。
即將推出:我們會在 2024 年淘汰 GitHub 問題,並以全新的意見反應系統取代並作為內容意見反應的渠道。 如需更多資訊,請參閱:提交及檢視以下的意見反映: