今回のトピックは試験問題が遡上にあがっています。
試験というからには前提となる「ルール」があるはずで
日本国の教員資格の試験であれば、それは JIS 規格であるべきでしょう。
gcc とか (以下略) の個別の実装の話を出すのは
(カルマを減らす or ちゃちゃいれ or 他人をおちょくる or so on が目的でなければ)
そろそろ潮時かな~と愚考する次第です。
# もっともこの話題の発端は Oliver 氏の伝えるところの
# 教授氏のmath-out [tuxedo.org]な話から始まっているので
# 結局はこの教授氏を説き伏せるのにどちら (規格 or 実装) が
# 有効かという話に帰結したりするのかも。
みんなで void main (スコア:0)
教科書にそう書いてあるから。
もう、どうにでもなれって、感じですね。
情報処理学会のどこかの部会かなんかが出した、
情報教育の教科書でも、void main ってなってますよ。
動きゃいいんじゃないの?
もう、知らんって感じ。
Re:みんなで void main (スコア:2, 興味深い)
メソッドは副作用があり、戻り値がない。エラーはExceptionなどの別の方法で通知。
ファクション(関数)は副作用がなく、戻り値がある。戻り値の算出に引数以外に依存すべきではない。
というのが「正しい」姿だからだそうだ。で、mainはメソッドなので、voidでなければいけないそうだ (うちのオブジェクト指向論教授談)。
exit(1)の1ってmain()の戻り値やん、と反論したら、いやー
returnじゃないから
Re:みんなで void main (スコア:1)
UNIX 系の C の場合,そもそも main() って,なんとかcrtかんとか.o というスタートアップルーチン(?)からコールしている関数に過ぎないのだけれど.というわけで,引数と戻り値については,単になんとかcrtかんとか.o との摺合わせ,という話になるのではないか,と思います.
あ
規格で決まってるの (スコア:0)
規格は規格,実装は実装 (スコア:1)
サブジェクトの通り :-)
ま,この試験の場合は規格の方に従うべきで,特定の実装に依存するのは好ましくないとは思いますが. ま,UNIX 系 OS ではそういう仕組みになってることが多いので,void main(void) でも矛盾しない実行ファイルが生成できる,というだけの話.
実装なら、現実の実装 (スコア:0)
あくまでも。
そもそも、最初のC言語にvoidはないし。
Re:実装なら、現実の実装 (スコア:1)
----------
#include <unistd.h>
void Main ( void );
void _start (int argc, char *argv[])
{
write ( 1, "_start\n", 7 );
Main();
_exit ( 0 );
}
void Main ( void )
{
write ( 1, "hello,world\n", 12 );
}
----------
(1)Linux において,このプログラムを
$ gcc -Wall hello.c -S -o hello1.s
$ gcc hello1.s -c
$ ld hello1.o -Bstatic -lc -o hello
と,コンパイ
そんなこと聞いてないんだけど (スコア:0)
char main[] = { 機械語... };
だって、多くのマシン/OSで動くでしょ。
DOSでも動くし。
まさにこのコード(Re:そんなこと聞いてないんだけど (スコア:2)
...というだけではナンなので。 :-)
今回のトピックは試験問題が遡上にあがっています。 試験というからには前提となる「ルール」があるはずで 日本国の教員資格の試験であれば、それは JIS 規格であるべきでしょう。 gcc とか (以下略) の個別の実装の話を出すのは (カルマを減らす or ちゃちゃいれ or 他人をおちょくる or so on が目的でなければ) そろそろ潮時かな~と愚考する次第です。
# もっともこの話題の発端は Oliver 氏の伝えるところの
# 教授氏のmath-out [tuxedo.org]な話から始まっているので
# 結局はこの教授氏を説き伏せるのにどちら (規格 or 実装) が
# 有効かという話に帰結したりするのかも。