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(後述)と違い、マクロで実装してもいいことになっている。
マクロだと、
このように、インクリメントなどで副作用が起こる式だと2回以上評価される可能性があるため、問題である。
ただ、
サービス情報システム(C言語には関数が存在しないという迷言) - ncaq
glibcはマクロではなさそう。
こちらでも試したが、2回評価されるような現象はみられなかった。
Sample/c/getc/getc/src/getc at master · bg1bgst333/Sample · GitHub