私は少しのPHPをやったことがあります。変数を宣言するときには、型を宣言する必要はありません(たとえば、文字列またはint)。なぜC++のprintf関数で型指定子を指定する必要がありますか?
しかし、私は非常に単純なCファイルを調整しなければなりません。プリント機能を正しく動作させるためには、各変数の出力にタイプ指定子を含める必要があります。
なぜこの型は変数自体から自動的に推論されませんか?
私は少しのPHPをやったことがあります。変数を宣言するときには、型を宣言する必要はありません(たとえば、文字列またはint)。なぜC++のprintf関数で型指定子を指定する必要がありますか?
しかし、私は非常に単純なCファイルを調整しなければなりません。プリント機能を正しく動作させるためには、各変数の出力にタイプ指定子を含める必要があります。
なぜこの型は変数自体から自動的に推論されませんか?
printf
タイプ検出が書式文字列で指定子とのために使用されているデータ項目間の切断があるので、ホット:-)
なかったC++、Cの互換部分の一部であるためたとえば、次のように指定します。
printf ("String at memory %p is '%s'\n", mystr, mystr);
printf ("That character is '%c', ASCII code %d, hex %02x\n", mych, mych, mych);
出力にC++ストリームを使用する場合、これはあまり問題になりません。
最も一般的な指定子は、次のとおり整数
%Cは、Sがストリング
%fのある
%フロート/
ダブル
% D /%たとえば
:
int i = 1;
char hi[6] = "Hello"
printf("%d %s", i, hi);
は印刷し
上記のよう1 Hello
、あなたがhttp://www.cplusplus.com/reference/clibrary/cstdio/printf/
Cを参照することができ、私はそれがベアメタルを超えるかなり最小限の抽象化を提供しています意味それによって、非常に簡単な言語です。基本タイプはで、タイプの情報は付属しています。struct
でもタイプ情報を取得します
ので、コンパイラは
int x, y;
float z;
int x = foo(y,z);
x
、y
、及びz
として2S、補体x
ための整数と `yと解釈される可能性の高い1つのマシン語であり、見ている典型的な実装でzのIEEE-754浮動小数点値、およびその他はです。
は
push
y
とz
スタックに戻り値のスペースを確保するために、スタックポインタのようなもの(それが何をオーダーこれでは実装依存である)コンパイラがありませんpush
返信先アドレスとしてstack pointer+two instructions
をbranch
のエントリポイントfoo
に設定します。が続い
y
とz
を読み込むのfoo(まともなチップが...これを簡単、まだamkeためにいくつかのサポートを提供します)x
に戻ります(スタックポインタからのオフセットによって再び見つかります)branch
呼び出し元ルーチンpush
が返す戻りアドレスに戻ります。foo
は、渡された引数は、スタック上の各引数は、(実際にはCはすべてのvariadac引数のサイズを強制的に変換されてどのように大きな知ることができません(printf
のようなvariadacルーチンのように)持っているどのような種類指示されていない場合この問題を解決するための一連のアップコンバートルールを含む)、それをどのように解釈するかについては触れません。一方、PHPは、裸のマシン上で洗練された抽象化を提供します。実際には、それが動作するためには、動作している各値でいくつかの識別情報を持ち運ぶことができます。
おかげさまで、好奇心の念のために、どうしてこのような詳細な質問を書こうと努力しましたか。 – user784637
もう少し詳しく説明してください。私はあなたが求めているものを作ることができません。 –
http://www.cplusplus.com/reference/clibrary/cstdio/printf/ – NullUserException
質問のタイトルで質問したり、質問自体で質問を繰り返したりしないでください。 –