アカウント名:
パスワード:
>> 初心者に変数がグローバル変数だけと思わせるような筋、stdio.hをインクルードする理由を解説しない点についてはタレこみ人はどうかと思うが
これね、教えたことがない人のセリフ。教えると、こうするしか無いのよ(main()の外にint宣言おいてあるのはいただけないが)。
関数の概念の前にmain()関数があって、メモリの概念の前に"やscanfの&があったり、プリプロセッサの前に#includeがあったり、とどめ、printf()なんて可変長引数をとる、どう考えても最初に教えちゃいけない関数だったり。
ある程度目をつぶって教えるしかない場所なんですよ。で、ポインタやってから戻って「実はscanfの&は・・・」というように教えるしかない。main()の引数char** argvなんて・・・じゃん。
あー違う。関数の返り値とか引数の話してない。単に変数の話。
第二話最後のやる夫の回答で言えば
#include <stdio.h>int a; //<-この一行 int main() { a = 4 * 5; printf("%d\n",a); return 0; }
を問題にしてる。global変数とlocal変数のごっちゃ怖いのはこのあと、menseki関数とか定義して
#include <stdio.h>int a;
int menseki(int a, int b){ int p; p = a * b; return p;} int main() { a = menseki(4, 5); printf("%d\n",a); return 0; }
ってソース書いたとき、どんな答えが返ってくるか予想がつかないこと (コンパイラがmenseki関数のlocal変数「a」とglobal変数「a」を区別するか同一視するか?)(若干違うけど、global/localで同じ変数名(hogeとか)入り乱れたソース(数万行)で、 「-O2」と「-O1」で答え違う、というデバッグした経験ア
なぁんだ。グローバル変数のことは別に言及してあるし、"変数宣言"でなく"int宣言"と殊更に型を限定するような書き方だったので、別の点があって指摘してるのかと深読みしてました。
int a;int menseki(int a, int b){ int p; p = a * b; return p;} int main() { a = menseki(4, 5); printf("%d\n",a); return 0; }ってソース書いたとき、どんな答えが返ってくるか予想がつかないこと
int a;
ってソース書いたとき、どんな答えが返ってくるか予想がつかないこと
については、"予想"はできますよね。ただコンパイラがバグって予想外の結果になったと。仕様上、仮引数のスコープはそのブロック内に限定されるはず。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
日本発のオープンソースソフトウェアは42件 -- ある官僚
とは言うけどね (スコア:4, 興味深い)
>> 初心者に変数がグローバル変数だけと思わせるような筋、stdio.hをインクルードする理由を解説しない点についてはタレこみ人はどうかと思うが
これね、教えたことがない人のセリフ。教えると、こうするしか無いのよ(main()の外にint宣言おいてあるのはいただけないが)。
関数の概念の前にmain()関数があって、メモリの概念の前に"やscanfの&があったり、プリプロセッサの前に#includeがあったり、とどめ、printf()なんて可変長引数をとる、どう考えても最初に教えちゃいけない関数だったり。
ある程度目をつぶって教えるしかない場所なんですよ。で、ポインタやってから戻って「実はscanfの&は・・・」というように教えるしかない。main()の引数char** argvなんて・・・じゃん。
-- gonta --
"May Macintosh be with you"
Re: (スコア:0)
ここの意味が判りません。 void main()派?
main関数はintを返しますよね?(少なくともC初心者への教育環境としては)
「詳細は後で説明するから、まずはmain関数は
int main(int argc, char **argv)
で始めると覚えとけ。」でいいのでは。
引数を与えることができなかったり,戻値が不定なプログラムは、後々不便なことになるので、
最初は使わないにしても、呼出形式は初めから引数を受け取り,intを返す形で書き始めることを推奨したい。
void main(void)は、組込等の特殊環境の宣言を許容するための併論規格だと思い
Re: (スコア:0)
あー違う。関数の返り値とか引数の話してない。単に変数の話。
第二話最後のやる夫の回答で言えば
#include <stdio.h>
int a; //<-この一行
int main()
{
a = 4 * 5;
printf("%d\n",a);
return 0;
}
を問題にしてる。global変数とlocal変数のごっちゃ怖いのはこのあと、menseki関数とか定義して
#include <stdio.h>
int a;
int menseki(int a, int b)
{
int p;
p = a * b;
return p;
}
int main()
{
a = menseki(4, 5);
printf("%d\n",a);
return 0;
}
ってソース書いたとき、どんな答えが返ってくるか予想がつかないこと
(コンパイラがmenseki関数のlocal変数「a」とglobal変数「a」を区別するか同一視するか?)
(若干違うけど、global/localで同じ変数名(hogeとか)入り乱れたソース(数万行)で、
「-O2」と「-O1」で答え違う、というデバッグした経験ア
Re:とは言うけどね (スコア:0)
なぁんだ。グローバル変数のことは別に言及してあるし、"変数宣言"でなく"int宣言"と
殊更に型を限定するような書き方だったので、別の点があって指摘してるのかと深読みしてました。
については、"予想"はできますよね。ただコンパイラがバグって予想外の結果になったと。
仕様上、仮引数のスコープはそのブロック内に限定されるはず。