[Çözüldü] Return yapılabilecek bir yerde goto kullanmak

Başlatan kaansef, 24 Aralık 2014 - 22:30:54

« önceki - sonraki »

0 Üyeler ve 3 Ziyaretçi konuyu incelemekte.

kaansef

Arkadaşlar Linux'un kaynak kodlarında dikkatimi çeken bir şey var. Goto kullanımı. C kitaplarında kullanılmaması tavsiye edilmesine rağmen Linux kodlarında oldukça kullanılıyor. Avantajının yığın kullanmamak olduğunu düşünüyorum fakat aşağıda verceğim kodda return kullanılabilecek yerde goto kullanmışlar. Bana biraz garip geldi. Özel bir nedeni mi var acaba? Bilen birisi yazarsa sevinirim.

Örnek kod:

static int skel_open(struct inode *inode, struct file *file)
{
struct usb_skel *dev;
struct usb_interface *interface;
int subminor;
int retval = 0;

subminor = iminor(inode);

interface = usb_find_interface(&skel_driver, subminor);
if (!interface) {
pr_err("%s - error, can't find device for minor %d",
     __FUNCTION__, subminor);
retval = -ENODEV;
goto exit;
}

dev = usb_get_intfdata(interface);
if (!dev) {
retval = -ENODEV;
goto exit;
}

/* increment our usage count for the device */
kref_get(&dev->kref);

/* save our object in the file's private structure */
file->private_data = dev;

exit:
return retval;
}
# 28065

freeman

Her durumda retval değerini döndürmek istemiş sanırım.


Körü körüne goto 'ya karşı olmamak gerek. Yeri geldiğinde en iyi çözüm goto ise kullanılır tabi.
Good morning and welcome to the Black Mesa Transit System. This automated train is provided for the security and convenience of the Black Mesa Research Facility personnel.

lnxdev

zaten return kullanıyor sadece heryere return yazammak için exit satırı oluşturup direk oraya götürüyor aslında oradaki bütün goto exit komutları retval'ı geri döndürüyor. Kodun tamamen okunabilir olması için yapılmış bir özellik

kaansef

Teşekkür ederim arkadaşlar. Aslında tabiki hangi yöntem gerekiyorsa onu kullanmak gerekir ama kitaplarda goto'nun okunabilirliğinin daha düşük olduğu söyleniyor. Bunun için sormuştum. Yoksa tabiki goto kullanılması gereken yerde goto kullanmak gerekir. Cevaplar için tekrardan teşekkürler. Herkese iyi akşamlar. Konu'nun başlığını [ÇÖZÜLDÜ] olarak değiştiriyorum.
# 28065