首页  >  文章  >  后端开发  >  第四版“C 编程语言”代码是否表现出明确定义的行为?

第四版“C 编程语言”代码是否表现出明确定义的行为?

Barbara Streisand
Barbara Streisand原创
2024-10-23 22:14:29183浏览

Does Fourth Edition

《C 编程语言》第四版中的代码是否具有明确定义的行为?

尽管如此,相关代码仍表现出未指定的行为不调用未定义的行为。这是由于子表达式的求值顺序未指定,特别是对于 s.replace() 的调用。

未指定子表达式求值的原理

函数参数具有未指定的求值顺序,这意味着无法假定各个函数参数的求值顺序。在这种情况下,不保证 s.find() 的参数在 s.replace() 之前或之后进行求值。

求值顺序影响

取决于评估顺序,s.find() 的结果可能会因 s.replace() 的副作用而改变。这是因为 s.replace() 修改了字符串的长度,影响了后续 s.find() 调用的结果。

实际评估差异

中根据提供的测试,clang 在 s.replace(0, 4, "") 之前评估 s.find("even"),而 gcc 可能以相反的顺序评估它们。这种顺序上的差异导致链式函数调用的结果不同。

C 17 更改

在 C 17 中,后缀表达式的求值顺序(如链式调用)得到了加强。函数参数中参数的初始化(包括副作用)现在相对于其他参数的顺序不确定。这确保了像相关代码这样的代码将具有明确指定的行为。

以上是第四版“C 编程语言”代码是否表现出明确定义的行为?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn