考虑
struct iovec {
ptr_t iov_base; /* Starting address */
size_t iov_len; /* Length in bytes */
};
Run Code Online (Sandbox Code Playgroud)
要么
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 */
};
Run Code Online (Sandbox Code Playgroud)
为这些成员名称添加前缀是什么意义(iov_,st_)?
Jon*_*ler 31
很久以前(甚至在我开始用C编程之前的方式,这是30多年前),结构元素的成员名称必须在程序中的所有结构中是唯一的 - 而不是'每个结构标记'作为这个要求现在已经出现,并且自K&R时代开始--Cn 编程语言第1版,由Kernighan&Ritchie,1978年.
因此,在那些日子里,前缀有助于将一种结构类型的成员与其他每种结构类型分开.因此,使用这种前缀的习惯越来越多,并且它继续使用最近开发的结构类型.的struct stat历史可以追溯到旧体制的日子.struct iovec是一个更近期的发明(可能在20世纪80年代的某个时候),它遵循旧的传统.
使用前缀没有坏处.它可能略有帮助.如果你看到gadzooks.st_mtime,你不需要gadzooks高度自信地猜测它的类型struct stat.
顺便提一下,你可以找到早期版本的"The C Reference Manual"作为Unix第7版手册(Unix程序员手册第2A卷)的一部分,该手册说明了(p244第8.5节,重点增加):
结构成员和结构标签的名称可以与普通变量相同,因为可以通过上下文进行区分.但是,标签和成员的名称必须是不同的. 只有当两个成员属于同一类型并且它们的结构相对于它们的结构相同时,相同的成员名称才能出现在不同的结构中; 因此,单独的结构可以共享共同的初始段.
同样的手动文件早已废弃不用=+的家庭赋值运算符(在对比的是现代的,距今约1976年的意思,+=家庭赋值运算符).
| 归档时间: |
|
| 查看次数: |
2920 次 |
| 最近记录: |