[linux-ileri] Re: printk mesajlari

---------

From: Bulent Selek (bselek@best.com.tr)
Date: Wed 25 Feb 2004 - 04:24:49 EST

  • Next message: serdar: "[linux-ileri] Re: 2 ip adresi."

    Murat, Bora yaptiginiz aciklamalar icin tesekkurler..

    -----Original Message-----
    From: linux-ileri-bounce@liste.linux.org.tr
    [mailto:linux-ileri-bounce@liste.linux.org.tr]On Behalf Of Bora Şahin
    Sent: Tuesday, February 24, 2004 11:50 PM
    To: Bulent Selek
    Subject: [linux-ileri] Re: printk mesajlari

    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: serdar: "[linux-ileri] Re: 2 ip adresi."

    ---------

    Bu arsiv hypermail 2.1.6 tarafindan uretilmistir.