GCC

知らないうちにMinGWのprintfがまともになっていた。

先日までGCCで日本語文字列がどうのこうのということを書いていましたが、その過程でMinGWをいろいろ調べることになりました。その際に、MinGWのprintf系関数がずいぶんまともになっていることに気付きました。

MinGWのランタイムライブラリは、C99で追加されたようなものを除けば、msvcrt.dllに依存してます。これはMIcrosoft Visual C++ 6.0のライブラリです。C99に対応していないのはもちろん、long double型がVC++では64ビット、MinGWでは96ビットと異なることが原因で、"%Lf"などのlong double型用の書式が正しく動作しませんでした。

続々・GCCで日本語識別子を使う

ちょっとしつこくなってきましたが、今回もGCCで日本語識別子を使う話題です。前回は実行時の影響でしたが、今回はコンパイル時のエラーメッセージの話です。

続・GCCで日本語識別子を使う

前回、多バイト文字を国際文字名に変換するための前処理を行い、その後、-fextended-identifiersオプションを付けてコンパイルすることで、GCCでも日本語識別子が使えるようになることを書きました。今回は、もう少し突っ込んで、日本語識別子(正確には多バイト文字の識別子)の実行時における影響について書いてみることにします。

GCCで日本語識別子を使う

GCCで日本語識別子を使う方法について、日本語の情報はあまり見かけませんので書き留めておきます。

バージョン4.1.xから-fextended-identifiersというコンパイルオプションが追加されています。現時点では実験的なもののようですが、特に問題なく動作しています。この-fextended-identifiersというのは、日本語の識別子を直接使えるようにするオプションではありません。できることは、国際文字名を有効にすることだけです。

この機能はまともに動いてほしい

GCCもどんどんバージョンアップして、今では4.6.0が最新版になっています。その過程で、C++0Xや(少しだけですが)C1Xへの対応も進んでいるわけですが、本来であればとっくに対応できていなければならないはずの機能がいまいちだったりもします。

GCC拡張を使ったスマートポインタ

前回はcleanup属性を使ってデストラクタのような機能を実現する方法を取り上げました。今回はその応用として簡易的なスマートポインタを作ってみました。auto_ptrという名前を付けましたが、scoped_ptrのほうが適切だったかもしれません。

続・GCC拡張を使ったusing

以前、「GCC拡張を使ったusing」という記事を書きました。あれから2ヶ月半ほど経ちましたが、今になって思うと、肝心なGCC拡張を忘れていたことに気付きます。"cleanup"がそれです。

GCC 4.6に追加された-std=c1xオプション

GCC 4.6には -std=c1x および -std=gnu1x オプションが追加されたことに、つい先ほど気付きました。具体的に、C1Xのどの機能が有効になるのかまではわかりません。

GCC拡張を使ったusing

RiSKさんのブログで「C99, C++ で使える using マクロ書いた」という記事を見かけました。C#のusingのようなマクロを作るというのが趣旨のようです。これに感化されて、私もusingマクロを書いてみました。

STLもどきでは、thisなしでどうやってメンバ関数を呼び出すか

さらにこのネタが続きます。前回は、vector もどきを作ることを試みたわけですが、そこではオリジナルのSTLのメンバ関数に相当するものを、普通の関数形式のマクロを使って実現していました。しかし、オリジナルのSTLのような、. 演算子や -> 演算子を使って呼び出せるメンバ関数にできないのかも検討してみましょう。

コンテンツ配信