これに対する答えを探しましたが、何も見つかりませんでした。私が見つけた最も近い ものは、明らかに違いがあるときに0を返すdifftimeでした。これは、引数がスタックにプッシュされる方法とフォーマットが期待するものに関係する素晴らしい説明がありますが、私の問題は異なると思います。
例をできるだけ単純にしました。Cに次のコードがあるとします。
time_t starttime = time(NULL)
somefunction();
time_t newtime = time(NULL)
fprintf(stderr, "starttime %f and difftime %f\n", starttime, difftime(newtime, starttime));
fprintf(stderr, "difftime %f and starttime %f\n", difftime(newtime, starttime), starttime);
return 0;
また、somefunctionは、1秒または2秒間実行される関数です。これで得られる出力は次のとおりです。
starttime 2.000000 and difftime 0.000000
difftime 2.000000 and starttime 0.000000
どこから質問を始めればいいのかさえわかりません。順序を入れ替えても、出力値が同じなのはなぜですか?さらに、値の1つが0であるのはなぜですか?これは、%f、%d、%lu、%lluなどを使用しても同じです。これに対するスタック引数の説明はありますか?fprintfは実際に内部で何をしていますか?
ありがとうございました。私はこれをデバッグしようとして私の人生の多くを無駄にしてきました、そして私は本当にあなたの助けに感謝します!