- 締切済み
printf(
printf(" %s ", "test"); これはC++で文法に問題はないですが、 printf(" ", "test"); これはC++で文法に問題がないですか?
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- a-saitoh
- ベストアンサー率30% (524/1722)
printfは関数ですから、文法的には引数に何を書いてもOKです。 どういう引数が正当かは、C/C++の文法とは無関係です。 文法では、「(」の後に、カンマで区切って式が何個か書かれていて、「)」で終わっていることということが決まっているだけです。
- jacta
- ベストアンサー率26% (845/3158)
まず、文法上はまったく問題ありません。 (以下は余計なお世話かもしれませんが) 次に、printfまたはfprintfの使い方についてですが、これはC++というよりCの規格を見る必要があります。 手元には(本来参照すべきである)ISO 9899:1990 AMD1 + TCOR1 + TCOR2がないので、JIS X3010:2003を参照しましたが、同じはずです。 JIS X3010:2003 7.19.6.1 fprintf関数より引用 実引数が残っているにもかかわらず書式が尽きてしまう場合, 余分の実引数は, 評価するだけで無視する。 したがって、問題ありません。 最後に、作法として正しいかどうかですが、通常の使い方としてはやはり好ましくないと思います。可変故実引数を固定して、書式化文字列だけを入れ替えるような場合には、このような方法を採らざるを得ないため、やむをないとは思いますが...
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
問題ないです。 使われない引数は単に無視されるだけです。
- batai
- ベストアンサー率40% (18/44)
やってみたら無理でした。 printf(" %s ", "test");は 「%sのところにtestを出力する」 って意味ですから、その出力の目印となる%sがないと出力はされませんね。 (スペースだけが出力されました。コンパイルエラーは出ませんでした。)
お礼
ありがとうございます。 printf(" ", "test"); が printf("test"); となることを期待しているのではなく、 char prstr[] = " %s "; printf(prstr, "test"); でprstrに%が無いような場合があってもよいのか知りたいです。 C++の文法に詳しい方教えて下さい。