以下代码是否定义良好?
#include <stdio.h>
int ScanFirstOrSecond(const char *s, int *dest) {
return sscanf(s, "%d%d", dest, dest);
}
int main(void) {
int x = 4;
ScanFirstOrSecond("5", &x);
printf("%d\n", x); // prints 5
// Here is the tricky bit
ScanFirstOrSecond("6 7", &x);
printf("%d\n", x); // prints 7
return 0;
}
Run Code Online (Sandbox Code Playgroud)
换句话说,这些...论点是否暗示restrict了它们?
我发现最适用的C规范是
fscanf函数依次执行格式的每个指令.......C11dr§7.21.6.24
C99标准:
在上一个和下一个序列点之间,一个对象的存储值最多应通过表达式的评估修改一次
C11标准:
如果一个标量对象的副作用相对于同一个标量对象的另一个副作用是无序的,则行为是未定义的。
那么 C99 标准的这个定义是否不完整,因此它在 C11 中进行了更新,因为它只包含术语object而不包含术语scalar object?