>>949 個人的には、int main(void); という書き方に不満があります。私なら int main(); とします。でも、cdecl でも stdcall でも通用するようにしたいのでしょうけれども。
952 :
デフォルトの名無しさん :2008/11/16(日) 21:47:21
948 すいません。 そのとおりです。
>>951 さぁ。個人的な主観を言われても、それはあくまでも
世界的な標準スタイルだし、int main(); < セミコロンは違和感がある。
さらに、C++では int main() 引数がなければ何も書かないのが標準的だそうだよ。
>>950 は、ANSI、ISO準拠なので、プログラムの開始は main 関数という条件もある。
要するに、プログラムの開始、主体となる main 関数に対するもの。
それ以外の、独自で定義する関数は、とりわけプロトタイプ宣言では
voidを入れていないと、警告する環境はあるけどね。まぁ、人それぞれ環境も違うし
あくまでも、幅広い環境で通用する世界的な標準スタイルの記述の仕方。
>>953 セミコロンはうかつでした。
>世界的な標準スタイルだし
本当ですか?規格でそういってるだけじゃないですか?規格のほうが変だった、という可能性はありませんか?
規格の方が変ってwwwwwwww
>>955 まあ、別に従わなくてもいいよ。
ドコモAUのメールアドレスみたいに世界標準に従わない事例もたくさんある。
ただ、それが好ましく思われないことは知っておけばいいんじゃないかなー
正装すべき場面では正装しましょう。
宿題じゃないんだけど、教えてください。 waitについてなんですが、wait(100000)とは何秒くらいなのでしょうか? カッコ中の、時間の数字が、何の単位なのかがわからないので、教えてください。
>>958 知るかよwwwwww
標準にそんな関数はない
でもきっとmsecだろ多分
単なるビジーループで、引数はループの回数だったりして。
Cだとmain(void)とmain()は意味が違う main()はあらゆる型・個数の引数を受け入れるという意味になる
>>954 c でよく採用された実装では、呼び出され側のコードは、呼び出し側の引数の個数や種類に依存しない、というもの。....※
個々の関数は翻訳単位を別にとることが可能ですよね。無論、呼び出し側・呼び出され側の引数のチェックがあればそれにこしたことはないのですが。
で、main() についても呼び出し側でなんらかの仮定があり、それに対応して main() 記述側で記述するわけです。
※によりmain() 呼び出し側は main() の記述側で必要な引数がどうであれ、常に同じものがリンクされるといっていいと思います。
そうであれば、main(void) と書くのは、main() 呼び出し側の仮定と食い違う書き方をしているわけですね。この書き方はcdecl なら問題ありませんが、stdcall のことは考えていませんよね。
int main(void)
は、main() の呼び出し側に思いを馳せていない、という気がどうしてもしてしまいます。
963 :
961 :2008/11/16(日) 22:16:55
ミリ秒 つーかそれくらいはぐぐれよ
965 :
962 :2008/11/16(日) 22:17:35
966 :
958 :2008/11/16(日) 22:21:44
ありがとうございます。 プログラムとは縁がほとんどないので、ググってみても、 正しいのかよくわかんなかったのでここで聞かせてもらいました。 msecだと100秒ですか・・・
967 :
962 :2008/11/16(日) 22:22:38
>>956 よくあることです。校則遵守、な思考からはそろそろ卒業しませんか?
>>957 int main(void)
が「正装」なのでしょうか?理解に苦しみます。
これは現行規格の方がおかしいでしょうね。まあ出入り計算は微妙ですけれども
5.1.2.2.1 プログラム開始処理 プログラム開始処理において呼び出される関数の名前は,main とする。処理系は,この関数に対して関数原型を宣言しない。この関数は,次の4種類の方法のいずれかで定義しなければならない。 − 返却値の型 int をもち仮引数をもたない関数 int main(void) { /* ... */ } − 二つの仮引数をもつ関数(仮引数は,これらが宣言された関数に対して局所的であるため,どのような名前を使用してもよいが,ここでは argc 及び argv とする。) int main(int argc, char * argv[]) { /* ... */ } − 上に掲げた二つの方法のいずれかと等価な方法 − 上に掲げた三つの方法のいずれでもない処理系定義の方法 int main()は「三つの方法」のいずれでもないので「処理系定義の方法」 つまり移植性がない、動かないコンパイラがあったとしても文句は言えない 一方int main(void)を弾くコンパイラは標準準拠してる限りあり得ないし、あったとしたら堂々と文句が言える わざわざ移植性のない書き方をする理由がない
>>969 そんなチームのリーダーには、近づかないほうが賢明というもの。
処理系定義動作や不定動作や未定義動作を「動くし、効率的だ。規則が間違ってる」なんて理由で 勝手に埋め込むキチガイ野郎が歓迎される職場なんてねえよ
>>971 いや、意味を理解しろ。その場のルールがあるのに、
従わないと表明する奴は干されるだろ、JK
>>970 規約を引用しその考え方を説明していただくのは結構ですし、私もそれは理解しています。けれども今は、引用していただいた規約の正当性/妥当性を問題にしているのですが。
>>974 たしかにルールがあれば従いますが、「なにも考えずに従え」といわれても‥‥‥。
規約に文句があるならこんなところでブチブチ言わずISOに乗り込んで変えさせてこいよ それが出来ない限りお前が言ってるのはただの戯言だ
>>973 ええ?とりあえずルールには従いますが、ルール自体を常に検討することも必要なのでしょうか?ルールの再検討は批判されるのですか?
私の職場では「業務改善」という標語がありますけれども、一般的ではないのでしょうか?
>>955 規格って、C言語の規格じゃなくて、その int main については
標準的な記述の仕方であって、べつに強制じゃないんだが・・・
ただ、ひとつ言えるのは、それに従った記述であれば
幅広い環境で通用するということ。人それぞれ、独自の
開発環境はあることだし。ただ、言うまでもないが
void 型で宣言して return 0; ってのは、値を返さない関数では
不適切ではあるが。
決まり事に考えるも何もない なんで整数の予約語がintなんだ、integerの方が正しいとか言ってるのと変わらん 何の意味もないし、正しいからって押し通そうとして#define integer intとかやったら迷惑だろ
>>977 「こんなところでぶちぶちいうこと」が、すなわち変化を求める運動のひとつのつもりなのですが。
>>978 世界的な規格なんだから世界中同時にやらないと意味がない
お前の職場だけでやってもそれはお前の職場のプログラムが規格から外れるだけだ
だから自分がそんなに正しいと思うならISOに乗り込んで来いよ、な?
>>979 それはそうですが、
int main(void)
が「より幅広い環境で通用する」書き方かどうかは、とても微妙ですが、異論があるということです。
なお
void main()
の話ではありません。これは問題外であることは承知しております。
>>982 現在のところ規約には従っています。
でも規約に対して批判もするな、ということですか?それって「全体主義」ではないのでしょうか?
本音はどうであれ、建前でも「批判をするな」というのは、ちょっと考えられない世界なのですが?
もしかしてあなたの世界はまだ太平洋戦争が終わっていないとか?
このmain関数の記述に関しては、2年以上前に物議を醸した。 べつに強制じゃなく、あくまでも世界的な標準規格を決めている 組織が提唱する標準スタイル。同じコンパイラでも、バージョンが違えば その時代による風潮か、違うことも。ただ、最新のであれば、恐らく int mainだろうがvoid mainだろうが、引数にvoidを書かなくても 適当に解釈してくれるでしょ。 ちなみに、ISO準拠の製品といえば、CDやらDVD、その他 安全基準もあるし、関与することに従っておいて損はない。
批判が悪いなんて誰も言ってない ただいくら批判した所で標準が変わらない限りはint main()は標準非準拠であることに変わりはないし int main()を使ったプログラムが標準を無視した移植性のないプログラムであることも変わりない それが気にくわないならISO行けって言ってるだけだ
>>985 void main()
はアウトでしょう。さすがに。
void main()もint main()も int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPervInstance, LPSTR lpszCmdLine, int nCmdShow)も 「上に掲げた三つの方法のいずれでもない処理系定義の方法」である点には何も変わりはない
>>989 winmain() って pascal 修飾子をつけませんでしたっけ?昔の話だったかな?
>>989 void main() と int main() に差がないのであれば、あるいは差がないと考えているのであれば、
それは大問題で、みずからの思考方法を再度検討する必要があるのではないでしょうか?
C++だとint main()もint main(void)も等価だから、 うだうだ文句言わずにCなんか窓から外に投げ捨てて、 C++を使うというのはどうだろう?
>>990 WINAPI が呼び出し規約部分をマクロで隠蔽しているぞなもし
Cは投げ捨てても帰ってくる忠犬
>>990 PASCALでもいい。
WINAPIもPASCALもWin32では#defineで__stdcallになるので同じこと。
int main()だけど、C99だと関数定義時に()だと引数がないことを表すという規定がある。
そこから
>>970 の3つ目、いずれかと等価な方法に当てはまるんじゃないかと思っている。
この解釈が正しいかどうか自信ないし、C89ではどうなのか知らないので、
結局Cではint main(void)と書いているけど。
6.7.5.3の中ほど
並びの中の唯一の項目がvoid型で名前の無い仮引数であるという特別な場合、関数が仮引数を持たないことを指定する。
(中略)
関数定義の一部である関数宣言子で識別子並びが空の場合、関数が仮引数を持たないことを指定する。
関数定義の一部で無い関数宣言子の識別子並びが空の場合、仮引数の個数および型の情報がないことを指定する。
ちょうどいい埋めネタになったんじゃね?まだ次スレ立っていないけど。
まあ戻り値の型を指定した以上、returnもしくはexitで返してあげるべきだよなあ。
999 :
デフォルトの名無しさん :2008/11/16(日) 23:41:38
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。