getc

getcは、指定されたストリームから、文字を取得する。

Man page of FGETC
C言語関数辞典 - getc

標準入力と、ファイルから、それぞれ文字を取得してみる。

test1.txtに"A"だけ書いておく。

$ cat test1.txt
A
$ vi getc.c
$ gcc getc.c -o getc
$ ./getc
stdin: X
stdin: c = X
fp: c = A
[bg1@localhost getc]$

先に標準入力で'X'を入力すると、'X'がgetcで取得されて、cに格納されるので、cを出力。
そのあと、test1.txtから1文字読み込み、cに格納されるので、cを出力。

getcはfgetc(後述)と違い、マクロで実装してもいいことになっている。
マクロだと、

C言語関係掲示板 過去ログ962

このように、インクリメントなどで副作用が起こる式だと2回以上評価される可能性があるため、問題である。
ただ、

サービス情報システム(C言語には関数が存在しないという迷言) - ncaq

glibcはマクロではなさそう。
こちらでも試したが、2回評価されるような現象はみられなかった。

Sample/c/getc/getc/src/getc at master · bg1bgst333/Sample · GitHub