グレインの備忘録

プログラミング関係とかをつらつらと。

C/C++

Cmake+Ninjaでビルドをやってみる

最近プログラムをビルドするのにCmakeを使い始めてみた。 Cmakeでは、軽量な動作で有名なNinja用のファイルを生成できるらしいので試してみる。 Ninjaのインストール 同名のパッケージにご用心 早速入れてみようと、安直に以下のコマンドを実行。 $ sudo apt…

リンクが倍速くなるらしい「lld」を試す

最近、ビルトインのldによるリンクの遅さが気になってきた。 そこで、もっと高速なリンク方法がないか探してみたところ、いくつかの新しいリンカに辿り着いた。 GNU goldよりも2倍早いlld 高速なリンカとしてはGNU goldが割と有名らしいが、それよりも更に高…

コンテナのイテレータを保持するのは避けよう

STLとかのコンテナが吐き出すイテレータをポインタ代わりに持っとくのはやめましょうねというお話。 コンテナへの非const操作はイテレータを破壊する(可能性がある) 「可能性がある」だから余計厄介だったりする。 テストケースではうまく動いても実環境では…

C++用のMakefileを半自動で書く

Makefileはうまく書けばコンパイルが自動化できて楽だが、ソースの登録が面倒くさい。 そこで、シェルスクリプトなどを活用して自動でMakefileを書いてみる。 (autoconfとかを使ってもいいのだけど、小規模なプログラムでいちいちconfigureするのも面倒だし…

バイナリモードのfseekとfwriteの挙動

バイナリファイルで一旦fwriteした後に前方へfseekして、もう一回fwriteすると上書きされるのか挿入されるのかたまに忘れるのでメモっとく。 結論から言うとfseekしてからfwriteすると元のデータは上書きされる。(まあ当たり前か) 例えば、新規ファイルにつ…