首页
社区
课程
招聘
[求助]在VC++的编译器中 可否将 if (a=1) 的错误显示出来
发表于: 2010-10-14 14:27 7387

[求助]在VC++的编译器中 可否将 if (a=1) 的错误显示出来

2010-10-14 14:27
7387


void fun()
{
int a;
BYTE b[1024];

if (a=1)//不能产生编译警告
{
b[0]==1;
//warning C4553: '==' : operator has no effect; did you intend '='?
}
}



写代码的时候,有时候不注意就容易发生上面的事情

1 类似 if(a=1) 没有语法错误,但是这样写一般都是误写的
有没有办法设置编译器,让其自动产生错误消息?

2 有没有办法让 warning C4553 变成错误消息,非警告?

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (15)
雪    币: 724
活跃值: (81)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
2 有没有办法让 warning C4553 变成错误消息,非警告?

#pragma warning( error : 4553 )
2010-10-14 14:40
0
雪    币: 33
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谢谢

#pragma warning( error : 4553 ) 非常好

现在就差 if(a=1) ,把他报出来就好了
2010-10-14 14:44
0
雪    币: 49
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
可以
VS2010

项目属性 代码分析

打勾启动分析

选所有规则。
2010-10-14 14:45
0
雪    币: 33
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
看来是没戏了,只能自己注意了
2010-10-14 14:48
0
雪    币: 724
活跃值: (81)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
if(a=1)是合法形式,如何怕手误将if(a==1)写成if(a=1),有一个不方便的办法,就是要求这种形式写成if(1==a)。
2010-10-14 14:48
0
雪    币: 49
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
可以
VS2010

项目属性 代码分析

打勾启动分析

选所有规则。

警告        1        warning C6282: 运算符不正确: 在 Boolean 上下文中执行了常量赋值。应考虑改用“==”

抱歉刚才一下忘了代码分析这东西了
2010-10-14 14:50
0
雪    币: 33
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
谢谢 半道出家的

以前看别人代码不理解为什么写成if(1==a) 觉得怪难看的,现在才理解过来

这个也是个非常不错的办法,
2010-10-14 14:53
0
雪    币: 70
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
if(1 == a)这种方法很好,

只是风格看起来比较怪异。

习惯了就好。
2010-10-14 15:28
0
雪    币: 283
活跃值: (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
10
的确是习惯了就好。我现在看到if (a == 1)反而觉得很怪异
2010-10-14 17:25
0
雪    币: 401
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
直接将警告等级调到最高(vs2005是/W4选项),对if(a=1)会报一个警告“warning C4706: assignment within conditional expression”。
将警告视为错误可以用#pragma单独设置,也可以在添加/WX选项将所有警告视为错误。
2010-10-14 19:03
0
雪    币: 468
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
1==a和a==1的asm代码是一样的么?cmp a,1?
2010-10-14 19:05
0
雪    币: 6
活跃值: (1099)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
编码习惯问题
2010-10-15 09:37
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
14
Here's a dirty but portable trick you can use to force a compile-time error:
struct not_a_bool {};
template<typename T>
not_a_bool ERROR_CONDITIONAL_EXPRESSION_IS_NOT_BOOL(T value) { return not_a_bool(); }
bool ERROR_CONDITIONAL_EXPRESSION_IS_NOT_BOOL(bool value) { return value; }
#define if(x) if(::ERROR_CONDITIONAL_EXPRESSION_IS_NOT_BOOL(x))
#define while(x) while(::ERROR_CONDITIONAL_EXPRESSION_IS_NOT_BOOL(x))
2010-10-15 09:59
0
雪    币: 202
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
vc6 w4级可以检测出
2010-10-16 19:07
0
雪    币: 171
活跃值: (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
16
1 == a这种写法的目的是当写成 1 = a的时候让编译器报错。
2010-10-16 19:22
0
游客
登录 | 注册 方可回帖
返回
//