ゆいのあ
- いいね数 201,683/152,357
- フォロー 1,173 フォロワー 1,253 ツイート 109,387
- 現在地 大岡山
- Web http://yuinore.net
- 自己紹介 1日に1回、授業に出席します。(木曜日と休日を除く) #EveOneKokuban ヘッダーは増田さん(@hatune126)から。アイコンはLevia(@Iosif_S)さんに描いて頂きました。
«< 前のページ1次のページ >»
並び順 : 新→古 | 古→新
2015年04月23日(木)

printf関数は引数の順番を厳密に知る手段が無いが,書式文字列の通りに引数が渡されていると仮定し,浮動小数点型の1番目の引数を"%lf"で,整数型の2番目の引数を"%d"で整形する(整数型の1番目は書式文字列のアドレスで利用済み).
タグ:
posted at 00:33:10

つまり,x64環境における関数呼び出しでは,整数型と浮動小数点型に分けて引数の順序を管理しており,互いの順序関係は関知しない.したがって,最初のコードの2つの関数呼び出しは同じ機械語に翻訳されるのは,仕様通り(正しい).
タグ:
posted at 00:32:54

理由: 2件の関数呼び出しは同じ機械語になる
movl $.LC1, %eax
movl -4(%rbp), %edx
movsd -16(%rbp), %xmm0
movl %edx, %esi
movq %rax, %rdi
movl $1, %eax
call printf
タグ:
posted at 00:32:14

// printfのヤバ過ぎる動作
main()
{
double d = 0.;
int i = 1;
printf("%lf %d\n", d, i);
printf("%lf %d\n", i, d);
}
出力
0.000000 1
0.000000 1
タグ:
posted at 00:31:53
«< 前のページ1次のページ >»
スポンサーリンク