• 締切済み

printf()関数の括弧を二重にして、printf((~~~))とし

printf()関数の括弧を二重にして、printf((~~~))として コンパイル/実行すると、実行時セグメンテーション違反が発生します。 コンパイル時には警告も発生しますが、このセグメンテーション違反が なぜ起こるのか理由がよくわかりません。ご回答いただけるとありがたいです。 以下、サンプルコードと実行例です。よろしくお願いいたします。 ---mytest.c---- 1 #include <stdio.h> 2 3 int main(void){ 4 5 //printf("test:%d", 1)ではもちろんコンパイル/実行に成功する。 6 printf(("test:%d", 1)); 7 return 0; 8 } 【コンパイル/実行結果/gccバージョン】 #gcc main.c main.c:6:警告:passing argument 1 of printf makes pointer from integer without a cast #./a.out セグメンテーション違反です # gcc --version gcc (GCC) 4.1.2 20070925 (Red Hat 4.1.2-27) ・ ・

みんなの回答

  • poppyday
  • ベストアンサー率56% (164/290)
回答No.1

printfの第1引数が("test:%d", 1)であると判断されます。 この「("test:%d", 1)」はカンマ演算子の式と解釈され、式の値は1になります。 第1引数は、文字列定数へのポインタを期待しているところに1が与えられますから、アドレス1をアクセスする結果となりセグメンテーション違反となります。

すると、全ての回答が全文表示されます。

関連するQ&A