トップ回答者
VC++2015 マクロがコンパイル通らない

質問
-
VC++2010でのプロジェクトをVC++2015でコンパイルしようとしているのですが、コンパイルが通りません。
調べてみたのですが、ユーザー定義のリテラルをサポートしたので、マクロと文字列を空白で開ける必要がある等が書かれていましたが、
下記の場合にどのように対応したらよいかが分かりません。マクロ定義
#define CLSID_GUID_SUBKEY(key) _T("CLSID\\{xxxxxx-xxxx-xxx-xxx-xxxx}\\") ## key
使用しているところ
CLSID_GUID_SUBKEY(_T("")),
CLSID_GUID_SUBKEY(_T( "DefaultIcon" )),
ビルドエラー
error C3688: リテラル サフィックス '_T' が無効です。リテラル演算子またはリテラル演算子テンプレート 'operator ""_T' が見つかりません
どの様に修正するのでしょうか。
回答
-
UNICODEが定義されていて、マクロ定義
#define CLSID_GUID_SUBKEY(key) _T("CLSID\\{xxxxxx-xxxx-xxx-xxx-xxxx}\\") ## key
でCLSID_GUID_SUBKEY(L"DefaultIcon")と記述すると、単純に文字列の連結で
L"CLSID\\{xxxxxx-xxxx-xxx-xxx-xxxx}\\"L"DefaultIcon"
と解釈されてしまいますので、引数に _T や L は必要なく単に
CLSID_GUID_SUBKEY("DefaultIcon")
とするとよいと思います。
参考サイト: トークン連結演算子(##)
- 編集済み kenjinoteMVP 2016年10月27日 6:56
- 回答としてマーク TAKAKUN 2016年10月27日 7:09
すべての返信
-
tchar.hに _T() マクロが定義されていますので、これを #include してください。
-
UNICODEが定義されていて、マクロ定義
#define CLSID_GUID_SUBKEY(key) _T("CLSID\\{xxxxxx-xxxx-xxx-xxx-xxxx}\\") ## key
でCLSID_GUID_SUBKEY(L"DefaultIcon")と記述すると、単純に文字列の連結で
L"CLSID\\{xxxxxx-xxxx-xxx-xxx-xxxx}\\"L"DefaultIcon"
と解釈されてしまいますので、引数に _T や L は必要なく単に
CLSID_GUID_SUBKEY("DefaultIcon")
とするとよいと思います。
参考サイト: トークン連結演算子(##)
- 編集済み kenjinoteMVP 2016年10月27日 6:56
- 回答としてマーク TAKAKUN 2016年10月27日 7:09