Merkwürdige Initialisierungssyntax
-
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 Formfoo 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.
-
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.