我不能cppreference.com找出printf
說明書的以下部分的意圖:printf%n在同一個調用中的值 - 無意義?
有每個轉換 指定符的動作後的序列點;這允許存儲在同一 變量多個%n個結果和打印相同 呼叫內的%N較早存儲的值。
此全文如果一個(或甚至幾個)%n
轉換指定(一個或多個)的結果可能在相同的printf
語句來打印出來。 但我不能瞭解其所能實現的,因爲進入printf
的身體前通過的printf
調用所有參數進行評估(有說法評估後的序列點)。因此,到一個%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;
}
我的問題:如果有ISN」是否有機會「在相同的調用中早先打印由%n存儲的值」,那麼不是printf
規範的相應部分是無意義的還是令人誤解的?
什麼是c99 standard語句的實際意義:
7.19.6格式化輸入/輸出功能 (1)格式的輸入/輸出功能應表現爲,如果有一個序列點 後與每個說明者相關的動作。
難道是爲了減少未定義行爲的「機會」嗎?
問題是標有C++和C,因爲我認爲這個主題適用於以同樣的方式兩種語言。
C11 ref是'7.21.6 1'。 – chux
cppreference現在不那麼沒有意義 – Cubbi