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
:
return
expression
Tercih;
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 void
bir 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 int
varsayar.
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 int
en büyük imzalı tamsayı değeri olan parametre değeriyle INT_MAX
çağırırsquare
. Sonuç long long
içinde squared
depolanı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_MAX
parametre değerleriyle 1
çağırırratio
. Sonuç double
içinde fraction
depolanı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üğü void
gibireport_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.c
bir 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