sufijo - Prefijos en los nombres de miembros de una estructura
run a program in linux (1)
Considerar
struct iovec {
ptr_t iov_base; /* Starting address */
size_t iov_len; /* Length in bytes */
};
o
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 */
};
¿Cuál es el punto de prefijar esos nombres de miembros ( iov_
, st_
)?
Hace mucho tiempo (mucho antes de que comenzara a programar en C, hace más de 30 años), los nombres de los miembros de los elementos estructurales tenían que ser únicos en todas las estructuras de un programa, en lugar de "etiqueta de estructura" como El requisito es ahora, y ha sido desde los días de K&R - The C Programming Language 1st Edition, por Kernighan & Ritchie, 1978.
Como consecuencia, en esos días, el prefijo ayudó a segregar a los miembros de un tipo de estructura de cada otro tipo de estructura. En consecuencia, creció el hábito de usar dichos prefijos, y continúa con los tipos de estructuras desarrolladas más recientemente. La struct stat
se remonta a los días del sistema anterior; struct iovec
es un invento más reciente (quizás en algún momento de la década de 1980) que siguió la antigua tradición.
Usar prefijos no hace daño. Podría ser marginalmente útil. Si ve gadzooks.st_mtime
, no necesita buscar la definición de gadzooks
para adivinar con la máxima confianza que es de tipo struct stat
.
Por cierto, puede encontrar una versión anterior de ''The C Reference Manual'' como parte de los manuales de Unix 7th Edition ( Manual del Programador de Unix, Volumen 2A ) que dice (§8.5 en p244, énfasis agregado):
Los nombres de los miembros de la estructura y las etiquetas de la estructura pueden ser los mismos que las variables ordinarias, ya que se puede hacer una distinción por contexto. Sin embargo, los nombres de las etiquetas y los miembros deben ser distintos. El mismo nombre de miembro puede aparecer en estructuras diferentes solo si los dos miembros son del mismo tipo y si su origen con respecto a su estructura es el mismo; así, las estructuras separadas pueden compartir un segmento inicial común.
El mismo manual documenta la larga obsoleta =+
familia de operadores de asignación (en contraste con lo moderno, es decir, desde aproximadamente 1976, +=
familia de operadores de asignación).