0

我想知道条件运算符是否真的可以阻止其他不相关的代码工作。例如下面:

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”没有声明,这意味着这个声明根本没有运行。

我不知道为什么花括号会对代码产生如此大的影响。当我摆脱花括号时,代码就像魔术一样工作......有人可以解释一下吗?谢谢。

4

3 回答 3

6

因为strFileName只存在于大括号内。大括号定义范围,局部变量仅在它们定义的范围内是已知的。

于 2012-06-15T00:55:50.753 回答
1

我想您正在尝试使用strFileName大括号外某处的变量,这是不可能的。

{和大括号定义了一个块,里面声明的}变量只存在于这个块中。一种解决方法是strFileName在块外部声明并从内部分配它的值

typedef char WCHAR_T;
#define STRLEN(x) strlen(x)

basic_string <WCHAR> strFileName;

if (argc > 2)
{
    WCHAR *pFileName = argv[1];
    strFileName.assign(pFileName, STRLEN(pFileName));
}

std::cout << strFileName << std::endl; // should work now
于 2012-06-15T01:00:41.627 回答
0

我看到了 WCHAR_T 的定义,但代码中使用的是 WCHAR。WCHAR 是否在任何地方定义?

于 2012-06-15T00:59:30.860 回答