我正在阅读这篇文章,他们使用以下示例来解释未定义的行为:
// PROGRAM 1
#include <stdio.h>
int f1() { printf ("Geeks"); return 1;}
int f2() { printf ("forGeeks"); return 1;}
int main()
{
int p = f1() + f2();
return 0;
}
然而,它似乎关于子表达式的评估顺序,并且根据C标准(附录J.1),这是一种未指定的行为而不是未定义的行为:
未指定的行为:除了函数调用()、&&、||、? :和逗号操作符(6.5)指定的情况外, 子表达式的评估顺序和副作用发生的顺序。
由于我很新于阅读官方规范,我想知道我是否误解了示例或文档。我知道这可能看起来非常迂腐,但我有兴趣以正确的方式学习这些高级主题。