電子書籍の厳選無料作品が豊富!

たとえば、a,bという値を関数に入れて、関数の中で変わったa,bを受け取るような方法はないでしょうか。

http://oshiete1.goo.ne.jp/kotaeru.php3?q=138798

int main(void)
{
int a=1, b=2;
func(&a, &b);
printf("%d, %d\n", a, b);
return 0;
}

void func(int *x, int *y)
{
*x++;
*y++;
}
を実行してみましたが、
「関数 'func' は定義されていません。int 型の値を返す外部関数と見なします。」
と出てきました。
助言をよろしくお願いします。

A 回答 (5件)

こんにちは。


「関数 'func' は定義されていません。int 型の値を返す外部関数と見なします。」
のメッセージは関数func()の型がわからないためコンパイラが勝手に関数func()はint型の関数として処理してしまったためです。
対処方法は以下の2通りあります。

1.明示的にプロトタイプ宣言をする。
void func(int *x, int *y); ← 追加する
int main(void)
{
int a=1, b=2;
func(&a, &b);
printf("%d, %d\n", a, b);
return 0;
}

void func(int *x, int *y)
{
*x++;
*y++;
}

2.関数の記述順序を入れ替える。
void func(int *x, int *y)
{
*x++;
*y++;
}

int main(void)
{
int a=1, b=2;
func(&a, &b);
printf("%d, %d\n", a, b);
return 0;
}

のどちらかでOKだと思いますよ。
    • good
    • 0

func()関数の中身については皆さんが



答えているようなことでいいと思います。

そこで、僕は関数の宣言についてちょっと疑問に思いました。

int main(void){ の行の上に

void func(int* , int*);

と記述されているでしょうか?

自分で作る関数は変数と同じで宣言が必要になってきます。

例えば、printfなどの関数はCに標準についている関数なので

宣言は不要なのですが、自作関数(自分で作る関数)は宣言が必要なんです。

その辺のことがまったくかかれてないので

僕が書いてることは間違ってないのですが、

エラーの原因が関数の宣言にあるとは断定できないので”自信なし”です。

その辺のところ教えてください。
    • good
    • 0

kawa-k> これだと、値は変更されませんね。



ふっ、その通りですねえ。質問者の希望を満たすには、

(*x)++;
(*y)++;

などと、としなければなりませんね。

# こんなことに気がつかなかった、という意味で自信無し、にチェックしました (^^;
    • good
    • 0

関数をコールできるようになっても、



void func(int *x, int *y)
{
*x++;
*y++;
}

これだと、値は変更されませんね。
    • good
    • 0

関数 func() を使う前にプロトタイプ宣言、もしくは、関数の定義が必要です。



元のソースを尊重するならば、int main(void) の前に、

void func(int*, int*);

と一行入れてみてください。コンパイル時の警告は無くなります。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!