Aracılığıyla paylaş


return Deyim (C)

Deyimi return bir işlevin yürütülmesini sonlandırır ve denetimi çağıran işleve döndürür. Yürütme, çağrının hemen ardından çağrı işlevinde devam eder. Deyimi return , çağıran işleve bir değer döndürebilir. Daha fazla bilgi için bkz . Dönüş türü.

Sözdizimi

jump-statement:
returnexpressionTercih ;

varsa değeri expression, çağıran işleve döndürülür. Atlanırsa expression , işlevin dönüş değeri tanımsız olur. varsa ifadesi değerlendirilir ve işlev tarafından döndürülen türe dönüştürülür. Deyim return dönüş türüne sahip işlevlerde bir void ifade içerdiğinde, derleyici bir uyarı oluşturur ve ifade değerlendirilmez.

İşlev tanımında hiçbir return deyim görünmüyorsa, çağrılan işlevin son deyimi yürütüldükten sonra denetim otomatik olarak çağıran işleve döner. Bu durumda, çağrılan işlevin dönüş değeri tanımlanmamıştır. İşlevin dışında voidbir dönüş türü varsa, bu ciddi bir hatadır ve derleyici bir uyarı tanılama iletisi yazdırır. İşlevin dönüş void türü varsa, bu davranış sorun olmaz, ancak düşük stil olarak kabul edilebilir. Amacınızı net bir şekilde ifade etmek için düz return bir deyim kullanın.

İyi bir mühendislik uygulaması olarak, işlevleriniz için her zaman bir dönüş türü belirtin. Dönüş değeri gerekli değilse, işlevi dönüş türüne sahip void olacak şekilde bildirin. Bir dönüş türü belirtilmezse, C derleyicisi varsayılan dönüş türü olduğunu intvarsayar.

Birçok programcı deyiminin bağımsız değişkenini expression return içine almak için parantez kullanır. Ancak C ayraç gerektirmez.

Derleyici, deyiminden sonra return yerleştirilen deyimleri bulursa erişilemeyen kod hakkında bir uyarı tanılama iletisi verebilir.

bir main işlevde return deyimi ve ifadesi isteğe bağlıdır. Döndürülen değere ne olacağı (belirtildiyse) uygulamaya bağlıdır. Microsoft'a özgü: Microsoft C uygulaması, ifade değerini programı çağıran işleme döndürür, örneğin cmd.exe. Hiçbir return ifade sağlanmazsa, Microsoft C çalışma zamanı başarı (0) veya hata (sıfır olmayan bir değer) belirten bir değer döndürür.

Örnek

Bu örnek, birkaç bölümden bir programdır. Deyimini ve hem işlev yürütmesini return sonlandırmak hem de isteğe bağlı olarak bir değer döndürmek için nasıl kullanıldığını gösterir.

// C_return_statement.c
// Compile using: cl /W4 C_return_statement.c
#include <limits.h>      // for INT_MAX
#include <stdio.h>       // for printf

long long square( int value )
{
    // Cast one operand to long long to force the
    // expression to be evaluated as type long long.
    // Note that parentheses around the return expression
    // are allowed, but not required here.
    return ( value * (long long) value );
}

İşlev square , aritmetik bir hatayı önlemek için bağımsız değişkeninin karesini daha geniş bir türde döndürür. Microsoft'a özgü: Microsoft C uygulamasında tür, long long taşma olmadan iki int değerin çarpımını barındıracak kadar büyüktür.

içindeki square ifadenin return etrafındaki parantezler ifadenin bir parçası olarak değerlendirilir ve deyimi tarafından return gerekli değildir.

double ratio( int numerator, int denominator )
{
    // Cast one operand to double to force floating-point
    // division. Otherwise, integer division is used,
    // then the result is converted to the return type.
    return numerator / (double) denominator;
}

İşlev, ratio iki int bağımsız değişkeninin oranını kayan nokta double değeri olarak döndürür. İfade return , işlenenlerden birini öğesine dönüştürerek bir kayan nokta işlemi kullanmaya zorlanır double. Aksi takdirde, tamsayı bölme işleci kullanılır ve kesirli bölüm kaybolur.

void report_square( void )
{
    int value = INT_MAX;
    long long squared = 0LL;
    squared = square( value );
    printf( "value = %d, squared = %lld\n", value, squared );
    return; // Use an empty expression to return void.
}

report_square işlevi, bir içine uyan inten büyük imzalı tamsayı değeri olan parametre değeriyle INT_MAXçağırırsquare. Sonuç long long içinde squareddepolanır ve yazdırılır. İşlevin report_square dönüş void türü vardır, bu nedenle deyiminde return bir ifade yoktur.

void report_ratio( int top, int bottom )
{
    double fraction = ratio( top, bottom );
    printf( "%d / %d = %.16f\n", top, bottom, fraction );
    // It's okay to have no return statement for functions
    // that have void return types.
}

report_ratio işlevi ve INT_MAXparametre değerleriyle 1 çağırırratio. Sonuç double içinde fractiondepolanır ve yazdırılır. İşlevin report_ratio dönüş void türü vardır, bu nedenle açıkça bir değer döndürmesi gerekmez. report_ratio "Alttan düşer" yürütmesi ve çağıran için hiçbir değer döndürmez.

int main()
{
    int n = 1;
    int x = INT_MAX;

    report_square();
    report_ratio( n, x );

    return 0;
}

işlevi main iki işlevi çağırır: report_square ve report_ratio. Hiçbir parametre almaz ve döndürdüğü voidgibireport_square, sonucunu bir değişkene atamayız. Benzer şekilde, report_ratio döndürür void, böylece dönüş değerini de kaydetmeyiz. Bu işlev çağrılarının her biri sonrasında yürütme sonraki deyimde devam eder. Ardından main programı sonlandırmak 0 için değerini (genellikle başarıyı bildirmek için kullanılır) döndürür.

Örneği derlemek için adlı C_return_statement.cbir kaynak kod dosyası oluşturun. Ardından, gösterilen sırayla tüm örnek kodu kopyalayın. Dosyayı kaydedin ve komutunu kullanarak bir Geliştirici komut istemi penceresinde derleyin:

cl /W4 C_return_statement.c

Ardından, örnek kodu çalıştırmak için komut istemine girin C_return_statement.exe . Örneğin çıktısı şöyle görünür:

value = 2147483647, squared = 4611686014132420609
1 / 2147483647 = 0.0000000004656613

Ayrıca bkz.

Raporlar