我已阅读函数参数中的表达式求值顺序,二元运算符在C中未定义。这是什么意思,什么时候该注意?何时评价顺序重要
Q
何时评价顺序重要
0
A
回答
3
只是不依赖于它。如果你有这样的代码:
func(a(), b(), c());
随后的a()
,b()
和c()
执行顺序不应该的问题为你的程序的正确性。如果确实如此(例如,如果a()
打开一个资源,并且c()
关闭它),那么这里有危险。
最简单的解决方法是写出这样的代码是这样的:的
int a_result = a();
int b_result = b();
int c_result = c();
func(a_result, b_result, c_result);
1
下面是一个简单的例子:
SomeCall(Writefile(handle) , Closefile(handle)) ;
在什么样的顺序的两个函数被调用没有规定,你可以关闭该文件之前,你甚至可以写进去,即使调用的顺序逻辑上显示正确。
+0
它为什么“逻辑上显示正确”?在我看来,你正在做的事情,应该没有秩序,即不正确的命令。 – 2014-10-12 12:43:00
+0
@KerrekSB因为我们从左到右,往下看。例如,代码也可以分成不同的行。记住OP不是C专家,逻辑确实起到了作用。 – 2501 2014-10-12 12:43:29
相关问题
- 1. C/C++宏评价顺序
- 2. C++参数评价顺序
- 3. 渴望评价/应用顺序和懒惰评价/正常顺序
- 4. 序列点和评价的顺序
- 5. 移动语义&参数评价顺序
- 6. C++ 17评价顺序与运算符重载功能
- 7. 力/要挟评价
- 8. 比较列时顺序是否重要?
- 9. C++评估顺序
- 10. DBSCAN评价 - 需要true_labels
- 11. C评价秩序
- 12. C-指针递增边缘情况和评价顺序
- 13. 表达式语言bean属性评价顺序
- 14. 与-EVAL-后负荷在Emacs Lisp和评价的顺序
- 15. 减法 - 评估顺序
- 16. find中的评估顺序
- 17. eval函数 - 评估顺序
- 18. 红宝石评估顺序
- 19. Clojure递归评估顺序
- 20. cataM的评估顺序
- 21. 表达式评估顺序
- 22. JavaScript中的评估顺序
- 23. 评估顺序调用
- 24. C++中的评估顺序
- 25. 以相反的顺序将评论从django评论框架中重新排序
- 26. 指数的顺序是否重要?
- 27. g ++编译顺序很重要吗?
- 28. Sqoop命令的顺序是否重要?
- 29. SQL Server - 列顺序是否重要?
- 30. 表中的列顺序是否重要?
可能重复的[解释在printf的评价;的顺序](http://stackoverflow.com/questions/12960241/explain-the -order-of-evalution-in-printf) – 2501 2014-10-12 12:12:24
[C函数调用之前的参数评估顺序]的可能重复(http://stackoverflow.com/questions/376278/parameter-evaluation-order-before-a-function -calling-in-c) – WhozCraig 2014-10-12 12:13:30
你知道什么“* [an] expression [s] *”的评估意味着/是什么? – alk 2014-10-12 12:18:49