スタッフのブログです。個以上あるコメントは受け付けない設定になってます。)2009年07月17日GCCのprintfビルトイン関数に関しての続き前回のprintfの話で以下のコメントをいただきました。以下が気になりました。何か理由があるのかな直接この疑問に答えられているわけではありませんが、ちょっとだけ調べてみたのでここに記しておきます。文字列をstdoutに書き出した後に改行を入れてくれます。文字列だけで改行は入りません。gccのソースコードでビルトイン関数のprintfの変換をしているところで、興味深いコメントを見つけました。NULL_RTX;printfの引数が一つだけの時にputsへの変換ができるかどうか調べているところです。stdout)に変換したいけれど、変数stdoutが必要だが今はそれを得る方法がない。仮にここでコンパイラが内部的に変数stdoutをひねりだしたとしても、かなり前にもどって処理をやり直さなければならないのでしょう。gccが二つ以上のprintfやputs、putcharの合成をしないコンパイルの段階でこれらの関数の変換をするためには引数が定数文字列になっていなければなりません。これは頻度が低そうです。他のコンパイラではそのような合成をするのでしょうか?関数の合成ではありませんが、定数文字列は並べて書くと連結してくれます。以下のプログラムはdefineの値によって表示される文字列が異なりますが、コンパイルの段階でひとつの文字列になっています。(つまり実行時に連結されるわけではない。);}define値を変えて2通りでコンパイルし、そのアセンブラ出力を比較してみます。mainこの文字列が(printfから変換された)一回のputsでstdoutに出力されます。最新コメント「最新トラックバック」は提供を終了しました。(2)タグクラウドABCadbaidlAndroidARMarmv7asmbinderbionicBootbuildbuildrootbuiltinbusyboxcccacheCELFcelfjpClangcortex-a8Cortex-A9cpuinfodalvikvmDebiandebuggerdDMAelcembeddedemulatorEventexeGCCFlashfpufroyogccGDBGingerbreadgoldfishIceCreamSandwichinitinitrdinterpreterJAVAjavacjavapjitK&Rkernelkeykzm-a9-dualKZM-A9-GTkzm-ca9-01LinarolinuxLLVMloglogcatltsimingwMIPSmultiarchndkneonnetinstallnfsnon-stopobjdumppartnerPARTNER-JetportingpowermanagementprintfpropertyPyMitepythonqemuQTQTextCodecrootstockrubysdServiceSHsimdsmpTCGtuninguartubootUbuntuuclibcUNIXUSBv8vlinkwakelockwirelessx86zygote計測QRコード京都マイクロコンピュータ。