条件操作和大括号会影响代码吗?

Can conditional operation and curly braces impact the code?

本文关键字:影响 代码 操作 条件      更新时间:2023-10-16

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

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

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

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

我想您尝试使用大括号外某处的变量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

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