• 締切済み

printf(

printf(" %s ", "test"); これはC++で文法に問題はないですが、 printf(" ", "test"); これはC++で文法に問題がないですか?

みんなの回答

  • a-saitoh
  • ベストアンサー率30% (524/1722)
回答No.4

printfは関数ですから、文法的には引数に何を書いてもOKです。 どういう引数が正当かは、C/C++の文法とは無関係です。 文法では、「(」の後に、カンマで区切って式が何個か書かれていて、「)」で終わっていることということが決まっているだけです。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.3

まず、文法上はまったく問題ありません。 (以下は余計なお世話かもしれませんが) 次に、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)
回答No.2

問題ないです。 使われない引数は単に無視されるだけです。

  • batai
  • ベストアンサー率40% (18/44)
回答No.1

やってみたら無理でした。 printf(" %s ", "test");は 「%sのところにtestを出力する」 って意味ですから、その出力の目印となる%sがないと出力はされませんね。 (スペースだけが出力されました。コンパイルエラーは出ませんでした。)

iachrfe
質問者

お礼

ありがとうございます。 printf(" ", "test"); が printf("test"); となることを期待しているのではなく、 char prstr[] = " %s "; printf(prstr, "test"); でprstrに%が無いような場合があってもよいのか知りたいです。 C++の文法に詳しい方教えて下さい。

関連するQ&A