条件操作和大括号会影响代码吗?
Can conditional operation and curly braces impact the code?
我想知道条件运算符是否真的可以阻止其他不相关的代码工作。例如:
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是否在任何地方定义?
相关文章:
- 发布代码的 gdb 堆栈跟踪可读性如何影响 x64?
- 使用"静态"如何影响我的代码速度?
- 初始化正在影响与初始化无关的代码
- 用于验证 Visual Studio 一致性开关对生成的代码的影响的工具
- 来自重载或模板化函数的额外未使用代码的影响?
- 这会对代码产生任何影响吗?
- 错误的矢量化代码会影响可伸缩性吗?
- 公开类的内部组件,以防止编写过多代码和影响性能
- 以前的代码似乎会影响以后函数调用的时间
- 为什么跨线程更改共享变量的代码显然没有受到竞争条件的影响
- C 代码中的endianness影响
- 没有代码的内联函数会影响输出的二进制
- 编译器优化如何影响代码逻辑
- c++编译器如何扩展模板<>代码,它如何影响模板代码的速度?
- 在异常处理中,对性能的影响会随着 try 部分中的代码量而增长
- 这些continue语句如何影响我的代码
- 代码的后一部分在某种程度上影响了前一部分
- 条件操作和大括号会影响代码吗?
- 我认为这是一个编译器错误,这不应该影响我的代码,但它是
- 数组大小会影响代码结果