printf( "%3ot%2xt%3dt%cn", c = getchar(), c, c, c );
我得到一个警告,说"未测序的修改和访问'c' [- unsequenced]"。这个错误很容易修复;我所要做的就是把getchar()
从printf()
中分离出来,但是我只是想更好地理解为什么这个指令会产生警告,以及如果我实际运行它会出现什么问题。
这是否与printf()
使用CPP宏的可变长度参数列表的实现有关?
传递给函数调用的参数的求值顺序为unspecified。在c
的最后三个参数被读取之前,不能保证getchar()
的结果会被赋值给c
。
在函数调用之外调用c = getchar()
可以修复这个问题。