Merkwürdige Initialisierungssyntax


  • Mod

    Ich bin gerade dabei einen vom Hersteller nicht mehr unterstützten Treiber für den aktuellen Linuxkernel anzupassen und bin dabei auf folgenden Code gestossen

    /*
     * Host template
     */
    static Scsi_Host_Template driver_template = {
            name:                    driver_name,
            detect:                  hpt_detect,
            release:                 hpt_release,
            queuecommand:            hpt_queuecommand,
            eh_device_reset_handler: hpt_reset,
            eh_bus_reset_handler:    hpt_reset,
            ioctl:                   hpt_scsi_ioctl,
            can_queue:               os_max_queue_comm,
            sg_tablesize:            os_max_sg_descriptors-1,
            cmd_per_lun:             os_max_queue_comm,
            unchecked_isa_dma:       0,
            emulated:                0,
            /* ENABLE_CLUSTERING will cause problem when we handle PIO for highmem_io */
            use_clustering:          DISABLE_CLUSTERING,
    #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0) /* 2.4.x */
            use_new_eh_code:         1,
            proc_name:               driver_name,
            proc_info:               hpt_proc_info24,
            select_queue_depths:     NULL,
            max_sectors:             128,
    
            #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,18))
                    highmem_io:              1,
            #endif
    #else /* 2.6.x */
            proc_name:               driver_name,
            proc_info:               hpt_proc_info26,
            max_sectors:             128,
    #endif
            this_id:                 -1
    };
    

    Diese Syntax (Feldname:Wert) ist neu für mich. Ist das eine alte Form der Initialisierung oder eine Compilererweiterung?
    Bestehen irgendwelche Semantischen Unterschiede zur Initialisierung der Form

    foo bar = { .field1 = 0, .field2 = 1 };
    

    ?



  • Das sieht für mich nach Sprungmarken aus. Die dürften da keine Funktion haben, aber es könnte eine Art Dokumentationstrick sein. Weil's hübscher aussieht als /* Membername */.



  • http://gcc.gnu.org/onlinedocs/gcc-4.8.0/gcc/Designated-Inits.html#Designated-Inits schrieb:

    Another syntax that has the same meaning, obsolete since GCC 2.5, is ‘fieldname:’, as shown here:

    struct point p = { y: yvalue, x: xvalue };

    Ich würde mal darauf tippen das es obsolete ist, weil das die gcc Variante war und inzwischen durch den Standard möglich ist.


  • Mod

    Tobiking2 schrieb:

    http://gcc.gnu.org/onlinedocs/gcc-4.8.0/gcc/Designated-Inits.html#Designated-Inits schrieb:

    Another syntax that has the same meaning, obsolete since GCC 2.5, is ‘fieldname:’, as shown here:

    struct point p = { y: yvalue, x: xvalue };

    Ich würde mal darauf tippen das es obsolete ist, weil das die gcc Variante war und inzwischen durch den Standard möglich ist.

    Danke, das erklärt das.


Anmelden zum Antworten