[linux-ileri] Re: printk mesajlari

---------

From: Bora Şahin (borasahin@netone.com.tr)
Date: Tue 24 Feb 2004 - 16:49:39 EST

  • Next message: Gurkan ASLAN: "[linux-ileri] Re: POSTFIX mail yönlerdirme nasıl"

    SLmLar Bulent,

    Monday, February 23, 2004, 10:06:02 PM, you wrote:

    BS> #define printk(format, args...) ((0,##args), int(0))

    Sanırım, #define printk(format, args...) ((0 , ##args), (int)0) olmalı...
                                                             ^^^^^^
    BS> kernel'da benzer ifadeleri s1k s1k gormeme ragmen anliyabilmis degilim,
    BS> bu ne demektir ? :)

    Yukarıdaki ifade tam olarak ne işe yarıyor yani "(int)0"dan farkını anlayamadım(Sonuçta ikincisi de
    herhangi bir ASM kodu üretmiyor. Tabii warning'leri kapatıyor olabilir, bilemiycem) ama eğer
    açılımını öğrenmek istiyorsan şöyle bir şey:

    printk("Den\n") == ((0), (int)0)
    printk("Den = %d\n", 25) == ((0, 25) (int)0)

    gcc'ye -E switch'ini verirsen dosyanın derlenmeden önceki preprocess edilmiş halini alabilirsin...

    BS> belki anliyabilirim diye heveslendim ve soyle birsey yaptim

    BS> #define printk (format, args...) ((0,##args), printf(format,args))
    BS> #define printk2(format, args...) printf(format,args)

    Yukarıdakiler hatalı. Şöyle olmalı:

    #define printk (format, args...) ((0 , ##args), printf(format , ##args))
    #define printk2(format, args...) printf(format , ##args)

    BS> gcc ile derledim, ( bcc ezelden beri anlamiyor boyle seyleri )

    bcc = Borland C Compiler'ı kast ediyorsan yukarıdaki özellik standart değildi. Yani değişken sayıda
    parametre alan makro yazmak C99 ile dile eklenmiş bir özelliktir. Dolayısıyla 90'ların başında
    yazılmış BCC'nin desteklemesi beklenemez. GCC ise uzun zamandır destekliyordu. Zaten Linux'da
    standart C'de olmayan, sadece GCC'ye özgü bir çok eklenti var.

    BS> her iki deklerasyonda ayni kodu uretti. :(

    Normal. Çünkü C'de virgül operatörü en sağdaki ifadenin değerini üretir. Yani her iki durumda da
    derleyici printf(format , ##args)'yi üretecektir...

    BS> Birde vaktin varsa __attribute__ icin kisa bir aciklama yaparsan sevinirim..

    __attribute__ GCC'nin standart olmayan mimariye bağlı özelliklerini ayarlamakta kullanılıyor. Yani
    VC++'daki pragma gibi bir şey. Üç tip attribute var:
    1) Fonksiyon
    2) Değişken
    3) Tür

    Mesela örnek bir fonksiyon attribute'ü,

    void func() __attribute__ ((noreturn));

    Bu fonksiyon geri dönüş değeri döndürmüyor. Ya da calling convention'ları ayarlayabilirsin, ...
    gibi. Ayrıntılı bilgi için manual'e bakabilirsin...

    Ayrıca printk() ve panic()'leri çekirdekten çıkaran bir yama görmüştüm bir zamanlar. Onda da Murat
    KOÇ'un yazdıklarına benzer şeyler vardı...

    BS> Bulent

    -- 
    Bora Şahin
    borasahin.port5.com
    

  • Next message: Gurkan ASLAN: "[linux-ileri] Re: POSTFIX mail yönlerdirme nasıl"

    ---------

    Bu arsiv hypermail 2.1.6 tarafindan uretilmistir.