• 締切済み

ファイルポインタのヘッダーファイルの配置について

分割コンパイルをしている別ファイルの別関数から、同じファイルポインタ(main関数でfopen済み)に出力(fprintf)は可能でしょうか? 可能な場合、 1.ファイルポインタをexternで宣言 2.ファイルポインタをヘッダファイル内で宣言 3.その他方法 どの方法で実現できるのでしょうか? サンプルコード等書いていただけたら助かります。 よろしくお願い致します。

みんなの回答

  • php504
  • ベストアンサー率42% (926/2160)
回答No.4

NO.2の回答に間違いがありました --- sample2.c --- #include "sample.h" void myout( void ) {   int i = 0;   for( i = 0; i;< 20; i++ ) {     //fprintf( fp, "i = %d\n", i );     fprintf( fpout, "i = %d\n", i );   } }

  • php504
  • ベストアンサー率42% (926/2160)
回答No.3

個人的には引数で渡す方が好きです --- sample1.c --- void myout( FILE* ); int main( void ) {   FILE *fpout;   if ( NULL != ( fpout = fopen( "ファイルパス", "w") ) {     myout( fpout );     fclose( fpout );   }   return 0; } --- sample2.c --- void myout( FILE *fp ) {   int i = 0;   for( i = 0; i;< 20; i++ ) {     fprintf( fp, "i = %d\n", i );   } }

  • php504
  • ベストアンサー率42% (926/2160)
回答No.2

グローバル変数なら引数にする必要はないですね --- sample.h --- #include <stdio.h> /* ファイルポインタの宣言 */ extern FILE* fpout; void myout( void ); --- sample1.c --- #include "sample.h" /* ファイルポインタの実体 */ FILE *fpout; int main( void ) {   if ( NULL != ( fpout = fopen( "ファイルパス", "w") ) {     myout( );     fclose( fpout );   } } --- sample2.c --- #include "sample.h" void myout( void ) {   int i = 0;   for( i = 0; i;< 20; i++ ) {     fprintf( fp, "i = %d\n", i );   } }

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

可能ですよ --- sample.h --- #include <stdio.h> /* ファイルポインタの宣言 */ extern FILE* fpout; void myout( FILE* fp ); --- sample1.c --- #include "sample.h" /* ファイルポインタの実体 */ FILE *fpout; int main( void ) {   if ( NULL != ( fpout = fopen( "ファイルパス", "w") ) {     myout( fpout );     fclose( fpout );   } } --- sample2.c --- #include "sample.h" void myout( FILE *fp ) {   int i = 0;   for( i = 0; i;< 20; i++ ) {     fprintf( fp, "i = %d\n", i );   } }

yamamegane
質問者

補足

redfox63さん、php504さん早速のご回答ありがとうございます! 教えていただいた方法で実現できました! 知識不足のため理解できていない部分があるのですが、 ファイルポインタ変数に限らず、2つ以上のファイルが使用するグローバル変数をヘッダファイルで宣言するには、 1.externでヘッダファイルに宣言 2.変数を最初に使用するファイル内でグローバル変数として宣言 3.変数を使用するファイルすべてでヘッダファイルをインクルード という認識で合っていますでしょうか? もう1点、 sample1.c ではFILE *fpout と extern FILE *fpoutの2つが宣言されてい事になりますが、1つのファイル内でFILE *fpoutとextern FILE *fpoutを宣言しても特に問題ないという認識で合っていますでしょうか? ご回答に質問を重ねてしまい申し訳ないのですが、この機会に理解を深めたいと思います。 よろしくお願いいたします。

関連するQ&A