2012-09-05 114 views
2
struct file_operations memory_fops = { 
    read: memory_read, 
    write: memory_write, 
    open: memory_open, 
    release: memory_release 
}; 

這段代碼片段中的「:」是什麼意思? 謝謝。 這是來自linux驅動程序代碼。 較完整的代碼是在這裏:這段代碼片段中的「:」是什麼意思?

/* Necessary includes for device drivers */ 
#include <linux/init.h> 
#include <linux/config.h> 
#include <linux/module.h> 
#include <linux/kernel.h> /* printk() */ 
#include <linux/slab.h> /* kmalloc() */ 
#include <linux/fs.h> /* everything... */ 
#include <linux/errno.h> /* error codes */ 
#include <linux/types.h> /* size_t */ 
#include <linux/proc_fs.h> 
#include <linux/fcntl.h> /* O_ACCMODE */ 
#include <asm/system.h> /* cli(), *_flags */ 
#include <asm/uaccess.h> /* copy_from/to_user */ 

MODULE_LICENSE("Dual BSD/GPL"); 

/* Declaration of memory.c functions */ 
int memory_open(struct inode *inode, struct file *filp); 
int memory_release(struct inode *inode, struct file *filp); 
ssize_t memory_read(struct file *filp, char *buf, size_t count, loff_t *f_pos); 
ssize_t memory_write(struct file *filp, char *buf, size_t count, loff_t *f_pos); 
void memory_exit(void); 
int memory_init(void); 

/* Structure that declares the usual file */ 
/* access functions */ 
struct file_operations memory_fops = { 
    read: memory_read, 
    write: memory_write, 
    open: memory_open, 
    release: memory_release 
}; 

/* Declaration of the init and exit functions */ 
module_init(memory_init); 
module_exit(memory_exit); 

/* Global variables of the driver */ 
/* Major number */ 
int memory_major = 60; 
/* Buffer to store data */ 
char *memory_buffer; 
+0

@克里斯:這是一個初始化,不是結構的定義。 –

+0

@KevinBallard,是的,我剛剛意識到這一點。在其他語言中,你可以使用類似的語法來初始化特定的成員,而不是使用C++(可能C++/CLI有它,但似乎不大可能)。 – chris

+2

@chris:你可以用C語言使用'{.field = value,.field2 = value2}' –

回答

6

這是一個GNU C擴展。基本上它允許以任何順序指定初始化器中的元素。

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

UPD:標準(C99)的方式做同樣的事情{ .field = value, .field2 = value2 }

+0

呵呵,我從來不知道'field:value'是這個的另一種語法。顯然它已經過時很久了。 –

+0

謝謝。得到它了。 –

+4

你的答案還應該提到指定初始值設定項的C99語法。 –