scanf;
は正しい式だから、ANSI準拠に従う以上、エラーにしちゃいけない。
警告を出すかどうかは処理系実装者の任意だけど。
何を意味するかというと、scanf関数の関数ポインタを取得して、それを何もしない。
呼び出すわけでもなく。
ただ単に式の値は捨てられる。
って感じ?
配列のポインタ配列の識別子にアドレス演算子がいらないように関数にも要らない!
互換性のある型!!
int ia[10];
int (*iap)[10] = ia;//&iaでもよい無くてもよい
コンパーチブル!!
駄目だった。スレ立てすぎらしい。
代わりに立てて
>>957
>>953 > int ia[10];
> int (*iap)[10] = ia;//&iaでもよい無くてもよい
アドレスは同じでも型は同じか?
printf("%p", scanf);
>>943,
>>950,
>>952 だから...
> 1. 式って言うなら、int (*a)(); a; との違いはなんだ ?
に誰か、答えられるの ? (特に、
>>910-912 みたいに偉そうに書いてた奴、
どうよ。単なる煽り屋さんか ?)
>>950 >> int (*a)(); a;
> これやるとBCC32では警告が出るんですが…
なんてでてます ? また、int a; a; でもでるのかな ?
(処理系の名前忘れたけど、"無効な式です" とか言う警告が出る奴はある。)
次スレ1もvoidで頼む。
960 :
デフォルトの名無しさん:02/05/26 17:11
今話題になっているSHARPポケコンPC-G850内蔵のC言語ってどうなんでしょう。
900が何を騒いでいるのかわからんのだけど。
int scanf(const char *, ...);
というプロトタイプがあるとき、
scanf; はエラーじゃない。
int (*)(const char *,...)型の式の後ろに;をつけた文になる。
scanf(); はエラーだ。
int scanf(const char *,...)を、矛盾する引数で呼び出したから。
^^^^^^^^^^^^^^
int (*a)(int);
a; // エラーじゃない
a(); // エラー
a(1); // エラーじゃない
>>957 煽りやさんはあんただろ。
> 1. 式って言うなら、int (*a)(); a; との違いはなんだ ?
a()と int(*a)();a;の違い?
前者は引数なし関数aの呼び出し
後者は引数なし関数ポインタaの宣言と式aのみから成り立った文。
ちゃんとひよこ本のリンクはれや、ゴルァ!
あー、ひょっとして900は、他の一部の言語(Modula-2とかRubyとか)
みたいに、
scanf;
も
scanf();
も同じように引数0個の関数呼び出しになると思ってたのかな?
Cだと、()を付けない限り関数呼び出しは起きないんだよ。
誰かスレ立てろ
俺は立てすぎらしい
GNU + Cygnus + Windows = Cygwin (・∀・)イイ!
>>963 げっ、こいつほんとにわかってなかったのかよ。
>>942 の「
>>922 は
質問の意図はわかってるだろうから」て言うのは、取り消しだ。
誰が、「a()と int(*a)();a;の違い?」を問題にしてんだよ。
scanf; と (int (*a)(); としたあとの) a; の違いを示せって言ってんの
わからんか、それとも 1000 も近いから単なる時間稼ぎか ?
俺が立ててみます。ちょいお待ちを。
>>968 あんた偉そうだな、いちいち過去ログ見るのも億劫だから適当に書いただけだ。
それならほとんど違いはないよ、違いは関数のアドレスか、関数ポインタの値か、それだけ。
> うぉ、本当だ。VC++ 6 でやると、警告は出るがコンパイルは通る。
> (でも、何も生成されない。) 何で、エラーにしないんだ ?
> scanf(); ならエラーにするくせに...。
この発言を馬鹿にされて逆ギレしてただけじゃなかったの?
900は「scanf();はエラーになるのにscanf;やa();がなぜ
エラーでないのかワカリマシェン。誰か教えて〜(泣」
って言ってるんじゃないの?
答は出てるんだが。
かぶせられた
>>968 >scanf; と (int (*a)(); としたあとの) a; の違いを示せって言ってんの
へ?何が違うの?
警告 W8019 a.c 5: コードは効果を持たない(関数 main )
と出る。
>>968 scanf; は文だって…
例えば
int (*a)(const char *, ...);
a = scanf;
として
a(どうのこうの);
とすればscanfとして動く。
a = printf;
と、途中で変えることもできる。
ようは
int a[256];
と
int *a;
との違いみたいなもん。
問題がすりかわってる悪寒・・・
#include <stdio.h>
int main(){
int (*a)();
int hage;
a = scanf;
a("%d",&hage);
a = printf;
a("%d\n",hage);
scanf = printf; /*エラーだよ*/
return 0;
}
こんなもんで。
あとは邪推してくれ。
前スレ900は何を教えて欲しいのかもう一度説明するべきだと思うな。
俺は「scanf;が関数呼び出しだと思っていた」に一票だが。
>>980 単なる()の付け忘れだろ。何をそんなに熱くなってるんだか・・・。
しかし、scanf;でコンパイル通るのか。
関数ポインタがごろんと転がっているだけの感じだがな。
0x44548883;
とかいう感じで。
前スレ900?
熱いのは900れす
>>979 int (*a)(cont char *,...);じゃなくていいの?
>>977 ・・・正解!
まあ scanf; a; ってのはたいした違いは無いよね。
1; と 2; の違いを言えってなもんだし。
むしろ
printf("hoge\n");
a = 3;
とかとも違いが無い(printfもintを返すし、代入式も値がある)。
つまり値が返されても値を受け取らなかったらそれは無視されるってこと。
俺は疲れた。
アセンブリ勉強してくれ。
pascalはやらないでくれ。
あれは900宛てじゃ
,, ,=、 ,, , =、
ff | }!、,、〃 / ″このスレ怖いー!!
,リ/ .ノ*´jコ`)'〃
{{ { ′ v' 《
ヾ.\. \ヾ
_,,二、》 ; \. 三,_
(( ゙ー=、`″〃 \. \-‐' ,))
゙ー=″ ゙' 一'
>>984 int (*a)();
という宣言なら、どんな実引数で呼び出しても文法上はOK。
ただしこの宣言だと、可変長引数のプロトタイプ宣言をされた
関数は呼び出せない。(呼び出すと未定義の動作になる。)
とある質問だけで、100レスもつくとは。。。。
(((( ;゚Д゚))))ガクガクブルブル
>>990 おいおい、NULLの話なんかいくつレスが付いたと思ってるんだ?
>>973 > 900は「scanf();はエラーになるのにscanf;やa();がなぜ
> エラーでないのかワカリマシェン。誰か教えて〜(泣」
> って言ってるんじゃないの?
バカ。
>>920 見ろ。俺が言いたいのは、scanf; が警告出るのに、a; が警告
でないのは、何でだ。ってことだ。(要は、VC は (この点に関しては) バカ
だと言ってるだけだよ。)
いいかげん、scanf(); と scanf; の違いを偉そうに語るのはやめてくれ。
>>976 なるほど、BCC はちゃんと警告出るわけだ。int a; a; でもてるんだろう
なァ...。
>>902,
>>904 関数プロトタイプ知らんの ? だったら、何で scanf(); はエラーに
するのか説明しろよ。
900さん熱いね。
よーし、パパどうでもいい話なのでこのままコソーリ1000狙ちゃうぞー
\∧_ヘ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
,,、,、,,, / \〇ノゝ∩ < 1000取り合戦、いくぞゴルァ!! ,,、,、,,,
/三√ ゚Д゚) / \____________ ,,、,、,,,
/三/| ゚U゚|\ ,,、,、,,, ,,、,、,,,
,,、,、,,, U (:::::::::::) ,,、,、,,, \オーーーーーーーッ!!/
//三/|三|\ ∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧
∪ ∪ ( ) ( ) ( ) )
,,、,、,,, ,,、,、,,, ∧_∧∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧
,,、,、,,, ( ) ( ) ( ) ( )
ああ、そういうこと。VC++の警告メッセージが違ってると。ふーん。
あれ、ひょっとしてVC6って、
scanf;
でscanf();と同じコードが出るの?
だったらコンパイラのバグだね。
いまだ!
1000
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。