我无法找出以下部分的意图 printf
规格在 cppreference.com:
每次转换操作后都有一个序列点 符;这允许存储多个%n个结果 变量和 在%n之前打印%n存储的值 呼叫。
这读起来好像是一个(甚至几个)的结果 %n
转换说明符可以打印出来 printf
-声明。
但我无法弄清楚如何实现这一点,因为所有的争论都传递给了 printf
以前评估过 printf
输入正文(参数评估后有一个序列点)。因此,a的变量的值 %n
写之前会被评估 printf
有可能用“到目前为止写入的字符数”覆盖此变量的值:
#include <stdio.h>
int main( int argc, char* argv[] )
{
int n = 0;
printf("Hello, world!%n (%d first n); %n (%d second n)", &n ,n, &n, n);
// will print out "Hello, world! (0 first n); (0 second n)"
return 0;
}
我的问题:如果没有任何机会“在同一个呼叫中早先打印%n存储的值”,那么不是相应部分的 printf
规格毫无意义或误导?
实际意义是什么? c99标准 声明:
7.19.6格式化输入/输出功能 (1)格式化的输入/输出功能应该表现得好像在后面有一个序列点 与每个说明符关联的操作。
是否减少了获取未定义行为的“机会”?
问题用c ++和c标记,因为我认为这个主题对两种语言应用相同的方式。