変数名辞典 C言語編

twcritique
よくあるソースコード中の変数のルール、なさそうであるゆるい変数の命名規則。BSD系の親しみやすいソースを中心にお送りしています。

i(j,k,l,m,n)整数型というFORTRANルール 仕様です

FORTRAN では、i, j, k, l, m, n から始まる変数は、宣言していなければ「整数型である」という仕様があります。その為、ループに用いるカウンタは整数であるため、for 文のループ カウンタに i が使われるのです。
なぜ for 文に使うループ変数は i なのか?

現に数学の総和(シグマ)はiを添字として使ってますし(最近のΣの公式ではkで採用されてますね、iは虚数[imaginary number]と混同されるからかな)、デカルト座標にはI,J,Kが使われます。
コーディング – なぜループカウンタ変数のほとんどに “i”が使用されるのか? – Qiita

FORTRANの作者であるBakusは、この命名規則については『Iから始まる6文字に決まったのは、みんな添え字にI、J、Kをつかっていたので、(L、M、Nを)気前よく増やした。』と言っています。

s (string/socket)

s = socket(res0->ai_family, res0->ai_socktype,
res0->ai_protocol)
netcat-openbsd/netcat.c at master · msporleder/netcat-openbsd · GitHub

socket() は通信のための端点 (endpoint) を作成し、 ディスクリプターを返す。
https://linuxjm.osdn.jp/html/LDP_man-pages/man2/socket.2.html

memmove(ns, s, (size_t)(cp – s));/* copy up to trailing number */
ns += cp – s;
OpenBSD-src/ps.c at master · Bluerise/OpenBSD-src · GitHub

str (string) よく見る

str は変数名です。文字列(string)を格納するための変数,という意味を持たせるためにこう命名したのでしょう。str という変数名が好みじゃなければ,x でも y でもお好きなものをどうぞ。
JavaScriptなどでみられるstrとは??? – システムエンジニアリング | 【OKWAVE】

void
show(FILE *ofp, char *str)
{
if ((dflag && repeats) || (uflag && !repeats)) {
if (cflag)
(void)fprintf(ofp, “%4d %s”, repeats + 1, str);
ファイル詳細: /src/usr.bin/uniq/uniq.c (master) – openbsd-octeon (git) – OpenBSD/OCTEON – OSDN

ret (return value)

ret = return value. Type could be anything in theory, but a more meaningful name is usually used when it’s more than just an int that describes whether the call succeeded.
What does the commonly used “ret” variable name mean? : learnprogramming

c,ch (char)

while ((ch = getopt(argc, argv, “benstuv”)) != -1)
OpenBSD-src/cat.c at master · Bluerise/OpenBSD-src · GitHub

int ch, col;
ファイル詳細: /src/usr.bin/cut/cut.c (master) – openbsd-octeon (git) – OpenBSD/OCTEON – OSDN

if ((ch = getc(fp)) == EOF)
return;
if (ch == ‘\n’)
break;

ch = get_char(f);
if (EOF == ch)
break;
2.11BSD#431 – /usr/src/usr.sbin/cron/crontab.c

parse_args(int argc, char *argv[]) {
int argch;
char *ep;

while (-1 != (argch = getopt(argc, argv, “l:nx:”))) {
ファイル詳細: /src/usr.sbin/cron/cron.c (master) – openbsd-octeon (git) – OpenBSD/OCTEON – OSDN

buf(buffer)/len(length)

char *format, buf[1024];
ファイル詳細: /src/bin/date/date.c (master) – openbsd-octeon (git) – OpenBSD/OCTEON – OSDN

(void)strftime(buf, sizeof(buf), format, localtime(&tval));
(void)printf(“%s\n”, buf);

if (!cnischar()) {
strlcpy(buf, “boot”, 5);
putchar(‘\n’);
return strlen(buf);
}
openbsd/cmd.c at master · lattera/openbsd · GitHub

size_t len;
char *newopts, *ns, *cp;

len = strlen(s);
OpenBSD-src/ps.c at master · Bluerise/OpenBSD-src · GitHub

size_t linelen;
ファイル詳細: /src/usr.bin/xargs/xargs.c (master) – openbsd-octeon (git) – OpenBSD/OCTEON – OSDN

if ((av = bxp = calloc(linelen, sizeof(char **))) == NULL)
err(1, NULL);

size_t len;
ファイル詳細: /src/usr.bin/cut/cut.c (master) – openbsd-octeon (git) – OpenBSD/OCTEON – OSDN

if (lbuf[len – 1] != ‘\n’) {
/* no newline at the end of the last line so add one */
if ((tbuf = (char *)malloc(len + 1)) == NULL)
err(1, NULL);
memcpy(tbuf, lbuf, len);

while (1) {
len = read(STDIN_FILENO, &ch, 1);
if (len == -1 && errno == EINTR)
continue;
if (len == 0)
exit(1);
break;
}
ファイル詳細: /src/usr.bin/top/top.c (master) – openbsd-octeon (git) – OpenBSD/OCTEON – OSDN

for(i = 1+nflag; i < argc; i++)
len += strlen(argv[i])+1;

buf = malloc(len);
UNIX V5, OpenBSD, Plan 9, FreeBSD, and GNU coreutils implementations of echo.c · GitHub

errstr(error string)

if (errstr)
errx(1, “group is %s: %s”, errstr, s);
OpenBSD-src/chmod.c at master · Bluerise/OpenBSD-src · GitHub

if (errstrp != NULL)
*errstrp = ev[error].errstr;
strtonum.c

iflag = strtonum(optarg, 0, UINT_MAX, &errstr);
if (errstr)
errx(1, “interval %s: %s”, errstr, optarg);
netcat-openbsd/netcat.c at master · msporleder/netcat-openbsd · GitHub

p(pointer!)

char a[8];
char *ptr;
int i;

char **ap, *cmd, *machine, *p, *p_add, *sflag;
openbsd-man/man.c at master · voidlinux/openbsd-man · GitHub

if (!(fts = fts_open(argv, flags, NULL)))
err(1, NULL);
while ((p = fts_read(fts)) != NULL) {
OpenBSD-src/rm.c at master · Bluerise/OpenBSD-src · GitHub

char *ep;

if (!*gargv)
return(0L);

if (**gargv == ‘\”‘ || **gargv == ‘\”)
return (long) *((*gargv++)+1);

errno = 0;
val = strtol (*gargv, &ep, 0);
ファイル詳細: /src/usr.bin/printf/printf.c (master) – openbsd-octeon (git) – OpenBSD/OCTEON – OSDN

time_t secs = 0, t;

cp = *argv;
while ((*cp != ‘\0’) && (*cp != ‘.’)) {
ファイル詳細: /src/bin/sleep/sleep.c (master) – openbsd-octeon (git) – OpenBSD/OCTEON – OSDN

t = (secs * 10) + (*cp++ – ‘0’);
UNIXとPOSIX互換システムでは、UNIX時間(1970年1月1日 UTC(協定世界時)0時00分00秒からの秒数)を表す符号付の整数(通常は32または64ビット)でtime_t 型を実装している(閏秒は数えない)。いくつかのシステムでは、負の時刻値をサポートするが、サポートしないシステムもある。
https://ja.wikipedia.org/wiki/Time_t

if ((p = getcwd(NULL, (size_t)0)) == NULL)
err(1, “getcwd”);
(void)printf(“%s\n”, p);
ファイル詳細: /src/bin/pwd/pwd.c (master) – openbsd-octeon (git) – OpenBSD/OCTEON – OSDN

argv(argument vector) argc (argument count) optind

argc は argument count(引数の個数)、argv は argument vector(引数の配列)の略です。
argc,argvは何の略 | C言語のTipsとサンプル | C入門 基本情報対策講座のcClip

The name of the variable argv stands for “argument vector”
The GNU C Programming Tutorial

The name of the variable argc stands for “argument count”

main(int argc, char *argv[])
netcat-openbsd/netcat.c at master · msporleder/netcat-openbsd · GitHub

while ((ch = getopt(argc, argv,
“46DdFhI:i:klNnO:P:p:rSs:tT:UuV:vw:X:x:z”)) != -1) {

argc -= optind;
argv += optind;

変数 optind は、 argv の次に処理される要素のインデックスである。 システムによりこの変数の値は 1 に初期化される。 呼び出し側でこの値を 1 にリセットすることで、同じ argv のスキャンをやり直したり、新しい引き数ベクトルをスキャンすることができる。
Man page of GETOPT

新たなオプション文字を見つけると、 getopt() はその文字を返し、 外部変数 optind とスタティックな変数 nextchar を更新する。 これらによって、 getopt() は次回の呼び出しの際に、 以降のオプション文字や argv 要素のスキャンを継続できる。

extern char *optarg;
extern int optind, opterr, optopt;
Man page of GETOPT

int
main(int argc, char *argv[])
{
extern char *optarg;
extern int optind;
openbsd-man/man.c at master · voidlinux/openbsd-man · GitHub

main(argc, argv)
int argc;
char *argv[];
UNIX V5, OpenBSD, Plan 9, FreeBSD, and GNU coreutils implementations of echo.c · GitHub

argc–;
for(i=1; i<=argc; i++)
printf(“%s%c”, argv[i], i==argc? ‘\n’: ‘ ‘);

ap/cp

va_list aq = ap;
Man page of STDARG

char *ap, *p, *start;

while ((ap = *++argv)) {
/* Return if “–” or not an option of any form. */
if (ap[0] != ‘-‘) {
ファイル詳細: /src/usr.bin/uniq/uniq.c (master) – openbsd-octeon (git) – OpenBSD/OCTEON – OSDN

if (*cp == ‘t’ && *s != ‘-‘)
*cp = ‘T’;

char *ap, *p, *t;
size_t len;
char *start;

while ((ap = *++argv)) {
tail.c

static void PrintErrorString(const char* format, …) {
va_list ap;
va_start(ap, format);
node/node.cc at master · nodejs/node · GitHub

res(resource)

if((n= getaddrinfo(host, port, &hints, &res)) !=0)
printf(“tcp listen error for %s, %s”, host, port, gai_strerror(n));
http://web.cecs.pdx.edu/~jrb/tcpip/sockets/ipv6.src/tcp/tcpserver.c

fp(file pointer) とかf

FILE *fp;

if (strcmp(name, “-“) == 0)
return(*mode == ‘r’ ? stdin : stdout);
if ((fp = fopen(name, mode)) == NULL)

FILE *fp;

fp = stdin;
ファイル詳細: /src/bin/cat/cat.c (master) – openbsd-octeon (git) – OpenBSD/OCTEON – OSDN

filename = “stdin”;
do {
if (*argv) {
if (!strcmp(*argv, “-“))
fp = stdin;
else if ((fp = fopen(*argv, “r”)) == NULL) {

FILE *fp;
tail.c

if ((file->fp = (argc ? fopen(file->file_name, “r”) : stdin)) == NULL ||
fstat(fileno(file->fp), &file->st)) {
file->fp = NULL;
ierr();
continue;
}

FILE *f;
ファイル詳細: /src/usr.bin/grep/grep.c (master) – openbsd-octeon (git) – OpenBSD/OCTEON – OSDN

if ((f = fopen(fn, “r”)) == NULL)
err(2, “%s”, fn);
while ((line = fgetln(f, &len)) != NULL)

FILE *ifp = NULL, *ofp = NULL;
ファイル詳細: /src/usr.bin/uniq/uniq.c (master) – openbsd-octeon (git) – OpenBSD/OCTEON – OSDN

switch(argc) {
case 0:
ifp = stdin;
ofp = stdout;
break;
case 1:
ifp = file(argv[0], “r”);
ofp = stdout;
break;
case 2:

FILE *mountdfp;
ファイル詳細: /src/sbin/mount/mount.c (master) – openbsd-octeon (git) – OpenBSD/OCTEON – OSDN

(mountdfp = fopen(_PATH_MOUNTDPID, “r”)) != NULL) {
if (fscanf(mountdfp, “%d”, &pid) == 1 &&
pid > 0 && kill(pid, SIGHUP) == -1 && errno != ESRCH)
err(1, “signal mountd”);
(void)fclose(mountdfp);

printsignals(FILE *fp)
{
int n;

for (n = 1; n < NSIG; n++) {
(void)fprintf(fp, “%s”, sys_signame[n]);
ファイル詳細: /src/bin/kill/kill.c (master) – openbsd-octeon (git) – OpenBSD/OCTEON – OSDN

fd(file descriptor)

int aflag, cflag, mflag, ch, fd, len, rval, timeset;
http://homepages.cs.ncl.ac.uk/nick.cook/csc2025/minix/3.2.1/usr/src/commands/touch/touch.c

fd = open(*argv,
O_WRONLY | O_CREAT, DEFFILEMODE);
if (fd == -1 || fstat(fd, &sb) || close(fd)) {

int fd;
ファイル詳細: /src/usr.bin/wc/wc.c (master) – openbsd-octeon (git) – OpenBSD/OCTEON – OSDN

if (file) {
if ((fd = open(file, O_RDONLY, 0)) < 0) {
warn(“%s”, file);

struct pollfd {
int fd; /* file descriptor */
short events; /* requested events */
short revents; /* returned events */
};
poll – システムコールの説明 – Linux コマンド集 一覧表

pfd[0].fd = STDIN_FILENO;

https://osdn.jp/projects/openbsd-octeon/scm/git/openbsd-octeon/blobs/master/src/usr.bin/top/top.c

sb (stat buffer)/sbuf/fsb

struct stat sb;
int rval;
char *f;
OpenBSD-src/rm.c at master · Bluerise/OpenBSD-src · GitHub

/*
* Remove a file. POSIX 1003.2 states that, by default, attempting
* to remove a directory is an error, so must always stat the file.
*/
while ((f = *argv++) != NULL) {
/* Assume if can’t stat the file, can’t unlink it. */
if (lstat(f, &sb)) {

if ((fp = fopen(fname, “r”)) == NULL ||
fstat(fileno(fp), &sb)) {
tail.c

struct stat sbuf;
ファイル詳細: /src/usr.bin/which/which.c (master) – openbsd-octeon (git) – OpenBSD/OCTEON – OSDN

if ((stat(prog, &sbuf) == 0) && S_ISREG(sbuf.st_mode) &&
access(prog, X_OK) == 0) {

pos

char *pos;
base64.c

pos = strchr(Base64, ch);
if (pos == 0) /* A non-base64 character. */
return (-1);

expr (expression)

https://matome.naver.jp/odai/2145170194370904801
2020年03月14日