【发布时间】:2017-11-23 10:21:35
【问题描述】:
我正在做一个 C++ 编译器项目,我需要在可能错误使用赋值运算符而不是比较运算符的地方标记警告。 。例如
在if 语句中进行比较时,检查变量a 为10 有时我们错误地输入if(a= 10),这将导致if 语句总是true 而我想只有当a 是10 时才为真。我能想到的一些案例是:
-
if(var = a),逻辑上应该是if( var==a ) while(var = a )for(;var=a;)do{}while(var=a)var=a? "some XYZ": "some ABC"
能否请您帮助我解决可能发生此逻辑错误的更多情况,用户应该使用==,而错误地使用了=?
【问题讨论】:
-
反过来呢,使用比较而不是赋值呢?我已经看过几次了。
-
至于您的“问题”,一些编译器可以检测到这一点并发出警告。并且有许多很好的静态分析工具也可以检测到此类问题(以及更多)。
-
如果我是你,我不会在这上面浪费时间。有时您想要将赋值作为循环条件,例如在字符串复制习语中。有时你想在通常写作业时进行比较。恕我直言,人们只需要在他们身上灌输差异。
-
编写静态分析工具是一个不错的项目,但如果您想做一些很棒的事情,请选择表明这是故意的。仅仅因为这种用法对你 来说似乎是一个错误,并不意味着它是一个错误句号。我的意思是,想想芭丝谢芭告诉你的吧。
-
否,请选择一项。有细微的差别。例如,
a == b的结果类型在 C 中是int,在 C++ 中是bool。
标签: c++ compiler-errors compilation compiler-warnings