A 回答 (4件)
- 最新から表示
- 回答順に表示
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 );
}
}
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 );
}
}
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 );
}
}
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 );
}
}
この回答への補足
redfox63さん、php504さん早速のご回答ありがとうございます!
教えていただいた方法で実現できました!
知識不足のため理解できていない部分があるのですが、
ファイルポインタ変数に限らず、2つ以上のファイルが使用するグローバル変数をヘッダファイルで宣言するには、
1.externでヘッダファイルに宣言
2.変数を最初に使用するファイル内でグローバル変数として宣言
3.変数を使用するファイルすべてでヘッダファイルをインクルード
という認識で合っていますでしょうか?
もう1点、
sample1.c ではFILE *fpout と extern FILE *fpoutの2つが宣言されてい事になりますが、1つのファイル内でFILE *fpoutとextern FILE *fpoutを宣言しても特に問題ないという認識で合っていますでしょうか?
ご回答に質問を重ねてしまい申し訳ないのですが、この機会に理解を深めたいと思います。
よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語のファイル入力が分かりません 2 2022/05/22 06:35
- C言語・C++・C# C言語 配列とポインタについて 2 2022/06/02 11:53
- C言語・C++・C# プログラム内から、MIDIファイルの一部分だけを再生する方法 1 2023/02/15 11:08
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# C言語 ポインタ 配列 2 2022/06/02 17:29
- C言語・C++・C# 関数ポインタの高速化のメリット 7 2023/05/05 20:15
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- Perl Perl の外部モジュールの利用方法 3 2022/07/10 18:34
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- フリーソフト イーファンビューでwebpファイルが開けません 1 2022/07/12 07:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
セグメントエラー
-
戻り値で構造体を返すことは可...
-
init関数の意味
-
C言語の関数と配列に関する質問
-
C言語のポインタに直接アドレス...
-
Run-Time Check Failure #3とい...
-
fopne で失敗する原因
-
main(int argc,char **argv[])...
-
Cで作成したDLL関数をVBから呼...
-
ExcelVBAでのkernel32(64bit)
-
NULLとブランクの違い
-
アプリを32bitから64bit移行
-
VBはCを混乱させる?
-
関数ポインタの高速化のメリット
-
ハンドル、アドレス、ポインタ...
-
#define NULL ((void *)0) の弊害
-
C言語でのconstを返す関数
-
ReadFileの読み込みエラーについて
-
C++で関数ポインタから関数名を...
-
【C言語】戻り値が構造体の関数
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語のポインタに直接アドレス...
-
C言語の関数と配列に関する質問
-
戻り値で構造体を返すことは可...
-
fopne で失敗する原因
-
init関数の意味
-
Run-Time Check Failure #3とい...
-
LPSTR型の初期化について
-
セグメントエラー
-
アプリを32bitから64bit移行
-
コンストラクタでnewを失敗した...
-
ExcelVBAでのkernel32(64bit)
-
Cで作成したDLL関数をVBから呼...
-
ハンドルはポインタか
-
DLL<->VB間での受け渡し(文字...
-
C言語でのconstを返す関数
-
ポインタについて
-
参照型で受け取った引数をポイ...
-
TCHAR文字列内の検索について
-
デバイスハンドルとは?
-
基本アルゴリズムの『返す』の...
おすすめ情報