私はカーニハンのCプログラミング本を読んでいて、出くわしputc
ましfputc
た。両者の違いや、いつ使用されるのかよくわかりませんでした。このトピックを扱ったStackOverflowの投稿をいくつか見つけましたが、それでも不明です。
ここで述べたように(putcにはstdoutが必要ですが、vs puts):
Kernighanの本によると、マクロと
putc
同等ですfputc
がputc
、マクロとして実装でき、putc
そのストリーム引数を複数回評価する可能性があります。との違いは
putc
、fputc
を使用するputc
と、ストリーム引数を複数回評価する必要がある可能性があるため、本質的に安全ではないマクロバージョンを実行するリスクがあることです。これは、ほとんどの人が気付いていないために気をつけていない合併症を引き起こすので、fputc
使用することをお勧めします。fputc
のマクロにはこの問題はありません。
質問:
putc
マクロとして実装できますが、同じことを行う際の問題は何fputc
ですか?2番目のステートメントは、いくつかの合併症と安全性の問題について言及しています。それらは何ですか?
putc
その引数を複数回評価します。それで、議論を評価することと比較してそれがもたらす長所または短所は何ですか。