分享方式:


傳回類型

函式的傳回型別會建立函式傳回值的大小和類型。 它會對應至 [語法] 區段中的 type-specifier

語法

function-definition
declaration-specifiersopt attribute-seqopt declarator declaration-listopt compound-statement

/* attribute-seq為 Microsoft 特定 */

declaration-specifiers
storage-class-specifier declaration-specifiersopt
type-specifier declaration-specifiersopt
type-qualifier declaration-specifiersopt

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 傳回類型宣告函式,不過建議您使用原型,如此才能夠檢查引數和傳回值的類型是否正確。

另請參閱

C 函式定義