2011-02-17 14 views
12

Statik tipteki verilerin döndürülmesinin olası etkileri nelerdir? Ve aslında ne zaman kullanmalıyız?Dönüş türünün statik olmasının etkisi

static ssize_t 
my_read(int fd, char *ptr) 
{ 
    //code from Stevens Unix Network programming. 
     if (something) 
     return (-1) 
     if (something else) 
      return (0) 


     return (1) 
} 

neden statik burada?

Teşekkürler.

cevap

28

Bu işlev statiktir, dönüş türü değil. Bu, sadece mevcut derleme biriminden çağrılabileceği anlamına gelir. örneğin

float * calculate_area(float r) 
{ 
    float *p; 
    static float area; 
    p=&area; 
    area=3.14*r*r; 
    return p; 
} 

fonksiyonu kullanılmaktadır denilen oluşturulan bir değişkene gösterici dönerken bunu imha edilecek her türlü niteleyicisiz yani değişken otomatik zaman denetimi veren bölgeyi yapmak istiyorsanız

+0

Teşekkürler Marcelo. – freedesk

+0

statik bir veri türü döndürürken başka bir yönü vardır. – Algorithmist

+6

Bu, tanımlayıcının geçerli çeviri birimine çevrilmiş olduğu anlamına gelir, ancak işlev yine de başka bir yerden bir işlev işaretçisi aracılığıyla çağrılabilir. – caf

2

Biz statik veri türünü kullanın denilen fonksiyondan. Statik olarak beyan edildiginizde, ana alandan alan degerlerini dogru olarak alabiliyorsunuz.

+0

@freedesk Statik bir veri ya da statik bir işlev döndürmekten bahsediyorsunuz. Bir işlevin durağan verilerini döndürmekten bahsettiğini sanıyordum. – Algorithmist

+2

Bu kötü uygulama, özel kapsülleme kırıyor. İş parçacığı güvenliği konularına ve değerlendirme sorunlarının sırasına göre göstergelerin statiğe geri döndürülmesi de tehlikelidir. Tanımsız değerlendirme sırasından dolayı, bu işlevi örneğin printf ("% f% f", * calculate_area (1.0f), * calculate_area (2.0f)) olarak adlandırırsanız ne olacağını bilmiyorsunuzdur; – Lundin

İlgili konular