条件操作和花括号可以影响代码吗?

ret*_*n 0 0 c++ debugging

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

typedef char WCHAR_T;
#define STRLEN(x) strlen(x)
if (argc > 2)
{
    WCHAR *pFileName = argv[1];
    basic_string <WCHAR> strFileName(pFileName, STRLEN(pFileName));
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,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));
}
Run Code Online (Sandbox Code Playgroud)

仍然无法正常工作.编辑:通过"不工作",我的意思是编译器提供错误消息,如"strFileName"未声明,这意味着此声明根本没有运行.

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

lit*_*adv 6

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