C/C++の宿題を片付けます 117代目

このエントリーをはてなブックマークに追加
951デフォルトの名無しさん
>>949
個人的には、int main(void); という書き方に不満があります。私なら int main(); とします。でも、cdecl でも stdcall でも通用するようにしたいのでしょうけれども。
952デフォルトの名無しさん:2008/11/16(日) 21:47:21
948
すいません。
そのとおりです。
953デフォルトの名無しさん:2008/11/16(日) 21:51:43
>>951
さぁ。個人的な主観を言われても、それはあくまでも
世界的な標準スタイルだし、int main(); < セミコロンは違和感がある。
さらに、C++では int main() 引数がなければ何も書かないのが標準的だそうだよ。
954デフォルトの名無しさん:2008/11/16(日) 22:00:10
>>950は、ANSI、ISO準拠なので、プログラムの開始は main 関数という条件もある。
要するに、プログラムの開始、主体となる main 関数に対するもの。
それ以外の、独自で定義する関数は、とりわけプロトタイプ宣言では
voidを入れていないと、警告する環境はあるけどね。まぁ、人それぞれ環境も違うし
あくまでも、幅広い環境で通用する世界的な標準スタイルの記述の仕方。
955デフォルトの名無しさん:2008/11/16(日) 22:04:23
>>953
セミコロンはうかつでした。
>世界的な標準スタイルだし
本当ですか?規格でそういってるだけじゃないですか?規格のほうが変だった、という可能性はありませんか?
956デフォルトの名無しさん:2008/11/16(日) 22:05:36
規格の方が変ってwwwwwwww
957デフォルトの名無しさん:2008/11/16(日) 22:09:38
>>955
まあ、別に従わなくてもいいよ。
ドコモAUのメールアドレスみたいに世界標準に従わない事例もたくさんある。
ただ、それが好ましく思われないことは知っておけばいいんじゃないかなー
正装すべき場面では正装しましょう。
958デフォルトの名無しさん:2008/11/16(日) 22:10:43
宿題じゃないんだけど、教えてください。
waitについてなんですが、wait(100000)とは何秒くらいなのでしょうか?
カッコ中の、時間の数字が、何の単位なのかがわからないので、教えてください。
959デフォルトの名無しさん:2008/11/16(日) 22:12:51
>>958
知るかよwwwwww
標準にそんな関数はない
でもきっとmsecだろ多分
960デフォルトの名無しさん:2008/11/16(日) 22:14:47
単なるビジーループで、引数はループの回数だったりして。
961デフォルトの名無しさん:2008/11/16(日) 22:15:37
Cだとmain(void)とmain()は意味が違う
main()はあらゆる型・個数の引数を受け入れるという意味になる
962デフォルトの名無しさん:2008/11/16(日) 22:16:06
>>954
c でよく採用された実装では、呼び出され側のコードは、呼び出し側の引数の個数や種類に依存しない、というもの。....※
個々の関数は翻訳単位を別にとることが可能ですよね。無論、呼び出し側・呼び出され側の引数のチェックがあればそれにこしたことはないのですが。
で、main() についても呼び出し側でなんらかの仮定があり、それに対応して main() 記述側で記述するわけです。
※によりmain() 呼び出し側は main() の記述側で必要な引数がどうであれ、常に同じものがリンクされるといっていいと思います。
そうであれば、main(void) と書くのは、main() 呼び出し側の仮定と食い違う書き方をしているわけですね。この書き方はcdecl なら問題ありませんが、stdcall のことは考えていませんよね。

int main(void)
は、main() の呼び出し側に思いを馳せていない、という気がどうしてもしてしまいます。
963961:2008/11/16(日) 22:16:55
>>961
そういうことです。
964デフォルトの名無しさん:2008/11/16(日) 22:17:33
ミリ秒
つーかそれくらいはぐぐれよ
965962:2008/11/16(日) 22:17:35
訂正。
>>961
そういうことです。
966958:2008/11/16(日) 22:21:44
ありがとうございます。
プログラムとは縁がほとんどないので、ググってみても、
正しいのかよくわかんなかったのでここで聞かせてもらいました。
msecだと100秒ですか・・・
967962:2008/11/16(日) 22:22:38
>>956
よくあることです。校則遵守、な思考からはそろそろ卒業しませんか?
968デフォルトの名無しさん:2008/11/16(日) 22:38:20
>>957
int main(void)
が「正装」なのでしょうか?理解に苦しみます。
これは現行規格の方がおかしいでしょうね。まあ出入り計算は微妙ですけれども
969デフォルトの名無しさん:2008/11/16(日) 22:39:04
>>967
お前がチームにいたらクビにする
970デフォルトの名無しさん:2008/11/16(日) 22:41:06
5.1.2.2.1 プログラム開始処理 プログラム開始処理において呼び出される関数の名前は,main とする。処理系は,この関数に対して関数原型を宣言しない。この関数は,次の4種類の方法のいずれかで定義しなければならない。
− 返却値の型 int をもち仮引数をもたない関数
      int main(void) { /* ... */ }
− 二つの仮引数をもつ関数(仮引数は,これらが宣言された関数に対して局所的であるため,どのような名前を使用してもよいが,ここでは argc 及び argv とする。)
      int main(int argc, char * argv[]) { /* ... */ }
− 上に掲げた二つの方法のいずれかと等価な方法
− 上に掲げた三つの方法のいずれでもない処理系定義の方法


int main()は「三つの方法」のいずれでもないので「処理系定義の方法」
つまり移植性がない、動かないコンパイラがあったとしても文句は言えない
一方int main(void)を弾くコンパイラは標準準拠してる限りあり得ないし、あったとしたら堂々と文句が言える
わざわざ移植性のない書き方をする理由がない
971デフォルトの名無しさん:2008/11/16(日) 22:41:48
>>969
そんなチームのリーダーには、近づかないほうが賢明というもの。
972デフォルトの名無しさん:2008/11/16(日) 22:45:34
>>970
最期の方は間違ってるだろ
973デフォルトの名無しさん:2008/11/16(日) 22:45:42
処理系定義動作や不定動作や未定義動作を「動くし、効率的だ。規則が間違ってる」なんて理由で
勝手に埋め込むキチガイ野郎が歓迎される職場なんてねえよ
974デフォルトの名無しさん:2008/11/16(日) 22:47:45
>>971
いや、意味を理解しろ。その場のルールがあるのに、
従わないと表明する奴は干されるだろ、JK
975デフォルトの名無しさん:2008/11/16(日) 22:48:15
>>970
規約を引用しその考え方を説明していただくのは結構ですし、私もそれは理解しています。けれども今は、引用していただいた規約の正当性/妥当性を問題にしているのですが。
976デフォルトの名無しさん:2008/11/16(日) 22:49:18
>>974
たしかにルールがあれば従いますが、「なにも考えずに従え」といわれても‥‥‥。
977デフォルトの名無しさん:2008/11/16(日) 22:49:56
規約に文句があるならこんなところでブチブチ言わずISOに乗り込んで変えさせてこいよ
それが出来ない限りお前が言ってるのはただの戯言だ
978デフォルトの名無しさん:2008/11/16(日) 22:51:55
>>973
ええ?とりあえずルールには従いますが、ルール自体を常に検討することも必要なのでしょうか?ルールの再検討は批判されるのですか?
私の職場では「業務改善」という標語がありますけれども、一般的ではないのでしょうか?
979デフォルトの名無しさん:2008/11/16(日) 22:51:56
>>955
規格って、C言語の規格じゃなくて、その int main については
標準的な記述の仕方であって、べつに強制じゃないんだが・・・
ただ、ひとつ言えるのは、それに従った記述であれば
幅広い環境で通用するということ。人それぞれ、独自の
開発環境はあることだし。ただ、言うまでもないが
void 型で宣言して return 0; ってのは、値を返さない関数では
不適切ではあるが。
980デフォルトの名無しさん:2008/11/16(日) 22:53:21
決まり事に考えるも何もない
なんで整数の予約語がintなんだ、integerの方が正しいとか言ってるのと変わらん
何の意味もないし、正しいからって押し通そうとして#define integer intとかやったら迷惑だろ
981デフォルトの名無しさん:2008/11/16(日) 22:53:36
>>977
「こんなところでぶちぶちいうこと」が、すなわち変化を求める運動のひとつのつもりなのですが。
982デフォルトの名無しさん:2008/11/16(日) 22:55:05
>>978
世界的な規格なんだから世界中同時にやらないと意味がない
お前の職場だけでやってもそれはお前の職場のプログラムが規格から外れるだけだ
だから自分がそんなに正しいと思うならISOに乗り込んで来いよ、な?
983デフォルトの名無しさん:2008/11/16(日) 22:55:40
>>979
それはそうですが、
int main(void)
が「より幅広い環境で通用する」書き方かどうかは、とても微妙ですが、異論があるということです。

なお
void main()
の話ではありません。これは問題外であることは承知しております。
984デフォルトの名無しさん:2008/11/16(日) 22:58:31
>>982
現在のところ規約には従っています。
でも規約に対して批判もするな、ということですか?それって「全体主義」ではないのでしょうか?
本音はどうであれ、建前でも「批判をするな」というのは、ちょっと考えられない世界なのですが?
もしかしてあなたの世界はまだ太平洋戦争が終わっていないとか?
985デフォルトの名無しさん:2008/11/16(日) 23:00:12
このmain関数の記述に関しては、2年以上前に物議を醸した。
べつに強制じゃなく、あくまでも世界的な標準規格を決めている
組織が提唱する標準スタイル。同じコンパイラでも、バージョンが違えば
その時代による風潮か、違うことも。ただ、最新のであれば、恐らく
int mainだろうがvoid mainだろうが、引数にvoidを書かなくても
適当に解釈してくれるでしょ。
ちなみに、ISO準拠の製品といえば、CDやらDVD、その他
安全基準もあるし、関与することに従っておいて損はない。
986デフォルトの名無しさん:2008/11/16(日) 23:01:14
批判が悪いなんて誰も言ってない
ただいくら批判した所で標準が変わらない限りはint main()は標準非準拠であることに変わりはないし
int main()を使ったプログラムが標準を無視した移植性のないプログラムであることも変わりない

それが気にくわないならISO行けって言ってるだけだ
987デフォルトの名無しさん:2008/11/16(日) 23:02:40
>>985
void main()
はアウトでしょう。さすがに。
988デフォルトの名無しさん:2008/11/16(日) 23:03:39
>>986
まあそれはそうでしょうね。
989デフォルトの名無しさん:2008/11/16(日) 23:04:41
void main()もint main()も
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPervInstance, LPSTR lpszCmdLine, int nCmdShow)も
「上に掲げた三つの方法のいずれでもない処理系定義の方法」である点には何も変わりはない
990デフォルトの名無しさん:2008/11/16(日) 23:07:08
>>989
winmain() って pascal 修飾子をつけませんでしたっけ?昔の話だったかな?
991デフォルトの名無しさん:2008/11/16(日) 23:11:53
>>989
void main() と int main() に差がないのであれば、あるいは差がないと考えているのであれば、
それは大問題で、みずからの思考方法を再度検討する必要があるのではないでしょうか?
992デフォルトの名無しさん:2008/11/16(日) 23:12:15
C++だとint main()もint main(void)も等価だから、
うだうだ文句言わずにCなんか窓から外に投げ捨てて、
C++を使うというのはどうだろう?
993デフォルトの名無しさん:2008/11/16(日) 23:15:52
>>990
WINAPI が呼び出し規約部分をマクロで隠蔽しているぞなもし
994デフォルトの名無しさん:2008/11/16(日) 23:18:05
Cは投げ捨てても帰ってくる忠犬
995デフォルトの名無しさん:2008/11/16(日) 23:22:57
>>990
PASCALでもいい。
WINAPIもPASCALもWin32では#defineで__stdcallになるので同じこと。

int main()だけど、C99だと関数定義時に()だと引数がないことを表すという規定がある。
そこから>>970の3つ目、いずれかと等価な方法に当てはまるんじゃないかと思っている。
この解釈が正しいかどうか自信ないし、C89ではどうなのか知らないので、
結局Cではint main(void)と書いているけど。

6.7.5.3の中ほど
並びの中の唯一の項目がvoid型で名前の無い仮引数であるという特別な場合、関数が仮引数を持たないことを指定する。
(中略)
関数定義の一部である関数宣言子で識別子並びが空の場合、関数が仮引数を持たないことを指定する。
関数定義の一部で無い関数宣言子の識別子並びが空の場合、仮引数の個数および型の情報がないことを指定する。
996デフォルトの名無しさん:2008/11/16(日) 23:25:43
main がどーのこーのは完全にスレチ
http://pc11.2ch.net/test/read.cgi/tech/1201153965/
こっちでやれ
997デフォルトの名無しさん:2008/11/16(日) 23:27:51
ちょうどいい埋めネタになったんじゃね?まだ次スレ立っていないけど。
998デフォルトの名無しさん:2008/11/16(日) 23:39:00
まあ戻り値の型を指定した以上、returnもしくはexitで返してあげるべきだよなあ。
999デフォルトの名無しさん:2008/11/16(日) 23:41:38
[1] 授業単元:論理設計
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8043.txt
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:Visual C++
 [3.3] 言語:C++
[4] 期限:2008年11月18日10:40まで

よろしくお願いします。
1000デフォルトの名無しさん:2008/11/16(日) 23:45:50
>>999
回答欲しいならスレ立てよろ
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。