条件演算子が実際に他の無関係なコードの動作を防ぐことができるかどうか疑問に思っています。以下に例を示します。
typedef char WCHAR_T;
#define STRLEN(x) strlen(x)
if (argc > 2)
{
WCHAR *pFileName = argv[1];
basic_string <WCHAR> strFileName(pFileName, STRLEN(pFileName));
}
上記のコードでは、pFileName、argv[1]、および strFileName は比較とは関係ありませんargc > 2
。コマンドライン引数が完全に問題ないと仮定します。ただし、このコードはその比較では機能しません。また、コードを次の形式に変更しても:
typedef char WCHAR_T;
#define STRLEN(x) strlen(x)
{
WCHAR *pFileName = argv[1];
basic_string <WCHAR> strFileName(pFileName, STRLEN(pFileName));
}
それでもうまくいきません。編集:「機能しない」とは、コンパイラが「strFileName」が宣言されていないなどのエラーメッセージを表示することを意味します。これは、この宣言がまったく実行されなかったことを意味します。
中括弧がコードに大きな影響を与える理由がわかりません。中括弧を取り除くと、コードは魔法のように機能します...誰か説明してもらえますか? ありがとう。