【发布时间】:2014-10-06 19:58:07
【问题描述】:
我希望以下代码能够编译。 Clang 和 VC++ 都在else 的行上给我一个错误。
void MyFunction(std::int32_t& error)
{
std::int32_t variable = 0;
if(GetSomething())
error = EOK;
else
error = ERROR;
}
如果我在error = EOK; 周围加上花括号,那么它会编译。为什么VC++会说:
不匹配 if 的 else 非法
?
我的完整代码如下,用 typedef 替换 std::uint32_t。在 VC++ 中它仍然给出同样的错误。
using sint32 = int;
#define ERROR 5;
#define EOK 0;
bool GetSomething();
void MyFunction(sint32& error)
{
sint32 variable = 0;
if (GetSomething())
error = EOK;
else
error = ERROR;
}
【问题讨论】:
-
我闻到一只大老鼠的味道。
-
什么是 EOK(或 GetSomething)?也许是一些奇怪的宏定义
-
这是不应该使用宏的众多例子之一。
-
@bames53 更重要的是,一个示例说明为什么应该在 if-else 受控语句周围使用大括号...
-
@silvo:这是一个损坏的宏定义,与需要大括号没有任何关系。你也会从
error = GetSomething() ? EOK : ERROR;那里得到一个编译错误,而且没有办法把大括号放进去。
标签: c++ if-statement