#include <stdio.h>
void sum_diff(int x,int y,int *wa,int *sa)
{
*wa=x+y;
*sa=x-y;
}
int main(void)
{
int n1=100,n2=200;
int sum,diff;
sum_diff(n1,n2,&sum,&diff);
printf("和 %d",sum);
printf("差 %d",diff);
return(0);
}
メイン関数を上に置きたいのですが、
下のように変更したらエラーが出ます。
”再定義されています。異なる基本型です。”
#include <stdio.h>
int main(void)
{
int n1=100,n2=200;
int sum,diff;
sum_diff(n1,n2,&sum,&diff);
printf("和 %d",sum);
printf("差 %d",diff);
return(0);
}
void sum_diff(int x,int y,int *wa,int *sa)
{
*wa=x+y;
*sa=x-y;
}
なぜなんでしょうか??
わかる方教えてください。
ポインタについて質問です。
Re:ポインタについて質問です。
両方起動してみて思ったことが…
上はちゃんと動きました。
下はうごかない。
>void sum_diff(int x,int y,int *wa,int *sa)
こいつが…
理由としては、宣言されてないから
上がうごく理由は知りませんが…メインより先に書いてあるからですかね。
あ、これは考えた結果であって間違ってる可能性があります。
あってますかね…
>わかる方教えてください。
わかる方じゃなくてすいません。
上はちゃんと動きました。
下はうごかない。
>void sum_diff(int x,int y,int *wa,int *sa)
こいつが…
理由としては、宣言されてないから
上がうごく理由は知りませんが…メインより先に書いてあるからですかね。
あ、これは考えた結果であって間違ってる可能性があります。
あってますかね…
>わかる方教えてください。
わかる方じゃなくてすいません。
Re:ポインタについて質問です。
main()の上に以下の一行を付け加えてください。
void sum_diff(int x,int y,int *wa,int *sa);
sum_diff()が使われる前にその関数がどんな型であるかを宣言しておく必要があります。
void sum_diff(int x,int y,int *wa,int *sa);
sum_diff()が使われる前にその関数がどんな型であるかを宣言しておく必要があります。
Re:ポインタについて質問です。
> #include <stdio.h>
/*プログラムというのは上から下に流れるのでこの間に sum_diff という関数を使いますよという宣言*/
void sum_diff(int,int,int,int);
/*を入れておく必要があります*/
> int main(void)
> {
>
> int n1=100,n2=200;
> int sum,diff;
>
> sum_diff(n1,n2,&sum,&diff);
>
> printf("和 %d",sum);
> printf("差 %d",diff);
>
> return(0);
> }
>
> void sum_diff(int x,int y,int *wa,int *sa)
> {
> *wa=x+y;
> *sa=x-y;
> }
/*プログラムというのは上から下に流れるのでこの間に sum_diff という関数を使いますよという宣言*/
void sum_diff(int,int,int,int);
/*を入れておく必要があります*/
> int main(void)
> {
>
> int n1=100,n2=200;
> int sum,diff;
>
> sum_diff(n1,n2,&sum,&diff);
>
> printf("和 %d",sum);
> printf("差 %d",diff);
>
> return(0);
> }
>
> void sum_diff(int x,int y,int *wa,int *sa)
> {
> *wa=x+y;
> *sa=x-y;
> }
Re:ポインタについて質問です。
先越されたみたいなので、追記です。
C言語のコンパイラは1パス方式なので、名前(識別子)を使うためには先に宣言する必要があります。
上側の例は、宣言と同時に実体の定義もしてますが、
下側の例は、宣言と実体の定義をわけています。
下の場合のエラーは、
C言語で宣言がされてないのに関数が使われた場合、戻り値がint型の関数を内部で宣言します。
この場合は "int sum_diff(n1,n2,&sum,&diff);"という関数ですね。
それなのに 後から戻り値がことなる関数を再度定義と同時に宣言してるので上記のようなエラーが出ます。
C言語のコンパイラは1パス方式なので、名前(識別子)を使うためには先に宣言する必要があります。
上側の例は、宣言と同時に実体の定義もしてますが、
下側の例は、宣言と実体の定義をわけています。
下の場合のエラーは、
C言語で宣言がされてないのに関数が使われた場合、戻り値がint型の関数を内部で宣言します。
この場合は "int sum_diff(n1,n2,&sum,&diff);"という関数ですね。
それなのに 後から戻り値がことなる関数を再度定義と同時に宣言してるので上記のようなエラーが出ます。