结构的成员名称中的前缀

时间:2016-03-08 17:37:23

标签: c linux

考虑

@RequestMapping(value = "/", method = RequestMethod.GET)
public String renderIndex() {
    return index;
}

struct iovec {
   ptr_t iov_base; /* Starting address */
   size_t iov_len; /* Length in bytes */
};

为这些成员名称添加前缀(struct stat { dev_t st_dev; /* ID of device containing file */ ino_t st_ino; /* inode number */ mode_t st_mode; /* protection */ nlink_t st_nlink; /* number of hard links */ uid_t st_uid; /* user ID of owner */ gid_t st_gid; /* group ID of owner */ dev_t st_rdev; /* device ID (if special file) */ off_t st_size; /* total size, in bytes */ blksize_t st_blksize; /* blocksize for file system I/O */ blkcnt_t st_blocks; /* number of 512B blocks allocated */ time_t st_atime; /* time of last access */ time_t st_mtime; /* time of last modification */ time_t st_ctime; /* time of last status change */ }; iov_)有什么意义?

1 个答案:

答案 0 :(得分:31)

很久很久以前(甚至在我开始用C编程之前的方式,这是30多年前),结构元素的成员名称必须在程序中的所有结构中是唯一的 - 而不是'每个结构标签'作为现在的要求,并且自K& R的日子开始 - The C Programming Language第1版,由Kernighan&里奇,1978年。

因此,在那些日子里,前缀有助于将一种结构类型的成员与其他每种结构类型分开。因此,使用这种前缀的习惯越来越多,并且它继续使用最近开发的结构类型。 struct stat可以追溯到旧系统的时代; struct iovec是一项更近期的发明(可能在20世纪80年代的某个时候),它遵循旧的传统。

使用前缀不会造成任何伤害。它可能略有帮助。如果您看到gadzooks.st_mtime,则无需查看gadzooks的定义,即可高度确信其类型为struct stat

顺便提一下,您可以找到早期版本的“The C Reference Manual”作为Unix第7版手册(Unix Programmer's Manual Volume 2A)的一部分,该手册(p244第8节,增加了重点):

  

结构成员和结构标签的名称可以与普通变量相同,因为区别可以   由上下文制作。但是,标签和成员的名称必须是不同的。 可以显示相同的成员名称   只有当两个成员属于同一类型并且它们的结构相对于它们的结构时才有不同的结构   相同的; 因此,单独的结构可以共享一个共同的初始段。

相同的手册记录了长期过时的=+赋值运算符族(与现代相反,意味着自1976年以来,+=赋值运算符族)。