タグ

CとC++に関するrbyのブックマーク (2)

  • 可変個数引数マクロの作り方 - tshinoの日記

    GCCのプリプロセッサの便利な拡張を知ったのでメモ。 関数形式マクロの引数の数は固定、というのはよく知られていると思うけど、現在のC言語(C99)ではサポートされている。 // (1) #define DEBUG_PRINT(...) printf(__VA_ARGS__)C++の仕様には入っていないけど、まあGCCではC++でも使えている。 ただ、__VA_ARGS__ はすこし凝ったことをするには限界があることを最近知った。例えば、この DEBUG_PRINT() の表示に関数名を追加したいとする。 // (2) #define DEBUG_PRINT(fmt, ...) \ printf("%s(): "fmt, __func__, __VA_ARGS__)__func__ は関数名の文字列を指す特別な識別子で、これもC99。マクロに似ているけどマクロではないので、__FILE__や

    可変個数引数マクロの作り方 - tshinoの日記
  • ワイド文字列の罠

    C++の罠 wchar_tを使うときの罠 日語などのマルチバイト文字列を扱うソフトで、 正規表現などの文字列処理をもっと楽にやりたいという人は、 選択肢の一つとしてワイド文字列の使用を考えることでしょう。 最近では多くのライブラリがワイド文字列とシングルバイト文字列双方に対応し、 C言語も95年の改定でワイド文字列型wchar_tを導入し、 既存のchar型を使用する標準ライブラリはほぼ全てwchar_t版が用意されました。 無論C++も、98年にISOで標準化された際には、 文字列クラスはちゃんとstringとwstringの双方が用意されました。 ところが、実際にwchar_tを使用するとなると、様々な障壁が立ちはだかります。 ここでは、私が陥ったwchar_tに関する「罠」を紹介していきます。 罠その1:Win9xで使えない WinNT系列では、文字列を扱う全てのAPIにchar版

    rby
    rby 2009/10/23
  • 1