1 :
デフォルトの名無しさん :
2010/03/25(木) 20:48:54 BE:94671252-S★(518000)
alloca()したあと、realloc()ってしてもいいの?
別機構だから無理だろ
そうか。残念だ。
y
n
プロセス戻り値が実際現場ではとてもじゃないが レガシーな慣習だって理由ってわかる人居る?
日本語
日本人
いませんね
せやな
void先輩はせっかくスレがかわったんだから、恥の上塗りは止めればいいのに
レガシーな慣習とする文化圏に出くわしたことがないのでわかりませんな
俺自身がレガシーな環境に閉じこもってるってことか orz
他のスレでも void main は避難されてるようだね
void mainはJavaだろ Cはint main 但し親プロセスに返したexit codeは殆どの場合無視される。 数多くの子プロセス達が大量に製造された際に exit codeの意味がプロセス毎に勝手に定められてしまった ので、親プロセスがそれを記憶、管理して処理することなど 最早不可能(そのロジックのほうが子プロセスのロジックよ り遥かに大きくなってしまうだろうから)
>>19 基本的に正常終了は 0 を返し
それ以外は 1〜255 のいずれかを返す
ってのが作法
make だってプロセスの戻り値によって
途中で止まったりしてるんだよ
正常/異常と簡単に判別できるような単純なロジックの アプリではそれも良いかもしれないが、そうとも限らな い領域までカバーせざるを得なくなって久しいじゃね?
単純なロジックのアプリを組み合わせて使う文化があるから、終了ステータスは大事なんだ
古き良き時代はそうだった
>>21 そんときは別の手段でやればいい。
重要なのは、成功は0異常は0以外という大前提があるから
そこから逸脱すんなよという話。
こうして労使双方の主張は平行線のまま 仕様だけが硬直化し時代の要請とズレて いったそのバッチはやがて使われなくな りソースもろともrm -fな運命に....
>正常/異常と簡単に判別できるような単純なロジック だから255通りも返せるようにしてるんじゃん つかむかしから単純に正否だけ返せば言い時代なんてないって むりから昔の仕様としたいらしいけど (かなり昔からあるコマンドだっていろいろ返すじゃん)
>>20 いつの時代だよ、そんなことしてたら並列してコンパイルできないじゃん。
>>28 レガシーな環境が好きなんだな。
今の開発環境では、コンパイルとかリンクごとに main の戻り値なんかみてないからw
>>23 良いと思ってるならなんでそういう使い方をしないんだ?
31 :
デフォルトの名無しさん :2010/03/26(金) 18:15:02
256通り表せるといっても、その数値に明確な約束があるわけじゃない。 ほとんどの場合は0または非0で判断している。 意味不明なマジック埋め込まないでくれよまったく。
>>29 確認したいが、そのmainの戻り値というのはどのmainを指している?
あ、開発環境とかいってもわからないか。
>>32 レガシーな環境で、例えばOSがDOSだったら cc.exe とか link.exe とかのリターンコードでしょ。
35 :
デフォルトの名無しさん :2010/03/26(金) 18:18:43
それらのプログラムはvoid mainなのかい?
void main() (爆笑)
もうやめようぜ、ここまでの流れ見て、それでもvoid使うやついないって (もちろん一人でがんばってる彼も含めて) おまえもさ、あきらめたら?一言ごめんって言えばいいじゃん らくになるぞ もしくは、もうこないとか なんでそんな不利な戦いを続けるの? こんどは無理から古いやり方ってことに持っていく作戦らしいけど 使い方が明確に決まってないの当たり前じゃん 個々のアプリで自由に決めて使えなくてどうすんの? Windowsで言うところのWM_USERみたいなもんなんだけど アプリによって返したいものは違うじゃん な、お前の努力は評価するから、もう謝っちゃえよ
>>35 OSがDOSの場合なら昔は.exe しかなかったが、
Windows 環境では .dll で実行モジュールを提供することもできる。
そのモジュールからの戻りが1バイトの数値に制限されることはない。
.exe でもメッセージでやり取りできる。他にも方法が色々ある。
そもそも終了時にのみにしかデータが得られないとか制限ありすぎる。
今は実行中も通信する。昔はそういう要求はなかっただろうけど、今では当たり前のこと。
だから今は終了ステータスなど意味のないことの方が多い。
Q:256個の状態を返すアプリを8つ組み合わせました 呼び出し側は何通りの状態を判別して管理しなければな らないでしょうか? A: (2^8)^8=2^64=18446744073709551616通り で〜すw
>レガシーな環境で、例えばOSがDOSだったら cc.exe とか link.exe とかのリターンコードでしょ。
>>40 そもそも make のルールに表現できないんだよ。
make ファイルに記述できないことが make できるはずがないだろ。
>>39 あなたにとっては無駄に見えるかも知れないけど
私にとってはとても大切な物なの
>>46 -j オプション知ってる
互いに依存していなければ同時にコンパイルできるんだよ
makefile を適切に書ければの話だがw
終了ステータスを疎かにしたり全角英字も見えない奴って窓プログラマだろ(笑)
>>39 お説のとおりではあるが、だからといって void main() が許されるわけではない。
main() のプロトタイプは、main() を呼ぶスタートアップがどういう前提でつくられるのかに依存する。
void main() を前提としているスタートアップであれば、そう書くべきだが、そんな処理系は寡聞にして知らない。
もう一度繰り返すが、main()の返り値が実際に利用されているかどうかは、void main() が許容されるかどうかとなんら関係がない。
>そもそも終了時にのみにしかデータが得られないとか制限ありすぎる。 終了時にしか値を取れないわけじゃないんだけどな、パイプとかいろいろあるし 終了時に値をとるものについての話なんだけどな dll的なものもあるしね(こいつぜんぜん何も知らんのな) そういうことと別にして、終了時のステータスをとる場合もあるんだからintにしようぜって話なのにな
>OSがDOSの場合なら昔は.exe しかなかったが このせりふからもわかるように、こいつ年齢が若いか無知だ、もしかしたら学生とかだろうから もうほっておこうぜ 彼自身すごい勉強になったろうし
>>51 >終了時に値をとるものについての話なんだけどな
だから、取れる場合もあるってことでしかない。取れる場合はとったらいいんだよ。
caller と calleeで仕様を決めてる場合には成り立つんだからやればいいじゃん。
けど今の世の中にはそうでない caller も callee が溢れかえってる。
そんな状況で int にしたところで何の意味もない。
両者で仕様の打ち合わせもしてないような callee のプログラムで int にする意味はない。
それ以前に callee として稼働するプログラムだと決めつけるのもおかしい。
DOSの場合はどんなファイルでも.comにリネームして コマンドラインから打ち込もうなら問答無用で即時実行 してしまい大抵は暴走(要リセットボタン)
>>53 最初にCのプログラを組んだのはCP/Mですよ。これは趣味だけどね。
その後は商用で Unix で DOS、今は Win がメインで Linux もたまに。
>>54 もちろんプログラムによっては、使わないのなら意味がないさ
だからといって、わざわざvoidにして良いということではないって話じゃん
どんな場合でもvoidは意味がないのだから、
intにして0でも返すって習慣が正しい
>>57 値を返すという意思があって、そのコードを書くのは当然。
けど、その意志もないのに、値を返すコードを書くのはおかしい。
戻り値でなく main の引数はどうなの?
void で受けたら引数の処理をしないという明確な意思表示なるだろ。
どういう意味で省略してるの?矛盾してないか?
日本ではCP/Mはワープロ専用機とかではあったけど 趣味の人は普通 98でN88BASICやアセンブラ、そしてDOS このころからやっとCって流れだよな 大学でCやったにしてもBSDとかだろうし あるいはAPPLEでThinkCとか きっとIBMのXTを趣味でもってたとかだろうなぁ 理由はわからんけど
>>58 そうだろな、これはプログラマにしか通じないからwwwwww
>>39 その意味での通信ってそれこそ昔からあるだろ
>>61 頭が腐ってるのか目が腐ってるのかどっちだ?
>>63 その意味でのcalleeの使い方はおかしいっていってる?
>>59 値を返す意思が無ければ常に 0 を返せばいいんだよ
途中終了でも exit(0); で抜ければいい
不定値を返すようなマネはすべきではない
>>65 そこはぜひともEXIT_SUCCESSでお願いしたいが、0でいいです。
>>59 してないよ戻り値にvoidにして値を返さないと意思表示することは意味のないことだから
だってOSが親になんか返すし
引数とは違う引数でvoidにするのはプログラムないぶで使わないという意思表示でしょ
引数と同じように戻り値を使わないと明示的に言いたいなら、親プログラムのほうで戻り値を見ないという動作が等価でしょ
>>66 callerのtypoだと思うのは今までの流れでありえないと思うし、、
何がいいたいか分からんのではっきり書いてくれないか?
>>59 >けど、その意志もないのに、値を返すコードを書くのはおかしい。
これは修正する。
けど、その意志もないのに、値を返すコードを書くのはおかしい。という考え方もありだろ。
>>59 値を返す必要があるかどうかと、void main()が許容されるかどうかとは、関係がない。
void main() が許容されるかどうかは、main() を呼び出すスタートアップがどのような前提でつくられているかにかかっている。
値を返す必要がないからといって、main() リンクされるスタートアップの前提とことなる宣言をするのはおかしいのではないか。
そして void main() を前提とするスタートアップをもつ処理系は寡聞にしてしらない。
まだvoid mainの話題なの? makeで困るからやめて欲しいんだけど
なあ、頼むからもう止めようぜ 何の意味があんだよこの議論 彼の教育?ディベートの練習?
議論され尽くされたと思われる話題を再度議論するのはやはり意味があるのだ派が出てくる
>けど、その意志もないのに、値を返すコードを書くのはおかしい。という考え方もありだろ。 お前一人だぞ世界中で 本当に本当にそうなんだぞ
レガシーレガシー言うけど そういう人にとってはそもそもmain()を使ってる時点でレガシーだろ Windowsだと基本的にWinMainが使われるからmainを使うケース自体がレガシー
>>69 caller と callee だよ。
直訳すると呼び出し側と呼び出され側。
これは流石に俺でもわかる。一応プログラマだからw
void main() しちゃいけないのか?
>>34 cc.exe
>>51 dll
>>54 callee
お前ら本当にプログラマなのか?
信じらんねぇくらいのヘボだな
>>79 絶対にいけなくはない、ただ笑われたり馬鹿にされることがある
そもそも意味がない行為なので、あえてvoidを選ぶ理由はないので
呪文だと思って盲目的にintにしておくほうが人生ではベター
>>80 つまんねこと文句つけんなよ、携帯の人とかもいるんだろ
議論で、あきらかな言い間違いを指摘しても議論は進まない
82 :
デフォルトの名無しさん :2010/03/26(金) 19:29:16
つまんね間違いするな
>>68 引数も戻り値も void と宣言すれば、その関数の意思表示ができるんだよ。
仮に常に戻り値が void でいいものを全部 int で宣言して、return 0; してる奴がいたらどう思う?
値を返す必要があるときにだけ、返せ!て言いたくなるだろ。それと同じ。
>>81 単語単位ならギリギリ許せるけど文字単位で混在するなんて
プログラマとしてダサすぎるだろ(笑)
>>80 すまん、calleeだけは区別ができなかった。2ch見る時はAAのためにプロポーショナル使うんだ。。。
>引数も戻り値も void と宣言すれば、その関数の意思表示ができるんだよ 引数は受け取り側での意思表示だろ だから親プログラムで意思表示すべき >仮に常に戻り値が void でいいものを全部 int で宣言して、return 0; してる奴がいたらどう思う? 関数と違うのはプロセスは 返すつもりはないという意思表示はOSが勝手に返すので意味がない
複数のアプリに分解してシステムを作らざるを得ない←出発点 当初は0(正常系)1(異常系)で単純に作れると信じられた←古き良き時代 「そうでもないぜ」というので戻り状態数を中途半端に増やしたら、カオスになって 管理アプリが逃げ出して、管理者が居ないままアプリが通信しあうこと によって動作する協調動作なアプリの構築になった←昨今
>当初は0(正常系)1(異常系)で単純に作れると信じられた←古き良き時代 なにいってんの?Cの最初からそういうことはできる フォートランでもできる そんな古きよき時代はない >戻り状態数を中途半端に増やしたら、カオスになって みんな設計書作ってちゃんとやってる、カオスになんかなるかいな
逃げた管理者たちは皆そう言う
だかっていってvoidにすると解決するんかいなwww カオスになるかどうかとvoid intと関係ないじゃん
>>90 ANSI-C の規定に従う(そいう仕様が条件なら)当然 int とすべき。
けど、そうでない場合、処理系、C言語が void を認めているのであれば、
void もありだということ。 DOS では当然認められている。
そもも ANSI に準拠する必要があるのであればMS系のコンパイラは使えないことになる。
lattice や borland もそのはず。(こっちは最近のことは知らんが)
わざと誤字にするのはやめてくれ 読み辛い
>>93 ごめんなさい、見直す前にクリックしてしまった。
>DOS では当然認められている。 認められてなくね?明確にダメとはなっていないってだけで この両者は違うよ
>>92 レスthx。実際にいろいろやってみた。gcc
/* void main (void), void main() */
hello.c: In function 'main':
hello.c:3: warning: return type of 'main' is not 'int'
/* main (), main (void), int main(), int main(void) */
警告無し
単なる警告にすぎない
それ、戻り値を省略するとintになってるだけだと思う
でも main() の型は int だから void 使うなゴルァって事でしょ?
>>97 コンパイルオプションきつくしたらエラーになる
>>100 そうそう
それを「単なる警告にすぎない」とか言うのは馬鹿のすること
おまえは湾岸戦争前のサダムフセインかいって思う
>>100 警告の出るプログラム、書いた覚えはないかい?そのとき必ず間違ったプログラム書いてたかい?
>>95 しかるところに値が書いてあれば、リターンコードとして取得されるといことが決まっているだけ。
その値の規定はないし、値をセットしなければいけないという規定もない。
>>96 警告出すコンパイラならウザイから int で宣言すればいいと思うけど。
そうじゃない環境のところで void で宣言するのが「あり」か「ない」かだから。
>>103 -ansi -pedantic -Wall にした上で警告は全て潰してるぜ
警告だから大丈夫って姿勢は罪
でもこれは明らかに間違っているから出てる警告だよな 間違っていないで警告が出ることがあるからといって この警告もそうと言う事にはならないじゃん こいつ本当にプログラマーか? 条件分岐とかで穴とか作りやすい人だろうな
甘いな-Wall -ansi -pedantic -std=c89にした上で警告全て潰しているよ
>そうじゃない環境のところで void で宣言するのが「あり」か「ない」かだから。 なるほど、これが議論の争点だったわけっすね。
コンパイラが吐くメッセージは必要最小限のみ そうじゃないとメッセージログがいくらあっても足りないからね intじゃないよと表示されていたとして、間違っているとはかぎらない 実際間違ってないのだしね
今確認したら-pedantic-errorsにしていた
>>98 それなら、
main(void) と定義しても、argc と argv がスタックに積まれた上で、
main 関数が呼び出されてる。
それを引数で受けないのもおかしいということになる。
すなわち、void mainというのは仕様で間違ってる って事
>そうじゃない環境のところで void で宣言するのが「あり」か「ない」かだから。 もともとはcodepadだっけ?あれgccだよな じゃあやっぱintが正解、笑われて当然ってことでFA?
>>112 ちがーよ、省略した戻り値はintってC言語的に決まってんだよ
引数とは違う、VCもそうだからやってみろ
>>83 値を返す必要があるかどうかと、void main()が許容されるかどうかとは、関係がない。
void main() が許容されるかどうかは、main() を呼び出すスタートアップがどのような前提でつくられているかにかかっている。
値を返す必要がないからといって、main() リンクされるスタートアップの前提とことなる宣言をするのはおかしいのではないか。
そして void main() を前提とするスタートアップをもつ処理系は寡聞にしてしらない。
グダグダ言ってる奴らは回線切ってオレ様仕様mainstartupでも作ってろや
>void main() が許容されるかどうかは、main() を呼び出すスタートアップがどのような前提で intかvoidかのいずれかって仕様できまってるんじゃなかったっけ?
>>113 あ、そう考えるんだったら。
警告のでない環境ならOKということだね。その言語が認めてるんだから。
そういう環境なら void main() は問題ない。MS系はOK。Unix系もOK。
環境によっては OK 何だから、何が何でも int しないといけないと言うのは間違い。
そういうこと。
はい、終了。さいなら。
何が何でも int しないといけないと言うこともないし void main() は問題もないけど あえてvoidをつかう理由はないし 馬鹿っぽいからintにしましょうって話じゃん
何同じこと延々と話してんだこいつらは…マジキチか?
int信者はそれすら許さない voidは問題だと言う
>>105 void main() が許容されるかどうかは、main() を呼び出すスタートアップがどのような前提でつくられているかにかかっている。
値を返す必要がないからといって、main() とリンクされるスタートアップの前提とことなる宣言をするのはおかしいのではないか。
関数をコールする場合に呼び出し側と呼び出され側で返り値の型はあわせないといけないというのに、main() だけ別扱いにするのも変な話
>void main() が許容されるかどうかは、main() を呼び出すスタートアップがどのような前提で intかvoidかのいずれかって仕様できまってるんじゃなかったっけ?
たとえて言うなら チンポ出して歩くほど悪いことではない でもシャツを裏返しくらいのかっこ悪さはある (もしかしたらそういうファッションの国もあるかも 知らないけど) 別に違法ではないし使い方も間違っている、が本人がきにしないなら、すれば って事だよね int信者だってww 絶対許さないとか誰も言ってないじゃん 使い道あるよとか、仕様ではダメななんよとかその程度で
そうでもない人もいるようだが
>>124 事実上レジスター渡しであるのでどっちでも呼び出し時点でのスタックの状態はかわらない、ということはある。
ただし、値を返すから int main(), 値を返さないから void main() とするのは、筋としてとおらず、c 言語のセンスのない発言だと思う。
君の意見なんてどうでもいいんだよ?
>>125 たとえが意味不明。呼び出し側の仮定と異なる宣言を呼び出され側でしていいのか?というところを問うているだけ。
>>128 そもそも規格 JIS X3010:2003 5.1.2.2.1 ではどうなっているのか、それを踏まえたうえでの発言のつもりではあるが、なにか?
センスと規格、どうつながんの?
>たとえが意味不明。呼び出し側の仮定と異なる宣言を呼び出され側でしていいのか わかれよ、シャツのメーカーや社会通念での仮定と異なる着方をしていいのかって比喩だよ
JISの規格をつくった奴はセンスが無いって事ですが?
>>132 main() 以外の extern な関数呼び出しでは呼び出し側と呼び出され側で返り値の型をあわせるというのに 「main() のときだけあわせなくてもよい」と主張するのは首尾一貫性がない。
規格があってもそれを理解できないのは、コンピュータ言語に対するセンスがないとしかいいようがない。
だからさー、おまえらが言ってるのはホスト環境の話だろ? フリースタンディングではvoid main()と書け、とマニュアルにあったりするんだよ。少ないけどな。 処理系に依存っていう超簡単な結論がわかってるのに、何で無限ループさせんの?
>>135 >規格があってもそれを理解できないのは、コンピュータ言語に対するセンスがないとしかいいようがない。
自問自答www
>>138 おいおいバグだらけじゃねーか
コンパイルできないぞCでもC++でも
>>139 入門スレなんだから、別にいいだろ。
前スレの815をディスるのはやめよう。
>>136 その環境はつまりANSI-Cに準拠していないというだけだよな?
それは今相手にしていないと思う
どこが違反してんの?
void main()を強制するってことはint main(void)がだめなんだろ?
でもさ最初のころの intが仕様である証拠もってこいや プロセスの戻り値は使わないほうが(精神衛生上)良い 0か1に決まってるからOK Windowsでは意味なし 戻り値は使えたり使えなかったりする 古い人のやりかた そんなのを使ったらプログラムがカオスになる 値を返さない場合の明示としてあり 警告だけだからOK 俺の知ってる環境ではマニュアルでvoidって書けって言ってる 全部否定されて、だいぶ戦線が後退してるじゃん 最後のは脳内環境ではvoid推奨って事でしょ 泣き入ってるじゃん もうゆるしてやれば?
>>143 ダメだったら違反、じゃないんだけど?
いずれか、なんだから。
>>141 「処理系依存のmain()」はC規格に含まれている。ただしC99から。
それ以前はvoid main()は未定義とされている。
EXIT_SUCCESSかEXIT_FAILUREのどちらかを使うとか
int main()以外認めん、と言ってるヤツはC89しか知らない頭ガチガチのオヤジだろう。 あるいは日本語を正しく解釈できないか。
書き直して消せる警告は極力消してたほうが精神衛生上よくね?
センスだの精神論だの こんどはオカルト持ち出すか?voidが出たらレンズ豆とキャベツと豚のスープでも食うのか?
少なくとも codepadでvoid mainを書くやつを擁護できないってのは両軍ともOK?
春なのに近頃冷えるからねぇ 熱いスープは欲しいな
あのソースを叩いてるのはvoidもintも関係無いべ
>>152 mainを呼ぶ側のことなんて気にせず、戻り値の必要がなければvoid mainで問題ないというのがvoid派の意見かと
必ずfreeと必ずint mainは同じ人?
void main にするべき という意見には反対
voidにするべき、って人はいたっけ?問題ないとは思うけど
>>156 void派一人(いても2人)
int派はいっぱいいると思う 一回だけ書いてもう見てるだけどか
よくわからんのだけどさ そもそも初心者向けの解説本とかWebサイトで void mainが書かれるようになったのは何でなの? ざっと流れを読むと int mainが(基本)正しくて、void mainは環境に依存した極めて特殊な場合なんでしょ
はたから見ると、int派が一人(いても2人) でvoidでもいいじゃんが多数なんだが
162 :
結論 :2010/03/26(金) 21:38:41
mainの戻り値はintにして適切な値を返すべきだが、 void mainは別に間違いというわけではない
163 :
デフォルトの名無しさん :2010/03/26(金) 21:39:59
PHPのfile関数のように、ファイル全体を読み込んで配列に格納するのはどのように書くのでしょうか?
>>161 おれint派だけど、俺が書いてる間に結構スレが進む
俺外に4,5人はいると思う
>>163 fopenしてwhileでfgetが簡単だと思う
void mainにすればint mainとそれに対するreturnとexitの説明を書かなくてもいいとかなんとか
>>161 fopenしてfseekして最後まで行って差を調べてサイズ計算して
fseekで先頭まで戻って
サイズ分mallocして、それを配列にキャストして
freadでそのポインタにサイズ分読む
ファイルが小さいならmallocしないでもいいかも配列のサイズ分読むだけで
>>163 fopen ファイルを開く
fseek ファイルの末尾に移動する
ftell 現在位置が何バイト目か調べる => ファイルサイズ
malloc 領域を確保する
fseek ファイルの先頭に移動する
fread 読み込む
fclose ファイルを閉じる
free 使い終わった領域を解放する
>>160 void mainが正しい という環境はきわめて特殊だけど
void mainでも困らない という状況はそこそこ多い。
今は大丈夫でもあとで困る ってのもよくあるけどな。
どうせWinMainしか使わないんだから mainなんかどうでもいいだろ
それだとPHPのfileとしての役割はもたないのでは
>>172 int をレジスタ渡しとしていたのなら、int を返り値にしようが、void だろうが呼び出し時点のスタック構造はかわらないし。
ここにいる人の多くはPHP(笑)とか馬鹿にして PHPのfileの動作を知らんのであった
一行ずつ分割するみたいね
てきとーすぐるwwww
バイナリモードなら合ってるけど テキストモードだと違う
テキストモードでも間違ってんよwww
書き込んで逆に気づいたwっをちつけwww
どおりでWindows出身のプログラマは使えない奴が多い訳だ 何で頑なにvoid mainを肯定しようとするのか? 流れを見てると別にvoid mainを使いたきゃ使ってもいいが 公然と肯定しようとする姿勢がダメだって言われてるんじゃねぇの? 初心者にも悪影響を及ぼしかねないし。
だめじゃね?これintの場合とか文字列の場合とかfloatとか別々に作らんと whileで回してfgetsでバッファに取り込んで 改行コードしだいで buf[strlen(buf)-1]='\0+; みたいな事やって改行つぶして 文字列ならstrcpy 数字なら直で配列に代入とかやらないと
178,180,182と立て続けにあぼーんが続いてる AAか俺に嫌われてるワードがあるに違いない!
buf[strlen(buf)-1]='\0+; ↓ buf[strlen(buf)-1]='\0; なんか+がくっついた 意味はないよ
今回の場合はvoid mainを馬鹿にするint main信者がきっかけ。 それに、int派の言い分も、void mainを使いたきゃ使ってもいいというのは違う。 void mainが仕様として許されている環境であれば別に使ってもいいよ?程度かなー。
>>186 くっついたんじゃなくて'が変身したんじゃないの?あと、セミコロンが全角だから誰かが怒るかもしれない
>>187 あとvoidの人が、ああいえばこういうでゴネまくったのも原因じゃね
>>187 あとintの人が、ああいえばこういうでゴネまくったのも原因じゃね
>>188 あ、本当だね
こういうのC++で書くとCよりラクチンだよな、とか言うとまた揉めるから具体的には言わないけど
PHPしかしらない人かもしれないから言うけど、C++でも良いなら、そっちのスレに行って聞いたほうが良いと思うよ
int ****p; ってどういう用途がありますか?
void mainで問題ないことが保障されている環境は、int mainのそれと比べて圧倒的に少ないから int mainの方がより汎用的なコードである、というのがint派の理想系だろうか
少なくとも俺の見た本ではvoid mainを使っていた! と卵から孵った雛が最初に見た物を親と思うように 生涯それだけを盲信してしまうのは如何なものかと思いますが。
>>192 ポインタのポインタのポインタのポインタをいじりたいとか
「どうだ俺ってすげえだろ」って言って
「はいはい」って言われたいときとか
妄信してるのはint派だってば。今は規格に含まれてるんだから。
その場合、void mainを-c89でコンパイルすると、それはいまや保障される?
規格に含まれるって言ったって、そういう環境もあるのでってだけじゃん そういう場合も仲にはありますよって事でしょ Unix、Windowsではintなんだし 妄信してたほうがたぶん正解だよなぁ
保証とは?
盲信するのが正解なんてことはなかろ そうするのならvoid mainはなにがあってもだめだと言わないと。
素直に「オレの知ってる環境以外は認めない」って言えばいいのに。強情だなぁ。
正解って言うとおかしいけど たとえば人に教えるときに 「いいからintって書いとけ」って言うのありでしょ 英単語でもさ、すんげえ細かい外人も知らないような意味まで覚えようとしてる人っているじゃん それみたいにならないように
>192 擬似的に3次元の配列を動的に確保してその変数を間接参照したいとき 例えば関数に渡すときなど foo_t foo(fooo_t fooo) { foooo_t ***foooo; foo_t foo; foooo = allocate(fooo); foo = something(&foooo); return foo; } foo_t something(foooo_t ***const*foooo) { (void)*foooo; return something0(); } 3つまでは、しばしば使うけど、さすがに4つは使ったことが無いわ 本当はconst修飾したいから、できれば1次元で扱いたいことがしばしばある
>>201 intリターンを認めない環境ってあるの?
205 :
815 :2010/03/26(金) 22:31:28
どうも、void main() って書いた人本人です。 すみません。なんか荒れてるみたいなんでビックリしました…(・_;こ、こわい… void main() ですが、書いた理由は「めんどくさかったから」です… あ、モノ投げないで(つ_< すみません。深い意味なんて何一つないです。むしろ、なにも考えて無いです。ばかなので。 単に「10進から16進に変換する関数がちゃんと計算してくれるかな〜?」って確認する程度の軽い気持ちで、 ソースの一番下に適当に void main(){printf("%s", 10sin_kara_16sin("65535"));} っと書いてコンパイルして確認したのを、 「ついでだから16進から10進も…」とか「2進から10進も…」とか「あれ?これ全部同じ式ぢゃない?」とか、 「入力めんどくせぇなぁ〜…」って思ったので「こうすれば入力ラクだなぁ〜」って思いついた書き方を適当に足して… ってやってったら、いつのまにかちょっとしたおもちゃが出来たので、 「(^_^;あ、こりゃおもしろいかな…?」くらいの軽い気持ちでUPしたんですが、 おもしろがられるどころか、怒られるとわ…(・_; …いや、別の意味でオモシロがられてますがorz …し、しにたいw すみません、こんどから int main(){return 0;} って書きますから許してください。ごめんなさいでした。
>>205 あなたのせいでもめてるんじゃない。
void mainを馬鹿にしたint派のせいだよ
そうそう 危なそうな非武装地域には近づかず 地雷の心配の無いところでフラフラするのが一番いいよね
ここで「つかお前今までvoid派で必死で書き込んでたやつだろw 相変わらずわかり安すぎww」 とかつこんじゃいけないんだろうな 収束させたいみたいだし
いつもうるさいのはint派。 int mainに対して、戻り値どうでもいいからvoid mainにしろよwのようなレスはつかない。
unsigned char main()の環境もあるというのに…
mainってただの関数名なんだけど 戻り値をどうするかは呼出側の問題でしょ。
>>211 だからお前は分かっていないといわれるんだ
2ch で void main と書くのは自殺行為
215 :
815 :2010/03/26(金) 22:45:26
どうかお二人ともケンカしないでください…(ぺこり こんどから int main() って書きますから〜〜… もぅ、それでいいじゃないですか…(^_^/ぽんぽん
>>210 それを使うのはちょっと意味合いが・・・
ここらでfree論争に戻ろうぜ
815=816の自演だと思ってた 基数変換なんていう基本的なものに目を通す人は 例外なく初心者だから注意した方がいいね 脱したての方達に絡まれる可能性大 void main()の他に goto、scanf、fscanf、rand()%N 誰の目に触れるか分からないソースは避けた方が無難
getsもね
goto、malloc/free、void mainは定期的に盛り上がるね
rand()%N とgets には何があるの? 後学のために教えて
乱数のかたよりと、バッファオーバ
randのLSBには定期性が認められる場合がある getsはバッファオーバーランの危険性をはらんでおり、この関数を常に悪とする派もある
単独で終わる実行プログラムなら、戻り値なんていらないと思うけど スクリプトとかで呼ばれて、戻り値でエラー処理するなら必要かも そんな高度なことするのがここに何人いるやら
>>192 char ***v;
までなら実用的に使用したことがあります。シェルを作っていて、execv() に渡す引数を準備する場合でした。
さすがに4重のポインタは思い当たりません。
>>222-223 なるほど そうだね
乱数の偏りは、あれはあれで便利なんだけどね
ある程度決まった乱数(ってへんな言い方だけど)が欲しいときとか
世の中の事象ってわり偏ってるし
C言語の使用者のレベルがwww 上から下まで激しいと言うが、このスレはもう下ばっかりじゃねぇか。 これならP言語スレのがマシだろ。
高度ではないし、それを利用する人にとってはすごく大事だからだろう。 false && ls true && ls をやってみるといいたいことが分かるかもしれない
>>227 偏りではなく、規則性なんだ。この差は大きいよね?
某ゲームのサイコロ、自分は常に奇数、相手は常に偶数となるのはそれが理由だっけ?
C言語使いは、少し上達すると俺俺malloc/freeの実装にチャレンジするんだってね お前らも俺俺malloc/freeって作ったことあるよね
メモリプール、スレッドプールは腕試ししたくなる対象だな
>>205 ごめんなさいね。つい void main() てのをみると反応してしまったわけでして。
まあネタです、ネタ、ネタ。それが証拠に、こんなに荒れてしまったでしょ。釣り人としては大成果でした。
これにこりずにばんばんコードを書いて腕を上げてください。void main() なんてこだわることじゃあない。
(って私がいうか。)宿題スレでお待ちしております。
void main() (爆笑) はもうおしまい。
>>203 やるな
けど、わずか10分足らずでサンプルまでかけるとはやるな!
>>195 のポインタのポインタのポインタのポインタを云々と言ってる奴とは
一線を画してるな
押し付けするから、応用力がなくなるんだよ
>>227 偏りのある乱数を作りたいときは、大抵は思惑があるから
ライブラリ任せにせずに自分で思い通りに偏らせないか?
規則性な乱数(って言い方も変だけど)も役に立つことあるよな 小さい種さえ覚えとけば大きい規則的なデータが手に入るわけだから 最近はディスクスペースもでかいから、今ではあんまり役に立たないだろうけど
それはない
>>232 あるあるwww
なんか一生懸命考えて作ってもK&Rに全然勝てないのなwww
>>237 もちろん自分でも偏らせるんだけど人為的にやりすぎるじゃん
偏りの思惑のわからない偏ったデータが欲しいときがあったんで
>>242 だから偏りじゃなくて規則性が問題なんだって
>>240 まあ機能的に豪華にするみたいなことはよくやったな。
malloc()とcalloc()とrealloc()をひとまとめにして引数で自動的に処理振り分けるラッパーとかね。
247 :
デフォルトの名無しさん :2010/03/26(金) 23:18:37
#define A(index) if(index>sizeof(a))printf("aerror(%d,%d)",index,__LINE__);a[index] このマクロって何をやっているのでしょうか。
いいかげんにしろクソ野郎
>>245 なんでそんなこと聞くの?
統計とった結果から自動で傾向を調べるんだけど
実際にうまく行くかどうかを調べる時にデバック用データとして
人為的に作ったデータだと人間が思いつくことの範囲を超えられない
つまりうまく行くことがわかってることしか確認できないから
適当な統計データがわんさかあればそんな事必要ないんだろうけど
ポートピア連続殺人事件とかも容量の節約のために規則的な乱数(w)をそのまま音楽として流してて 単純に移植すると曲が変わっちゃうとかあったはず あれはプログラムのバイナリの適当なところだったかな
>>251 あとはドラクエなんかもそんな感じだったなたしか
ドルアーガのマップ生成はフロア番号のみに依存で、乱数は使ってないんだっけかな
>>253 だって詳しく言いたくねーもの
でも意味不明ってことはないだろ
推測できるだろプログラマなら
行があいてるところはつなげてよんじゃダメだよ
有効活用している事例をあげるのは雑談に過ぎず、それが問題を起こす危険性をはらんでいることを 認識せずに使っているのが問題なんだよ。 だから偏りだの規則性だのは些末なことです。
>>256 君のママじゃないんだから
独自の書き込み規約を押し付けられても分からんよw
>>251-252 の言うようなゲーム用途ならいいんだ。
逆にメリットになりえるからね。
249の用途はやはり意味不明だよ。
じゃ初期のドルアーガってエミュで遊ぶとマップ変わるの?って思ったけど エミュレータがrandのライブラリも真似てれば良いのか
>>254 いや、乱数の規則性を使ってる。
>>259 うん。逆に移植は面倒になっちゃう。というか、移植する時にはそのロジックを放棄してマップデータ持っちゃうだろうねw
>>258 >独自の書き込み規約を押し付けられても分からんよw
別に押し付けたんじゃなくてさ、なんで意味不明なのかな?
あ、こいつ俺の文章を空行のtころをつなげて読んでるのかなって思っただけ
だから書き込み規約ではないよ
詳しくは言いたくないから意味不明でも良いよ
そもそもなんでそんなこと訊くんだ?言いたくねーよって思ってるし
それでぼんやりしてる部分はあったかもね
262 :
247 :2010/03/27(土) 00:00:18
どなたかC言語にお詳しい方、
>>247 をよろしくお願いします。
>>262 配列aの要素サイズが1である場合、配列の要素を注意深く取得するマクロ
>>247 突っ込み待ちをしているマクロと言いたいところだが、
実際は範囲オーバーを検出しつつ配列に値を代入するのに使うんだろうな。
265 :
247 :2010/03/27(土) 00:07:05
>>263-264 なるほど。
ありがとうございます。
こういうコードを見るとなんか訳分からなくなります。
ああ、代入にも使えるのか。 ちなみに #define A(index) if(index>sizeof(a)/sizeof(a[0]))printf("aerror(%d,%d)",index,__LINE__);a[index] とすることで発生しているかもしれない問題を解決できるかもしれない
if(index>=sizeof(a)/sizeof(a[0])) か。連投すまん。
行末の a[index] は何してるの?
char a[5]; char hoge; hoge = A(3); A(5) = 'a';
271 :
268 :2010/03/27(土) 00:22:37
0x20の倍数で確保されます。最小サイズは0x20です。(1バイトって指定しても実際は20バイト使われちゃう) あと全体の大きさは0x1000までです。 一番最初の大元のメモリー領域はmallocで得てます。 mallocが使えない環境なら static P* pl; を static P[MPM*BBS]ってすれば、たぶんだいじょぶかもしれません。よくわかりませんがw
>>268 は
あの言葉を言って欲しくてワクテカしてるだろうから俺は言わない
>>272 それがvoid mainだとしたら見当違いだな
#include <stdio.h> #include <time.h> #include <time.h> void main(void){ char *(res[])={"void main(void)(藁)","int main(int argc,char **argv)はレガシー", "int派は糞","void派は高度なアプリ組んだ事ないだろ","void mainを馬鹿にするな", "プロセスの戻り値なんて使わねーよ","GetExitCodeって知ってる?","Windowsでは意味ねぇよ","古い人のやり方","0か1に決まってるからOK","カオスになるぞ","警告だけだからOK", "マニュアルでvoidって書けっていわれてる","警告だけだからOK","2^64もの状態どうやって管理するんだよ","intが仕様である証拠もってこいや","規格票ではint main",NULL}; NULL}; int index=-1; srand(time(NULL)); for(;;){ index++; if(res[index]==NULL)index=0; if( rand() & 32==0) printf("%s¥n",res[index]); } return;//0; }
君はもっと有意義に時間と労力を使ったほうがいいんじゃないか?
はははw 俺、int派だったけど、さすがに夜中にこんなの作ってるパワーないわwww
俺のレスが使われてない!く、くやしい!!
好きなのを使って良いんじゃないか char main(void)、char* main(void)、 void* main(void).... これらってコンパイルできるのか知らんが
俺はmainはintで書くけど別にvoidだって何だって良いよ。 使うCコンパイラのマニュアル読めってだけの話だろ。
君はなにもわかってないようだね
粘着うざすぎw
>>260 そういうのは規則性じゃなくて再現性っていうんだ
覚えとけドアホ
>>279 そういう態度がいけないんだよ。
戻り値を使わせる気が無いならとりあえず0返しとけ。
粘着うざすぎw
>>282 規則性と偏りを一緒くたにしてるやつを叩けよwww
前スレを見直してて、constとdefineの違いの質問があったのですが、 その中で↓の書き込みを見つけました。constは定数であるのにもかかわらず、デバッカで見る値とはなんでしょうか? 52 名前: デフォルトの名無しさん [sage] 投稿日: 2010/03/07(日) 10:55:25 defineはコンパイル時に置き換えてくれるだけ だからマクロとして使えるし、関数丸ごとdefineしてみるとか変なこともできる __LINE___や__TIME___みたいなコンパイル時に決まるやつもある 事項時はもうすでに置き換わっているのでaaaaとかって名前でdfineしてデバッカでaaaa探してもない constはメモリ上に固定でそいつがずっといるだけ つまりデバッカで値も見れる
TIFF形式の画像ファイルからピクセルデータを取得したいんですが 白黒2値画像で、MMR符号化(圧縮)されています。 MMR符号化を解読するソースなど教えてください。
ΩΩ Ω<な、なんだってー
292 :
163 :2010/03/27(土) 09:59:34
おいおい、それでいいのかよ
イーンダヨ! ↓
└→ω
>>293 普通の人なら、キーワードだけ教えてもらえば
あとはなんとかなるんだよ。
1から10まで教えてクンだとこうはいかないが。
A:「○○ってどうやるの?」 B:「△△」 A:「クスコ」 2chのあるべき姿ってこうじゃね?
>>296 間違ったキーワードを渡された事に関してはどう思ってる?
ハワイへ行くのに羽田空港へ案内されたようなもんだな
ぜんぜん平気
羽田でなんか問題があるんだろうか?
嘘を嘘と見抜けないと難しい ってのが2chのあるべき姿(キリッ)
どこの空港発はわからずに羽田に案内するのはダメだろ・・・
>>298 たとえキーワードが間違っていても、そこから
正解に続くキーワードへのとっかかりになる。
たぶん、
今って羽田からハワイに行く便あったっけ?
間違ってると色々つっこまれてるのに質問者が礼を言ってしめちゃったから、いいんだろう よく言うだろ?お前がそう思うんならそうなんだろお前ん中ではなと
>>298 間違ってりゃ再度質問しにくるか誰かが横槍入れるだろ
1対1でチャットしてんじゃないんだから
お前はゆとりか
だから横槍入ってんだろ お前は文盲か
>>308 間違ってるぜ(ニヤニヤ)
って態度にむかつくんだよ
>>310 なぜ誰も正解を出さずこんな結果になってるか、わかってないからむかつくんだろ
そういう態度に見えるのは、その人のレヴェルが低いからでしょうね。
つまり、間違いを間違いと指摘したら態度が悪いと逆切れされる そんな世の中じゃ
>>308 横槍は大三者が入れる者で当事者が入れたら横槍とは言わんのだよ君
第三者って言いたいのかな? 質問者、間違った解答をした人、そしてつっこみをした俺 へえ。俺は当事者なのか。どんな状態なら横槍を入れることができるんだろう。
代参者
どうやったら横槍を入れられるのか議論して遊ぼうぜ。
議論は遊びじゃないだろ。JK
みっともないですね
何このスレ… 聞きたいことあるんだけど、質問していいの??
いま忙しいから 「適当に話を合わせるスレ」 で聞いてください。
323 :
デフォルトの名無しさん :2010/03/27(土) 13:35:17
埋め
>>321 質問したければ黙って書けばいい
質問が無いから雑談やってる
雰囲気が嫌なら教えてgooでもどこでも行けばいい
いちいち聞くな
おまえらてしこしこLD書いている?
LD?
hello world と印字されてるだけじゃんw
ポケコンってCなの?
うるせえなおめえ! 俺はエッチしてえんだよ!
ggrks
>>331 まだまだですがこれから頑張って勉強して
まずはテトリスぐらい作れるようなりたいです!
>>331 ちゃんとC言語つかってコンパイルしました
なんの画像だよ…
>何処か間違っていますか? ×%dテス ○%dデス ギャグはさておき、エラーが出るの?
もしかしてインタプリタ?行番号がいるの?
iPhoneの無料アプリで撮ったんで広告が入っていますがポケコンの画面の写真です。
>>343 そこは直しました笑
エラーは30行にあるとでます。
構文規則の途中でソースプログラムが終了していると言う意味のエラーはがでます
10,20,30,40などの行番号はポケコン特有で必要らしいです
>>344 インタプリタといいますと?
初心者ですのでまったくわかりません
大変申し訳ないのですが自己解決しました(^_^;)
>>347 俺の知ってる範囲だとBASICとかは行番号込みのコードらった。
mainのとじ括弧 } がないからじゃないのか
>>350 そうでした笑
でもはじめ書き込んでコンパイルしたらエラーがでて、みてみたら消えてました
メモリのポインタは tibet にするといいよ。 free(tibet); これで、このソースは中国政府自らの手により検索規制され、 ソースのコピーをしばらくの間防ぐことが出来る。
スレの勢いが止んだな。 中国政府の検閲恐るべし
C言語では、多次元配列を使用することができるが、最高5次元配列までである。
(゚Д゚ )ハァ?
bcc32 でも 7次元が可能だった。なんで 5 までしかできないと思ったのですか?
馬鹿だから
>>358 そのキーワードでは釣れないですよ。せめて最近はやったやつくらいのパワーがないと、 void ma(略)
ふだん誰からも相手されないのに、ちょこっとちやほやされたからうれしかったんだろう 現実を見るようになれば去るよ
ところで、n次元配列の限界ってどのくらいなんだ?
書いてあるかは知らないが 書いてあっても「最低nまでは保証する事」としか書かれないよ
VC2008EEでは、intの512次元配列変数を宣言できたが、 1024次元はビルドが異常終了した。
pthread の話です。
サブスレッド内で malloc() した領域を pthread_exit() -> pthread_join() 経由で親スレッドでうけとった場合には
free() は必要でしょうか。
会員制(無料)でごめんなさい、
http://codezine.jp/article/detail/1892?p=3 の最後のコードです。これには free() はありません。
私の環境(cygwin/gcc) では、printf("%p")の値をみるかぎりpthread_exit() 前と pthread_join() 後では変化しておりません。
malloc() はスレッドセーフである、とのことですが、私はスレッドセーフの意味がよくわかっていません。
よろしくお願いいたします。
その「最低の保証」は5ではないよね?
1<n<1000 で動的にメモリを確保するプログラムをCで書け 制限時間 今から10分 できた奴はPGG
>>367 n がなにかきちんと定義してください。
>>367 int i;
for i=1 to 1000
malloc(i)
next
fot next wwww しかも1と1000を含んでるし
>>369 このようなアバウトなコードも解釈するコンパイラ希望
(1) printf関数は正常時には出力した文字数を返す。 (2) 浮動小数点型はfloat、double、long doubleの三つのサイズをもち、ANSI規格により、それぞれのサイズは規定されている。 (3) ポインタ変数をconst宣言することはできない。 (4) typedefはコンパイラで解釈され、#defineはプリプロセッサで解釈される。 (5) キャストは明示的に型変換することであり、ポインタをキャストすることも可能である。 (6) グローバル変数とローカル変数に同一の名前が使われたとき、両者のスコープがおよぶ箇所では、グローバル変数が優先される。 (7) 複数の論理演算子を使用した条件式において、真偽の判定は右から左の順に行われる。 (8) float型やdouble型に対して、ビット演算子を使うことはできない。 解答群 ア 正しい イ 誤り
宿題のスレに行けよ
>>365 コードは見てないけど、malloc()した領域はfree()する必要がある。ス
レッドの生死は関係ない。
プログラムが終了する直前であれば、OSにまかせてあえてfree()しない
という手もある。それはスレッドとは関係がない。
375 :
365 :2010/03/28(日) 00:19:01
$ cc -o test test.c test.c: In function ‘main’: test.c:4: warning: incompatible implicit declaration of built-in function ‘malloc’ test.c:4: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘void *’ $ ./test 140308488 $ cat test.c #include <stdio.h> int main() { printf("%d\n",malloc(1)); }
>>372 見栄張ってググらないで、試さないで、記憶だけで正直に回答します。
(1)知らない
(2)long double って使ったことない。はじめて聞いた。知らない。
(3)興味ない
(4)そんなきがする。#ついてるのはプリプロセッサな気がするだけ
(5)キャストって言葉がどこからどこまでなのかしらないけど P* p; int i=(int)p; なんてのは出来たきがする。警告が出たような出ないようなうろおぼえ。
(6)読みづらいので、かぶらないように注意してるので知らない。
たぶんローカルが優先されそうなきがする。わざわざ後に作るんだから優先させるだろうと。デニスリッチーもそう考えた気がする。なんとなく。
(7)知らない
(8)IEEE754(うろおぼえ)のdouble d; unsigned long long s=(d
>>63 )&0x01, q=(d
>>52 )&0x07FF, n=d&0x0000FFF...;
みたいに昔書いたような記憶がうっすらある。たぶんできるとおもう。(型変換したかもしれないし、しなかったかもしれないし、うろおぼえ)
全体的にうろおぼえですw
>>372 じゃあ俺もぐぐらずに
1はい
2規定されているのはcharが1バイトということだけ
3できる
4#で始まる行でコンパイラに影響を与えるのはpragmaぐらいしか知らない
5はい
6ローカルが優先
7左から右
8期待する動作をするかどうかは別にして、ビット演算子を使うことができない型はないと思う
$ ./test1 12345 6 $ cat test1.c #include <stdio.h> int main() { printf("%d\n",printf("12345\n")); }
>>372 ほれ
(1) イ:出力したバイト数を返す
(2) イ:サイズは大小関係 float <= double <= long double しか規定されていない
(3) イ:int * const p; のようにする
(4) ア
(5) ア:Cでは暗黙なものは全て「変換」。C++ではアップキャストという暗黙なキャストも存在する
(6) イ:ローカル変数が優先される
(7) イ:左から右
(8) ア
int main(void) { double d = 1.0; d << 1; printf("%f\n", d); return 0; } コンパイルエラーが出ます 残念でした
(3) イ:int * const p; のようにする これはイってことはできないの? それとも↑のようにするとできるの?ならアじゃねーの つかできたところで何に使うか俺にはさっぱり見当もつかないけど
>>383 (3) ポインタ変数をconst宣言することはできない。
~~~~~~~~~~
問題文ちゃんと読めよ
ああ、ほんとだごめんなさい
ワロス int main(void) { double d = 1.0; *((long long int *)&d) << 1; printf("%f\n", d); *((long long int *)&d) <<= 1; printf("%f\n", d); *((long long int *)&d) >>= 1; printf("%f\n", d); return 0; }
387 :
372 :2010/03/28(日) 01:53:02
(1) ア (2) イ (3) イ (4) ア (5) ア (6) イ (7) イ (8) ア でした
>>387 ダウト
(1) イ 文字数じゃなくてバイト数を返す
掛け算のオーバーフローを検知するにはどうしたらいいでしょうか もしくはできないんでしょうか 型はsigned intです
>>389 Cじゃムリ。十分な大きさの型を用意するしかない。
>>389 a * b > INT_MAX とは書けないので、
a > INT_MAX / b と書けばいい。
>>389 割り算して元に戻ればオーバーフローしていない
ような気がする。
>>392 Cの規格上では、符号付き整数のオーバーフロー時の挙動について
何も規定されていない。プログラムが停止する可能性すら否定できない
だからオーバーフローさせた時点で失敗
bool mick(int a,int b){Ireturn INT_MAX/a<=b;}
無理矢理 asm ブロック使う by VC ヽ( ´ー`)ノ #include<stdio.h> int main() { signed int i,j,k; scanf("%d",&i); scanf("%d",&j); _asm { mov k,0 mov eax,i imul j jnc add1 mov k,1 add1: }; puts((k==0)?"not OF":"OF"); return 0; }
setcも知らないアホは消えろ
397 :
372 :2010/03/28(日) 10:53:41
>>388 あっ本当だ
サーティファイの問題なんだけど、大したことないね
kyarii_oobaaはねーよw
プログラムでsetlocale無しに日本語をprintfするのは正しいのでしょうか? WindowsでUnicodeビルドだと、最初にsetlocale(LC_CTYPE,"")しておかないと文字化け してしまうのですが、Unicodeビルドでなくてもする必要があるのかなと思ったのです。
>>395 それはキャリーフラグ。今はオーバーフローが話題。
doubleにビット演算子を使うことができないって言うのはどういうことですか?
>>400 問題は無い。というか、問題にされても困る。
ただし、SJIS てめーはダメだ
>>401-402 何かチガウノ?初めて asm ブロック使って喜んでいる俺に正解を優しく教えれヽ( ´ー`)ノ
>>403 字面通りでは?
出来たことがあるとか、出来るべきとか思ってるならそれを書け
できても良いよな Cなんだからそんな細かいチェックいらんって思う できたからって何に使えるかは知らんけど
たんなるビットのコンテナとしてなら整数型で十分だし 浮動小数点数で計算に代用可能なビット操作はないから あっても意味がないかと
>>407 そもそもFPUにビット演算命令が実装されておらず、大した用途も無いのだから、
わざわざC処理系にそれをサポートさせるのは無駄なコストなのです。
意味なくても、あっても良いよな あえてそんなチェック無駄じゃんと思ったけど あえて止めてるんじゃなくてコプロレベルまで行く話なのか、なるほどねぇ 最近、ここは揉め事が多いけど勉強になることも多いなぁ (まったく仕事には役立たないけど)
>>406 最上位ビットを見てみるとか、できても別にいいんじゃないの?
最上位ビットが見れたらそんなにうれしいか
>>409 FPUを持ち出す時点で……
というのはさておき、ビット操作できるとfabs()の実装が超簡単になるよ。
>>413 最上位ビットを見るだけで、負の値かそれ以外かが判る。
正、NaNと0と正の値の区別はできない。
うれしいとかじゃなくて、なぜ制限がかかっているのかが分からないという話なんだが。 内部表現に依存し、かつコードから内部表現を知ることができないため、 そのようなコードを許していないとかなんかそういうのないの?
確かに余りに実装に依存し過ぎるから言語仕様とはし難い事情があったんだろうな。 例えば、>414->415はIEEE754限定だ。しかも、double値を整数値とは違う方法で管理する環境だと ビット演算を仕様に入れると非常に厄介な実装をする羽目になる。
左シフトした時に内部の全ビットを1ビット左にずらす、それがそんなに厄介かな。 その結果はどう使っていいのか分からないけど、できなくしてるのは何でだろ。 意味がないから制限をかけたのなら、コード中の意味を成さないステートメントは すべてコンパイルエラーとなるべきだろうし。
>>418 だから浮動小数点レジスタの中身をシフトする回路が実装されていないという話。
もちろん、いったんメモリへ書き出してから汎用レジスタを介してシフトすれば可能だが、
それは *(unsigned long long*)&d <<= 1 などと書けば済む。
操作に大した意味もないのに実装するハメになる コンパイラメーカーの事も考えてあげてください
>>419 なるほど。&ができないのも回路が実装されていないから?
キャストすると汎用レジスタを経由するというのも勉強になった。
実用上ほとんど必要がない 符号ビット、指数部、仮数部に分解したい、 各ビットがどうなってるか走査したいなど どうしてもビット演算したいようなレアケースでも 一旦整数型を経由すれば可能だし、 わざわざそんなケースを考慮して実装する理由も無い コンパイラ製作において実装の手間が増える、 小数のビット演算はまず使われず、大抵はミス(バグ)であるが、 そのコードがコンパイルエラーにならなくなってしまう、 など、デメリットの方が遥かに大きい。
>>422 勘違いをしているらしい点を補足。
キャストすると汎用レジスタを経由するのではない。
>419のキャストは見做し整数としてビット演算している。
>419のコードを模式的に書けばこうなる。
・dのポインタからアドレスを取得
・そのアドレスのポイント先をunsigned long longと見做す。
・対象メモリ空間に対して直接ビットシフトできるMPUならそうする。
・そうでないMPUなら一旦汎用レジスタにロードし、ビットシフトした後にストアする。
コンパイラの最適化能力が高ければ、前後のコードに問題がない限り
メモリを一切介さずに汎用レジスタのみで処理するかもしれない。
# x86でもSSEを使えればそうできる。
今C言語を入門書を使って学習しているんですが、C言語を使ってアプリケーションを作ったり、 もっと応用ができるようになるためには入門書が終わったらどんな勉強をするべきでしょうか。
とりあえず作ってみる 愚直でいいから その後何か応用向けの本を読んでみる そして自分のコードと比較してどこが優れてるか理解する
C言語で人様に公開できるようなソフトを書けるようになるには10年はかかる VBなりVC#でおもちゃをつくるなら1,2ヶ月でできるようになるからそっちにしとけ。
>>430 10年かかるってのは分かるなあ
初心者のうちは作ることだけで精一杯なんだけど、
プログラムってバグが無いだけじゃなく、性能とかメンテ性とか、
環境依存が少ないとか、コードが見やすいとか、セキュリティとか
色んなベクトルがあって、それらを踏まえて作らなければならないんだよね
VBやC#でも同じだとは思うけど
日本語と英語が混じった文字列aから最後の改行を削除したいのですが、 BYTE a[128]; BYTE n; n = _mbslen(a); a[n-1] = '\0'; とやってもうまく行きませんでした。 nが日本語でも英語でも1文字は1としてカウントしてないっぽいです。 どうかご教示を。
>>433 nには文字数が入るが、a[n-1]はn-1文字目ではなく、n-1バイト目を指す。
nにバイト数を入れるため、n=strlen(a)にすべきでは。
aがunsigned charなため、strlenだとうまく行かなかったのですよ。
文字コードに0があるんだからutf16じゃね?
const char*にキャストすれば
>>440 こんな初歩的な質問するやつがUTF-16使うわけがないだろ ってこと?
>>433 「最後の改行を削除したい」のなら、最後の文字と決め打ちにしちゃ拙いんじゃないか?
例えば、テキストファイルをfgets()で読み込んでいるのなら最後の行には改行文字はない場合もあるぞ。
>>442 2バイト文字も1として数えてるからずれるのであって
0が含まれてるからずれてるのではない
strlen が使えないから途中に '\0' が含まれていると推測
何でそうなるんだw unsigned charだから型の不一致でコンパイルエラーになっただけだろ
うまくいかないってのはそういう意味か!
うぁはは、考え過ぎだ。
VCのmbs系の関数使ってる時点でSJISなのは明白っしょ
文字列の長さが0だった時にどうなるよそれ
どうなるって?
n = 0; a[n-1] = '\0'; となるよ
だな
そんなことはどうでもいい。 問題は文字コードだ、という流れだろ
文字コードを使う決まりとかないの?
_mbsrchr で改行コード見つければよくね
>>458 それの有りと無しで試してみれば良いだろう
>>458 それを消すと画面に出力されない環境もある
有でも無でも変化ありませんでしたが、意味あるですか?
改行されるかされないかだよ 結果変わってるはずだよ
出力先が連続紙のプリンタなら
>>460 の言うとおり印字はしたものの改行しないとそれが見えないとかあるかも
ああ、\nの位置を変えてみると良いよ。文中とかにね
>>463 printf() の行を後ろにもうひとつ足してみろ。
いつも思うが、このレベルの質問してる奴って、何を参考にしてるわけ? ネット教材の方がマシじゃね?
printf("\n\n\n\n\n\n"); とかやってみればわかる
>>463 コンソールで実行して、プログラムが文字を出力して終了すると
次のコマンドの入力待ちになるけど、\nなしだと、コマンドを入力する
カーソルが次の行に行かずに、出力した文字の後ろで点滅してたり
することがある。
>>467 たぶん、宿題とかでいやでいやでしょうがなくて、ネットで時間かけて調べるとかしたくないんだよ
だれしもが、君みたいに暇さえあればプログラムの事を考えていられるわけではない
>>470 そうかもしれんけど、そのワリには\nの意味とか、
細かいことを気にするんだな。
改行って事はわかるのですが、 なぜ例のあそこに\nを入れたのかがわからないのです
改行しないと次の文字書くときにくっついちゃうじゃん くっついてもコマンド入力には問題ないんだけど たんなる習慣だと思う
上のほうで触れてる人もいるけど 結果をプリンタに印字してた頃からの習慣だと思う
windowsのコンソールだとなくても問題ないけど、 unix系は、ないとキモイことになるな。
じゃ俺がタイプライター時代の話から・・
みなさんのおかででうまくいきました! unsigned char *ptr, cr = '\n'; ptr = _mbsrchr(a, cr); a[ptr-a] = '\0';
>>480 if(ptr) *ptr='\0';
にすればいいのに
改行が無かった場合の事も考えてやれよー
>>461 ,462
フラッシュされるかではなくて。
zshでやってみたらいいたいことが分かると思う。
で、それはバグとかじゃなくてunix系における行の扱いを厳密にした結果。
プログラムが終了するときに出力が全部フラッシュされると 昔は思い込んでたもんだ
>>483-484 少なくともC言語の範囲内では exit() の呼び出しおよびそれと同じ効果である
main() の終了時には全部のストリームがフラッシュされることになってるんだけど、
「unix系における行の扱い」とか何のこと言ってるの?
また、重箱の隅をつついてほとんどの場合正しいことをめったにないケースを挙げて得意になって指摘する人が来たよ
天才ハッカーは重箱の隅を突いてだな
>>486 環境限定って最初に書いてるから問題ないでしょ
それに、フラッシュされるかどうかは関係ないって
>>483 が書いてるのにフラッシュされることをアピールしてもしょうがない
>>490 フラッシュされるかどうかと画面に表示されるかどうかが関係ないの?なんで?
493 :
491 :2010/03/29(月) 00:32:05
プロンプトを出力する時に\rされて、出力されても消えちゃうことがあるよということだと思う。 それがunix的にどうとかいうのはわかんない
494 :
491 :2010/03/29(月) 00:35:37
ファイルの最終行はEOFのみでなければならない、というルールが 何かであったのを思い出したけど今回のと関係あるかな?
プロンプトにCLS入れてたら改行してたって画面に表示されないこともあるね。くだらない。
それが標準設定になっているシェルがあるなら、ね
fgetsとかが改行ごとのタイミングで処理されるのと関係あったりすんの? getchって環境依存であってる?
>>490 ハッカー?
誰がそんな話してんだよw
論点すり替えんなよ
イミフ
>>496 じゃあ標準でzshの環境がどれだけあるんだ。
くだらないことぐだぐだぬかすな。
標準とは最初に提供しているだけでシステム管理者の都合次第で可変であるべき。 決して押しつけの標準であってはならない。
なんで
>>483 は
「zsh みたいにプロンプトに CR が入ってると見えなくなることもあるよ」
といわずにあんな言い方をしたんだろうか?
504 :
デフォルトの名無しさん :2010/03/29(月) 07:10:47
C言語でerror C4028が出ます。 formal parameter 3 different from declarationです。 しかし、そこの行を見ると宣言どおりの仮引数のとおりに実引数を渡しています。 関数が仮引数2つで宣言されており、そこに渡す型も間違えずにちゃんと実引数を渡しているのですが、 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ なぜか、上記のように「3番目の引数が違う!」とエラーがでます。 仮引数がもともと2つしかないのに、なぜ存在しない3番目の引数についてエラーがでるのでしょうか? 原因わかるかたよろしくお願いします。
505 :
デフォルトの名無しさん :2010/03/29(月) 07:17:11
ちょっと自分で試行錯誤した結果、補足です。 その関数は引数2つをもつのですが、1つ目の引数にはコールバック関数を指定します。 自作したコールバック関数をセットしたのですが、そのコールバック関数は引数を3つもっており、 なぜかそこでエラーがでている感じです。コールバック関数の引数を無理やり4つにすると、エラーがでずに正常にコンパイルできます。 いったいどういう現象なんでしょうか?これ
506 :
デフォルトの名無しさん :2010/03/29(月) 07:24:34
ていうか、コールバック関数の場合、そっちが先にエラーになるんですね… なんだろう…、まあ解決したんで放置でいいです
>>503 そういう、人いるじゃん、質問とかしてもダイレクトに答えずに
逆説的な質問でかえすとか
ミスを指摘するときでもはっきり言えばいいのに質問で言ってくる人とか
ろくな知識もないアホにケチつけられたら厭味の一つも言いたくなるだろ。
これからは?
^Z
EOFで無ければならない。というのはあったね。 パソコン通信の頃。 通信中に途切れたら途中で終わったのか解らないし EOFを見て通信を切断するなんて事ができなくなるじゃん。
>>517 それはEOFコードだろ。それなら昔からあるし、今もある。
だから
EOF文字
>>513 じゃね?
EOFコードは0x1a
昔は、0x1a以降を読み込まない環境があったなぁ
まともなテキストエディタならEOFを追加する、しないの選択オプションが設定できるだろ。
Emacs も vim もまともなエディタじゃないから。
うむ。エディタじゃなくて思想だな。
今時、保存時に暗黙にEOFを追加するなんて阿呆なエディタなんかあるのか?
ああ、今日もまたCプログラマたちが細けえことでもめている
NOT プログラマ BUT ヲタ
>>519 じゃなくて「今は」とか言い出した奴がアホなだけだろ。
昔あったらんなら今もあるし。昔ないんだったら今もない。
で、そういうやり取りもわってないお前もアホだわ。
> 昔あったらんなら今もあるし。昔ないんだったら今もない。 その理論はおかしいw
>>529 理論でなく、現実のことを言ってるんだ。
そもそも
>>510 がアホなこと言ってるから、それを否定しただけ。
これが正しいかどうかなんだよ。
昔あったが今はない→幸か不幸か絶滅した 昔ないなら今もない→さすがにそれはちょっと
>>531 >昔あったが今はない→幸か不幸か絶滅した
だとしたら何が全滅したの?^Zなら今もあるだろ。
>昔ないなら今もない→さすがにそれはちょっと
意味不明。
具体的に昔あって今ない物って何なの?
そんな物ないだろってこと。あるなら具体的に言えばいいのに。
>昔ないなら今もない おいおい
>昔ないなら今もない ほほう
>昔ないなら今もない ふがっふふん
> 昔あったらんなら今もあるし。昔ないんだったら今もない。 オツムがあまり良くないという自覚が少しでもあるなら 下手な喩えは金輪際やめたほうがいい そういう前提でしか見てもらえなくなるので つまらん事でバカにされるのも辛いだろ
emacsって日本語配列のキーボードじゃ無理があるよね ideだとvimのキーバインドが無いのが痛い
>昔ないなら今もない たりらりらー
>>536 >>510 「EOFという文字はありません、今は。」
ということに対して、
EOF という文字(0x1a や ^Zで表現される終了コードとしての文字)は今もあるし、
そういう意味でなく、EOF は文字でないというのなら、それは昔も今も同じこと。
どっちの主張かわからんが、いずれにしても
>>510 の認識は間違っている。
と言ってるだけだろ。どうしてこんな簡単な理屈がわからないんだ。
ちょっと頭悪すぎない?
春休みなんだから、許してやれ。
>>532 お前頭悪いだろw
変な想像働かせないで素直に読めよw
>>539 そういう言い方では厨房には通じないよ。
ちょっとじゃなく相当悪いんだよ。
今はゆとり教育なんだからね。
教育関係無いレベル
>>543 わかんないよ
> 昔あったらんなら今もあるし。昔ないんだったら今もない。
こんな喩えをする人の脳内構造は分からないからね
>>545 内容も理解せずトンチンカンなレスばっかりつけるのやめようね。
見苦しいだけだから。
>>545 そりゃ他人の脳内はわからんだろうけど、
簡単な日本語ぐらいは理解しようや。
>>532 プテラノドンとか今はいないよ
その時代に人間はいなかったから今もいないというのはちょっと
でた、中学生の屁理屈w
>>548 君は何の話してるの?EOFと関係ないじゃん。
おじさん達も暇だね
「EOF」が昔ないなら今もない ってのの主語を省略したんだよな それで、話の流れを見ない人たちが >昔ないなら今もない の文だけ読んで なんだそれプゲラwの大合唱が始まった それにたいしてプテラノドンとか人間とか、もう馬鹿すぎ ちなみにEOFに関しては俺はわからんから上記の発言の人を肯定してるわけではない まぬけなレスだって指摘なだけ
頭おかしいんじゃないの? EOFに限らず > 昔あったらんなら今もあるし。昔ないんだったら今もない。 こんなものは存在しません。 その存在しないものを喩えるバカがいたら デカルトからも突っ込み入るw
>>552 「EOF」が昔ないなら今もない
という主語があったとしてもこれほど間の抜けた理論はなかろ
>昔ないんだったら今もない。 名言だな
それに当てはまる主語をがんばって見つけないとな
か、彼女の事か?
おさななじみ。。。
全部書かないをわからないのもどうかと思うが、 全部書いてやっても理解できないのか、引込みがつかなくてなってるのか、 どっちにしても情け無いやつだな。
とりあえずEOFは昔からあって、今もあるということだね。
「彼女」とか?w
学生時代の楽しい思い出とか
答えは「希望」でした。
関係ありそうでなさそうなんだけど、 人が想像可能な事象はすべて実現可能である、というのは誰の言葉だっけ?
規格の話はANSIスレ立ててそっちでやれクズども。 ちなみにANSIスレは昔あったが今はない。
ガチスレでいいんじゃないの?
よく階段で1階と2階とどっちでもスイッチのON・OFFできるやつがありますが 3階4階とか階数が増えてもどこでもON/OFFするにはどうするんでしょうか? マイコンとか使ってプログラムを書かないとだめですかね どんな感じのプログラムになるのでしょうか?
>>572 スイッチが入るたびにON/OFFを切り替えればいい。スイッチの数が何個あっても同じ。
階段の仕組みは 3路スイッチ、4路スイッチでぐぐれば出てくるけど、実際の工事となると免許が必要です このスレで聞いてるのだから実際に線をひっぱってるわけじゃないとおもうが
誤爆にもかかわらず回答どうもです 感謝します
うおお4路スイッチすげえ!! 2階の上下でってのは知ってたしすぐ思い出せたけど、4路すげええ!!!
工事には免許が必要ですから、素人がつけるのは絶対にやめましょう
>>570-571 Cの規格に関係するような話、あったっけ?
ASCIIのEOFが云々、とか話したら出直せ言われると思う。
>>578 ASCIIはANSI規格だボケ
おまえは出直さなくていいから戻ってくんな
それと自演厨も戻ってくんな
ANSI全般って広すぎない?
584 :
510 :2010/03/29(月) 23:37:18
>>515 >>517 に加えて。
CP/M に影響された MS-DOS のクックドモードでは ^Z があると、その後は読み込まない仕様です。^Z がすなわちEOFにあたります。
一方、^Z があるからといって読み込みをやめることはないモードもあります。
昔話ですけれどもね。
最近の若いもんは昔話には興味がないとみえますね。
>>576 仕組みは簡単、両端に3極スイッチをおき、間に6極の入れ替えスイッチをおけばいいのです。
仕組みは簡単とはいえ電力、電圧や切れたときの考慮などから多くの4路は使えない ましてや家庭にあるようなより線なんかじゃスイッチに繋げられないだろうから知識を持った人じゃないと危険
6極?
リレー2個の保持回路
>>586 知識だけじゃなく資格を持ってないと駄目だよ
#define AAA と #undef AAA に関しての質問です。
c = a / b と d = a % b の計算を、
A : div_mul100M() ← 普通に直接 c=a/b; d=a%b; を1億回計算
B : _sid100M() ← インラインアセンブラによる c=a/b; d=a%b を、インライン関数 _sid() として、それを1億回呼び出す
C : sid100M() ← _sid() の#define関数版 sid() を、1億回呼び出す
http://codepad.org/R2wb4QpQ これを gcc -o xxx xxx.c -pg として作った ./xxx を実行した後、gprof xxx で各関数の処理時間を見ると
div_mul100M() は 0.48秒、_sid100M()は1秒、sid100M()は0.29秒でした。
せっかくインラインアセンブラで組んでも、それを関数でパックしたら、直接c=a/b;d=a%b;と書くよりも遅くなってしまうようです。
だからインラインアセンブラは#define関数として定義したいのですが、以下のように
http://codepad.org/RZ4XjyNu たとえば #define関数 sid() は、定義内で __SID_LOOP_END__: などのラベルを定義してるので、
一つのソースファイル中で一ヶ所からしか呼べなくなってしまうので困ってます。 (インライン関数版の _sid() なら複数箇所で呼べる)
インライン関数で組めば、ラベルの問題にそれほど悩まされずにすみますが、遅いです。(本末転倒
#define関数によるインラインアセンブラ内で、定義したラベルを局所的(#define関数内だけで通用するラベル)にする方法って
Cの文法に用意されてませんか? たとえば #undef を #define関数の定義中には書けませんが、それに近いニュアンスの方法など…
なにか#define関数でインラインアセンブラを書く上での、ウルテク的なものをご教授くだされば高栄です。
##
N階の場合2^(N-1)並列二分岐スイッチを各階に配置 各極の階間短絡を上手く選ぶ(ある一つの状態の個数が奇数個) 電力線はこれらを合流させたものを改めて各階に並列分配した ものになる。
n階ならn入力のxorでいいじゃん
594 :
590 :2010/03/30(火) 00:52:15
>>591 ありがとうございました。#define中で#undef できました。
http://codepad.org/oJln8V0J ただ、どうやら#undef しても思ったような動きはしてくれないみたいでした。
もしかしたら goto文のラベル的なものだと思うのですが、Cのソースファイル中に書いたラベルを、解除する方法ってありますか?
たとえば、
A:
goto A;
のラベルA:を、どこか別の場所で del A:; って書くことで、ソース中の以前のラベルA: が消えて、delA:;した場所が新たなA:になるようなことをしたいです。
こんなイメージしてます… del X:; はラベルX:の置き換え、del0 X:;はラベルX:を「以前に定義されてたXを解除したので、ここ以降からX:を検索してください」という意味。 main(){ int i,j; A: B: i=0; del0 B:; // 現在定義されてるB:を"再"未定義にする del A:; // A:の場所をここ再設定する if(i++>10) goto B; // B:は"再"未定義されてるので、直近の"del0 B:;以降"からB:を検索する goto A; B: // 新たにB:を定義 i=0; del0 B:; del A:; if(i++>10)goto B; goto A; B: i=0; del0 B:; del A:; if(i++>10)goto B; goto A; B: i=0; del0 B:; del A:; if(i++>10)goto B; goto A; B: //並べられる } 無さそうですね…
MasterState=POWER_OFF; for(;;){ while( !SwitchStateChanged) sleep(100);//100ms毎にスイッチ状態をチェック MasterState=(getParityOfSwitchState() % 2 ==0)?POWER_OFF:POWER_ON; }
なんでC言語スレで規格の話しちゃいけないの?
ゲーム作りをしています。とある本に 「無限ループの中で変数を宣言する場合、staticを付けた方が良い」と書かれていました。 なぜでしょうか?
根拠の無いアドバイスなんて気にすんな
>>598 そんな質問する奴が、ゲーム作り?
どんなゲームか興味津々灘
601 :
595 :2010/03/30(火) 01:57:03
ちょっと思ったんですけど、ファンタジーの話ですけど、 もしもプログラム中で複数のラベルAが許可されてて、 goto A;によって、処理が複数並列化して、さまざまなラベル A:に飛んで実行をつづける。 ラベル Aは、ラベル A 自身で、自分をラベル B などに設定しなおせる。 del A:toB:;みたいな感じで。 つまり、”呼ばれる側”が、自分自身の”ラベルを自分で自由にできる”ならば、”呼ぶ呼ばない”の決定権は、通常のプログラムだと呼び出しがわのみにあるけど、 呼ばれ側が勝手に自由に決めることもできる。 ので、たとえばラベルAの他に、全然関係ないラベル Z: をポンと自分自身の中に設定して、 まったく予想もしないようなところから呼び出される、ってことが起こりうるので思いしろそうだと思いました。 とくに何がしたいってわけじゃなくて、単に「予想外のことがおこりそうでおもしろそうだ」ってだけですw 個々の演算単位が、それぞれ自分勝手に外とのインターフェース(ラベル)を変化させて、 プログラマーがまったく予想もしないようなところ同士が繋がって、予想外の演算結果をいくつも出すような、そんなイメージです。 function f0(){ A: } function f1(){ A: } function f2(){ A:} ..... function x(){ goto A: } main(){ x(); } すると、複数の f() が並列で呼び出されて、個々のプロセスを勝手にはじめます。 で、もしも function f1(){ del A:toB:; } として、 もしくはラベルAを残したまま 新たにラベルB:を作るなどして、 f1() がラベルをBを持った瞬間、まったく別のプロセスとして実行されてた、たとえば function g(){ goto B; }などの新たなプロセス分岐先の 候補として f1() がポッと実行されるようになる。 こういうことで、予想外の、なにかおもしろい偶然がおこらないだろうか…と、漠然と思いつきました。 すぐ無限ループになりそうですが…w すみませんCと関係なくて。失礼しました。
>>598 C++ならばループするしないに関わらず任意のブロックで変数を
宣言できる。ループの場合でも変数がautoの場合は、作成/廃棄
がループの回数分繰り返されるのでパフォーマンスに影響を与える
ことがある(いつもではない)
staticにするとマルチスレッドにしたくなった時とか再帰呼び出し
をしたくなった時とかに困るかも
作成/廃棄をループ回数繰り返すようなコンパイラなんてあんのかよw
え。じゃいつ廃棄されるんですか
プログラム終了時
どうでもいい話だけど、Cellとか浮動小数点演算に長けているCPUって、 整数より浮動小数点を使ったほうが演算が早かったりするのかな
Cellはうんこ。専用のSIMD命令を使えば処理は早くなるけど面倒。 Cプログラマがアセンブラを書くような感覚。
>>603 最適化をするコンパイラが多いが、ゲーム等では
最適化をされると迷惑な場合も多いので
(ゲームの場合、高速化を追求する部分も多いが
タイミングコントロールの為の時間つぶしの部分
も結構多く、強い最適化をされると困ることもあ
る)
最適化機能を外してコンパイルする場合も多い。
>>604 最後のループを出た時点で
直近の}の時点じゃないんだ。。
611 :
デフォルトの名無しさん :2010/03/30(火) 05:00:08
Cでdisp(a)とは、どういう意味になるんでしょうか?
Microdoft Visual C++ 6.0で C言語の勉強はできるでしょうか? まず起動のし方すら分からないですが・・・。
>>609 それvolatileでどうにかならんの?
あれは省略を防止するだけ?
へぼがつくってるだけでしょ
>>611 disp() に特に特別の意味はないような気がします。
ソース中に disp() を定義しているようなところはありませんか?
>>608 CELLの画像デコード処理はとんでもなく高速だったぞ
>>612 Cはもちろんコンパイルできるし、的確なエラーや警告を出してくれる
ただそれを使って勉強というのはおかしい。C言語の勉強はC言語の良書やHPを使ってするもの。
おかしくはねーだろ 教科書や教師だけでなく、ノートや鉛筆だって勉強に使うという表現はただしい
この上無くどーでもいい話だろソレ
CのインタプリタでGUIが作成できるやつはありますか? Tcl/tk見たいな感じで
621 :
620 :2010/03/30(火) 07:06:35
言い忘れましたWindows環境です
>>617 本など見なくてもインターネットに腐るほど資料が満載
へえ
>>620 すべての言語はインタプリタもコンパイラでもどっちもある。
でも、名前はしらん
ふーん
>>622 Hpなんてどこも、同じような程度のところまでしか書いていない。
Cだと、精精、構造体の配列なりリストなりを作成するくらいまで?
そのあとのCらしい、LinuxカーネルハックやWinDDKでのドライバ作成なんてのは
ほとんどない
>>616 論点がずれている。>608は「処理は早く」なるとした上で「面倒」だとしている。
# それには私も同意。
>>612 今ならVisualStudioの2005だか2008だから無料で入手できるからそちらを使えば?
VC++6なんて制約多すぎるよ。
>>609 最適化を切るなんて信じられない。
最適化が迷惑なら、その部分だけ最適化なしでコンパイルすればいいので、
「コンパイルする場合も多い」とは思えない。
>>590 inline指定は最適化しない限り無視するコンパイラが多いと思う。
そもそも、プロファイラを使う時点で正しい処理時間は得られない。
最適化した状態できちんと処理時間を測るべき。
測る手段は、処理の前後でgettimeofday()でも使えばいい。
より厳密にはrdtscを使うべきだが、そこまでは要らないと思う。
628 :
デフォルトの名無しさん :2010/03/30(火) 09:03:42
しっかりあんじゃん w
>>628 1〜9行目で disp() という関数が定義されており、
その関数を呼び出している。
disp(a) の a はその引数。
関数と引数の意味ぐらいは自分で勉強しよう。
631 :
デフォルトの名無しさん :2010/03/30(火) 09:14:45
>>609 最適化で消えるようなコードでタイミングコントロールとかダメすぎる。
>>632 自分の開発機以外で実行するとタイミングが合わなくなるプログラムだよ、笑えるじゃないか。
まぁどうせ春休みの連中だからw
>>628 #include <stdio.h>
void disp(int num){
int i=8; while(i-->0){ putchar( ((num>>i)&1) + '0' ); }
putchar('\n');
}
void main(){
int a=0x56;
disp(a);
{
int s=a, n; a=0;
int i=8; while(i-->0){ n=(s>>i)&1; a=(a>>n)|(n<<7);}
}
disp(a);
}
if文消すパズル遊び〜(^_^ うごかないかも…
ゲームでも普通、画面のVシンクなりそれに類するタイマーにあわせるから (そこで待つから) 次のやつが来るまでに処理が終わっているのが前提であって 処理をあわせるために最適化をしないとかないよ たとえばガチガチの最適化はなんかバグるからしないでおくべ、とかはあるけど
gcc -fno-strict-aliasing とか付けてあるプログラムはよく見るな。 新規で書くならいいかげんにそんなもん付けずに動くコードを書けと思うが。
ほとんどの場合は、コンパイラのオプティマイザのバグじゃなくて、元からあったバグが最適化の影響で顕在化しただけ。
WindowsのDirectXは画面書き換えだけに傾倒する傾向があるからな 画面書き換えだけならば、確かにタイミングなんてハードウェアと ドライバ(DirectX)が合わせてくれるから、画面情報を描くことに 専念すれば良い。そこではコンパイラの最適化はありがたい存在 で、コードの美しさ(最適化とは引き換えになる)を少しでも 損なわなくて済む。 しかしキーボード応答の部分はそうとも限らないね
>>638 > しかしキーボード応答の部分はそうとも限らないね
え?なんで?
キリッ
普通ウインドウズのゲーム作る場合 画面上の押しボタンとかでなければ シビアなゲームならイベント使わないでキーは自分でスキャンしに行く コンパイラで最適化を止めるとなんでキーボード応答が良くなる? そもそも実行速度にばらつきの多いWindowsで最適化だとタイミングがずれるとか話が変すぎ サターンとかスーファミでタイミング取らないとキーが取れないとかあったけど それでもキー見るときに待ち時間は明示してタイミングとるんであって 最適化とかしても待ち時間(最適化されちゃって)が消えたりはしない
>コードの美しさ(最適化とは引き換えになる) こいつは最適化するとコードが変化すると思ってるのか? ま、出てくるバイナリのことだと思うけど コンパイラが出したバイナリが最適化しなければ人間が見ても美しいものだと思ってるのか? みてみりゃわかるけど(今時のコンパイラだとワケワカランから古いの探してきて) コンパイラが機械的に出すものに美しさなんてないよな
>>642 > こいつは最適化するとコードが変化すると思ってるのか?
そんな妙な解釈してるのお前だけだよ
コードジェネレータが最適化をしないと ソースコード上で人が最適化をしなければ ならない(出てくるバイナリコードダンプを 見ながら試行錯誤でやる徒労な作業)ことがある ソースコードの可読性は下がるは、バグを 誘発するわでとてもじゃないが勧められる作業じゃ ないがハードウェア周辺のコードでは どちらみちコードの可読性など高が知れてるんで (暗号的なマジックナンバーが多いし雑多な個性の 調停が多く論理的ではなく妥協的なだけなので 奇麗に書いても理解など容易ではない) やると効果がある場合がある(った)。 そういう作業経験者はコードジェネレータは最適化 などせず機械的に翻訳してくれれば良いという人(だった) つまりCを高級アセンブラとして使う人々
そんな環境のゲームってなくね?
iphone とか固定機種をターゲットにしてるならアリ
>>645 >つまりCを高級アセンブラとして使う人々
昔は普通に __asm を使ってインラインですからね。
iphoneで最適化するとキーが取れない??? つかアレにキーなくね?
Hello world
要するに 「ゲームとかで」って言っちゃったけどそれはふかしで でも仕事によっては(特定の機械の制御とか)で人間が最適化やタイミング調整する必要があったりするから へんにコンパイラに最適化されると出てきたバイナリの可読性も落ちるし、タイミングも狂う だからコンパイラの最適化やらない場合もあるよ ってことで良い?
>>652 良くない。
コンパイラの最適化で動かなくなるようなプログラムしか書けないやつはバカ。
まーた今日もCオタクたちが どうでもいい細けえことでもめてるよww
>>653 常に何らかのタイマーが利用可能なわけじゃないぞ
バカっていうやつがry
C言語なら俺に聞け(キリッ スレなんだから当然だろ
何のタイマーもない、タイミングはプログラムの実行速度に依存してる制御とかあるの? 具体的に言うと何?
処理落ちしてほどよい難易度になった昔のシューティングゲーム
ハードウェアにディレイポートがあれば、 ディレイポートへの書き込みとループでマイクロ秒単位の時間調節ができたりする。 volatileをきちんと使えば最適化は関係ないし。
それらは、そのタイミングでないとまずいから最適化しないの?違うでしょ そうじゃなくて、上記の例に当てはまるものは何?ってはなしだよ
TSC相当の情報が読めるCPUなら、ビジーループを書いて時間調節することも可能。
>>661 >>658 では電源投入後周辺機器のが起動するまでの時間待ちにビジーループを使ってる
高速なCPUだと待ち時間が短すぎて起動に失敗する
だからといって、それを最適化をしていないんだって言い切れるの?
>>665 あなたの主張は何なのさ
1.最適化で消えるような書き方をするな
2.プログラムの実行速度に依存してる制御を知りたい
3.その他
3 プログラムの実行速度がかわると問題だから最適化しないよってって、どこの何? 実行速度が変わって困るならタイマーなりsleep入れるなり つまり最適化で消えない方法をとるだろうし それを最適化しないことによって保つってなんだろうなって思って 95の例だと最適化しようが止めようがCPUが早くなれば問題出るとおもうんだけど
>>617 レスありがとうございます。
エラーが多くて困ってました。
ホームページでも調べてみます。
>>667 問題の根本は時間待ちにビジーループを使うかどうかだよね
タイマーがあるならタイマーを使えばいいけど
タイマーがないならビジーループを使うしかないでしょ
でも、ビジーループは最適化の有無で待ち時間が変わってしまう
それだけの話
Windows 95 の起動についてはタイマーを使えるから タイマーを使うべきだった どんな早いCPUでもこれだけ待てば大丈夫だろうって推測を技術の進歩が覆してしまったw
ふーん、ちと不満ながらも納得しました
>>672 CINT で WindowsAPI を直で呼び出せばできるかも?
と思ったがコールバック関数をうまく渡せない気がする
#include <win32api.dll>
int main()
{ MessageBox(NULL, "Hello, World!", "", MB_OK); return 0; }
えーと Windows環境で CのインタプリタでGUIが作成できるやつはありますか? 独自仕様なGUIたとえばTcl/tk見たいな感じで平気です CINTも考えたんですが、そんな事やってるやつ見つけられなくてどうしてよいやらでした
自分で画像表示してwinampみたいに独自UIで作れ
TranslateMessage せずに GetMessage 以降を自分で頑張ればいける
>>678 DispatchMessage だった
GUIはHTMLで出してCGIみたいにすれば良いんでね? つかTkからコマンドみたいにしてここの機能を呼べるんじゃねーの
>>627 ありがとうございます。勉強になりました。これからなるべく rdtsc で時間を見るようにします。
sseのベクトル演算器を使って、長さ1024個のfloatの配列2本の、各要素同士を乗算する関数を書いて、(1024回の乗算)
その関数を1億回繰り返すのを、
2本のスレッドでそれぞれ並列処理させて、
合計で (1024 * 2 * 1億)回のfloar乗算を処理するのに、当方のCPU(pentium dual-core E6300 2.6GHz)で2.1秒でした。
1秒あたりの回数に直すと 2048億 / 2.1秒 で、約97.5ギガ回になります。 が、wikiでFLOPSを見たら、core2 quad ですら 52GFlOPSなので、
格下のCPUなのに97GFLOPS?なのは不可解です…もしかしてFLOPSとは、コア単体あたりの性能って意味なのでしょうか?(それでも47Gも出ちゃうのは変な気がする…)
コンパイルオプションは
gcc -o xxx xxx.c -lpthread -msse3 -march=core2 -O0
として、とくに-O2 などの最適化は切ってあるつもりなのですが… orz
もしかして、元データもちゃんと 2048 * 1億個のユニークなデータを用意しないと、キャッシュで演算省略とかされちゃうのでしょうか…はて
http://codepad.org/lDVCdTLL
最近のプロセッサは最適化するからなw 値が0に近いとか結果が0になるような 場合乗算を省略したりするとか...
は?
Intelのニモニックは左から右だっけ?
受け流したいの?
>>682 少なくとも片方がNANとかだったら実質演算しないってことは
聞いたことがある。Intelコアの話かは忘れたが...
最近Cをはじめた学生です、 私のパソコンはのCPUはAthlon64 X2で BCC5.5でCを勉強しているのですが この環境でコンパイルされたEXEはIntelのCPUでは動かないのですか?
パイプラインのおかげさまでなんだか難しいことになってないっけ
691 :
681 :2010/03/31(水) 02:37:07
ふと並列処理を頭でイメージしてたら気づいたんですけど、 スレッドAとスレッドBで、どちらもXMM1とXMM2レジスタを使ってると、処理がごっちゃになっちゃうような気がした。 いや、よく知らないんですけど、SSEって、各コアに一個フルセットが用意されてるのですか? それとも複数コアで共有だったりするのですか? もしもSSEが各コアに専用に1機づつ用意されてるとしても、(いや、実際そうだと思う…)しかし、pthreadで作ったスレッドが、 スレッドAはCPU1、スレッドBはCPU2と、ちゃんと分けられる保証も無いような気がします。どうなんでしょう?(それとも必ず分けられるのですか?) もしもスレッドAとスレッドBが同じ側のコアを使ってしまったばあい、MMX1,MMX2を決め打ちして共有してるのは、なにかと危険な気がしました… (もしかしてC言語が自動で調整してくれる?、いや、たぶんアセンブラに関しては放置される予感) 検算してないので計算結果がどうなってるか考えてなかったのですが、(とにかく掛け算機が回ればいいとだけ思って書いてたのでw) スレッドA用と、スレッドB用とで、別のレジスタを使って専用に書いてやった方が安全なような気がしました。 つまりスレッドA用はXMM1 XMM2レジスタを使い、スレッドBはXMM3 XMM4を使う…みたいに専用に関数をべつべつに用意する方が良いような気がしました。 もしかしたら、ぜんぶ取り越し苦労かもしれませんが…はて。 (もしかすると、レジスタ退避などの調整はコンパイラが自動でやってくれるのかもしれませんが…??? いや、たぶん調整してはくれない予感)
>>688 普通は動く。というか動かないEXEを作る方が難しい
WinNTの場合、ファイルの終端にはEOFはついてないんですよね? ところで、getchar()などでC言語でファイル開いた場合、終端の次を読むとEOFが帰ってくるのでしょうか?
初心者ってよくBCC使ってるけど、なんでだろうな。 今BCC5.5でググって、上のほうに出たサイトを2,3見てみたら、 変なところに誘導されて、ダウソするところさえ見つからないのな。 俺なんか、この時点ですでにめんどくさい。
>>688 HALのおかげでWindowsでコンパイルしたものはどんなCPUであれWindows上で実行できます。
>>694 BCC以外だったら基本的にVC++ぐらいしか選択肢がなくて、そのVC++が初心者には難解に見えるからじゃない?
Unix系と違ってWinのGNU使いづらそうだし…
cygwin入れてcc main.cpp; ./a.exeでhello world!するのが一番簡単だよな
>>693 unix系でもEOFってのはファイルに書いてあるものではない。
既に終わりに達しているのになお読もうとした時に読む関数が返すもの。
>>694 VC6ってのもよくみる(例:>612)けど、不思議でしかたない。なんで6??
>>701 書いてあるものもあるんですよね?
もちろん書いてあるとは見える形ではなく、バイナリのときにちょこっと
703 :
681 :2010/03/31(水) 05:57:04
インラインアセンブラにコメントで//と書いたところ以降がすべてコメント扱いになってて、実行されていなかったみたいです。速いわけです…orz
http://codepad.org/1R5dzauu 修正したら23秒かかりました。8.9GFlopsです。妥当な数字です。安心したというか、がっかりしたというか…w
>>700 出力される数字をみたら、たしかに混ざっては無い感じでした。ちゃんとOSがやってくれてるみたいでした。余計な心配だったみたいです。
>>700 >>703 LinuxもちゃんとMMXレジスタを退避するよ。
寧ろインテルコンパイラのお蔭でWindowsよりも一足早く最新CPUのアーキテクチャの恩恵を受けやすいし。
>>701 6の後のやつからmfcすぐ使えなからじゃね
.netだと古いPCですぐ動かんし
プロジェクトファイルとかも変わるし
cygwinはcygwin入れた人にしか見せられないし
とりあえずコマンドラインとかWinMainから始まるような物作るなら
bccとかvc6のほうが手っ取り早く見えるのは、わかる
bccは期限なしでフリーだし
あと学校でコレで間に合うって理由でBCCなりVC6なりを使い続けてるのもあるかも
>>705 >cygwinはcygwin入れた人にしか見せられないし
人に見せられるようなプログラムをかけるようになるまでどれくらいかかるの?
そんな考えじゃいつまでたっても人に見せられない
しらんがな そんな統計データ俺が持ってるわけないの知ってるくせにきくなよ だいたいさ、よく読めば cygwinを避ける人が理由として、そう思うんじゃないかなって言う話だくらいわかるだろ
708は706へのレスね
>>702 getchar() の戻りは int でファイル終端を意味する値は マクロで定義された EOF
ASCIIコード 0x1a とは別物として区別できるぜ
大学のPCからだと2chに書き込めないから 自宅に送信して代理書き込みさせるアプリを作りたいんだけどCだけでできますか?
できる
むしろ初心者はcygwinがなんなのか分からないまま詰む
Vista以降で動くかどうかは知らんが SFU(Service for UNIX)が一応MSが正規に対応している UNIX On WInodows (SFUで検索すれば今でもDL可能だと 思うが未確認)
あれ、すんげえクソだけどな シェルの動作とか、名前パイプとかforkのところとか
んじゃVirtual PCでLinuxでも動かして その中のターミナルでやるのが吉か.. 結構めんどいからな... うNIX系だとテキストエディターの選択枝が 限られるし... sshdでも動かしてターミナル経由とかFTP経由で やるのが良いんじゃないかと
当初の目的を見失ってる気がするが何をしたいんだ?
WindowsでGUIアプリを組みたいとうのであれば C言語C++言語での開発はあらかた役割を終えているんじゃ ないかと...
矩形を表すのになんでみんな右下の座標を+1してしまうの?
つMSDN
>>715 Vista以降、SFUはSUAとして標準搭載されたよ
懐かしいなEOF 今はまず使わないよな
今でもEOF使うわカスwww
今でもDOS環境ならCTRL+Zで入力おわりとかなかったっけ? さすがに0x1aが読まれることは無かった気がするけど、どうだったっけか。
catで短いその時だけ使うようなシェルスクリプトを作ってるときとか
文字と文字列
>>728 'A'は文字、"A"は文字列
はい、次
俺のほうが一秒早かった。俺の勝ち。
ありがたや
>>728 'A'は文字, その文字に割り当てられた値を持つ. 10進数で65
"A"は文字列, その文字列の格納先のアドレスの値を持つ.
>>711 この文書はもう古い。最近でたcygwin では -mno-cygwin のオプションはない。
>>726 バイナリモードで open すれば関係ない。
>>735 つまり、テキストモードでopenすると0x1a拾うってことか
はー未だにあるんだな
>>738 cygwin上だとlibc互換ていうかLinux環境のエミュレートだから
バイナリモードとテキストモードには、もともと違いが無いんじゃないか?
Linux環境のエミュレートだとぉ?
なんか文句あるんかコラ
C言語で記述された O/Rマッパーを作るとことは言語上不可能である
ツッコミ待ちなの?
エイプリールフールだからな
C言語でDBへアクセスするための データマッパーの美しい作り方ってどんなのがありますか?
金払って人にやらせる
>>739 は2行しかないのに3箇所くらい気に食わない所がある
4つじゃね?
素直に仮想環境にうぶんつー入れる方が良い気がする
なんでCentOSじゃなくてうぶんつ人気なの?
753 :
デフォルトの名無しさん :2010/04/01(木) 12:45:11
Linuxなら赤帽系にしておけ、って教わったのかな? かわいそうにw つか板違い。
>752 たぶん更新が早くて新しいハードへの対応がよいから fedoraやDebian GNU/Linuxもあるが 僕は、断然せんとくんだけどね 安定、サポートが長い、2038 赤帽なめんなよ つか板違い
仕事で赤帽使うこと多いけどな つか板違い
青帽のことも思い出してやってください。 つか勘違い
757 :
デフォルトの名無しさん :2010/04/01(木) 14:58:20
fputsとwriteの違いが戻り値意外にわからないのですが、どうちがうのでしょうか?
>>757 write って fwrite のことか?
そうでないならその write 関数を作った奴に聞け!
fwrite のことなら、どっちの関数もリファレンス見ればすぐに分かるだろ。
それでわからない部分があるならそれを具体的に書いて質問しろ。
>>757 unix互換ライブラリにあるwrite()ならfputs()とはレイヤーが違うので要注意。
> そうでないならその write 関数を作った奴に聞け! ワロタ
761 :
デフォルトの名無しさん :2010/04/01(木) 22:01:25
はじめまして 式を入力してください x+3 5 という結果がでるコードを書きたいのですが 思うような結果がでません。ご指導お願いします。 #include "stdafx.h" #include "stdio.h" using namespace System; int main(array<System::String ^> ^args) { int y=0,x=2;; char s[256]; printf("式を入力してください\n",s); scanf("%s",&s); y=(int)s; printf("%d\n",y); return 0; }
言語は何?
まあ y = strtol(s, 0, 10); とかかな
>>761 初心者にはかなり難しいよ、それ。
事前に変数名と変数へのマップを作って、
入力文字列をパーズしながら木を作って評価して…
CじゃなくてRubyなら簡単なのに。
どう考えても言語勉強してるのに・・・
どうでもいいけどperlとかだと $data = "入力された文字"; print eval $data; 二行でできた。
適当な桁数の数字を i=87291 ではなくて i[0]=8 i[1]=7 i[2]=2 i[3]=9 i[4]=1 というように1桁ずつ別々に配列に代入していくには どうしたらいいでしょうか?
>>770 どこまでできて何がわからないのか、もっと絞って質問して。
自分でプログラムを書く気は無いなら、宿題スレへ。
自分が紙の上でどうやるかを分解していって、プログラムコードに置き換えるんだ。
この作業を自分でやらないのではいつまで経ってもプログラムを書けるようにならない。
>>770 sprintf()かなにかで一旦文字列にしてから一文字ずつ加工するか、
10で割った余りを取り出してから10で割るロジックを繰り返すか。
774 :
770 :2010/04/02(金) 04:50:57
int num[1000]; char str[1001]="1000桁の数字"; for(i=0;i<=999;i++){ num[i]=(int)str[i]; } これでやってみたら num[i]に2ケタの数字が入ってうまくいかなかったんですよ
num[i] = str[i] - '0';
776 :
770 :2010/04/02(金) 05:03:14
>>775 理屈はわかんないけどうまくいきました
ありがとうございます
>>776 Cには純粋な文字型がないので、文字コードを整数値に変換しないといけない。
文字コードは大抵、'0'から'9'まで連続しているので、'0'との差を取ることで変換している。
従って、厳密には一対一対応させるべき。
switch (str[i]) {
case '0': num[i] = 0; break;
case '1': num[i] = 1; break;
:
:
case '9': num[i] = 9; break;
}
778 :
770 :2010/04/02(金) 05:29:09
>>777 なるほど
つまり
>>774 で出てきていた2ケタの数字は
'0'から'9'の文字コードだったわけですね
'0'から'9'まで連続していることは規格が要求を明記してたはず。
sscanfとかは使えない?
'A'〜'Z'と'a'〜'z'は変態コード体系EBCDICで分断されてるけどな
x a[A][B][]...[]; X = a; とした時のXは何になるの? 何になるか決まりあるの? 決まりあるなら、その決まりにした理由は何?
>>782 型は異なるが値としては
X==a==a[0]==a[0][0]==a[0][0][0]==a[0][0]...[0]==&a[0][0][]...[]
理由は知らない
>>783 へーーー、値はそうなんだ。
で、型はどの型になるの? その型にする理由はなんですか?
やぁ、いまprintfの勉強をかねて、printfを自前でフルスクラッチで(stdarg.h以外には依存せずに)書いてる最中なのだけど 細かい部分の挙動や、普段使わないような記号の仕組み(たとえばaqや*)などの具体的な仕様が分からなくて困ってるんだ。 printfに関する一般的な仕様(posixなど?)を具体的な使用例ソースと共にまとめてあるページって、どこかに無いかな? (英語は読めないので、できれば日本語のページが望ましい)
>>786 manpage printf でググるとか
>>786 glibc の printf() のソースを見て自分で仕様書を書く。
。。。なんてことはしなくても
JIS X 3010:2003 でぐぐって
JISC のページの PDF 見れば。
7.19.6.1 fprintf 関数。
言語、げんげんご、言語!
>>787 さっそくググってみたよ。
わおー、とてもクールなページでprintfのアウトラインをつかめた気がしたよ。ありがとう : )
>>788 やっほー、C99の仕様書らしきPDFが出てきやがったぜ。こいつはクールなPDFだね。
まだ読んでないけど、さっそくダウンロードしてみるよ。
それにしても書籍で買うと140ドル(!)もするのかい? わおー、やつら俺らの白髪を増やす気かい!
>>glibc の printf() のソースを見て自分で仕様書を書く。
glibcの挙動をマネるというアイディアには賛成さ。ボクにとってGNUのlibcはスタンダードlibcと言える存在だからね。
だけど、ソースを直接閲覧するというアイディアはノーグッド。なぜならglibcのソースはLGPLだからね。
LGPLコードから、たった一行コピペするだけで、そのコードはもぅ法的観点からGPLコード以外とはマージ不可能になってしまうのだろう?
恐ろしくてGPLのコードなんて見る気にならないよ
それにもともと、コーディングに関しては他を参考にせずに、自力でprintfをフルスクラッチするのが目的だしね : )
テンパで度の強いメガネの白人みてえな文章だな ハイスクールで背中に蹴ってくださいって紙張られてみんなにけられるタイプ 好きなおさななじみの女の子の前でしどろもどろ 声出して自分に話しかけるタイプ 「いいか、落ち着くんだ、そして言うんだ、デートしてくださいって」 「ああ、もうなんてお前は意気地なしなんだ、彼女行っちゃったじゃないか」
>>790 コピペしなきゃいいじゃん。
無理やり違う実装で書くのも勉強になるぜw
793 :
デフォルトの名無しさん :2010/04/04(日) 20:30:35
0x20って書いてあるんですが、これって半角スペースでしょうか??
>>793 そうだよ。
アスキーコードでググればアスキーコード表くらい出てくると思う。
>>794 アスキーコードですね。
ありがとうございます。
0xの意味も知らないんだろうなぁー
もっと手軽に使えるプログラミング言語探してるんですが、いいのありませんか? 環境はWinで文字列操作が簡単なやつがいいです。
STL Roadsend PHP
>STL おいおいw
STLなら a="はじめまして"; b="こんにちは"; a+b と足し算できるが。
awkやろうぜ!
それってstd::stringの事か? STLとは切り離して考えてるぞ
├や└を配列に入れたいんだけど 方法ありますか?
ふつうに入れればいいだろ
文字列操作でイイなら awkかrubyだろ
文字列の比較って1文字ごとに比較より4バイトごとlongに纏めて比較みたいな感じの方が速い?
どんな条件でも速いという決まりは無い ガタガタ言わずに実測しろ
感じの方が速い
>>806 ステップ数から見れば速くなる実装は可能。
ただし、引数に何ならかの法則性があるなら
それに最適化した実装の方が速い可能性はある。
>>806 アラインメントがズレると遅いかもしれない
実測するっきゃねー
>>806 試してみた 同じなら0、違うなら0以外
http://codepad.org/V24NL75t x_strncmp() : 1文字づつ比較する場合。19個 * 1千万回 = 0.68sec
xx_strncmp4() : 4文字づつ比較する場合。19個 * 1千万回 = 0.28sec
遅くなるかと思ったら速かった。頭がどうにかなりそうだった。
>>811 strncmp とも比較してみてくれないか。 単純にx_strncmpをstrncmpにおきかえたら、 0.00secになっちまった。
>>806 32bitCPUなら32bitごとが速い。
>>810 先頭から始めてるんだから、アライメントがずれることはないよ。
strncmpを使うと速い。でFA?
>>814 charの配列の頭がアライメント取れてるとは限らないんじゃね?
コンパイラとその設定によるとしか言えない。
>>816 そんなことはない。配列の先頭や、構造体の先頭はきっちりしたアドレスなっている。
そうでないと、構造体でアライメント対策でパディングしても何の意味もないことになるだろ。
これは全てのC言語共通であり、設定で変えることも不可能。
(設定で変更できるのは構造体のメンバの先頭位置だけ。)
>>818 きっちりしてるから必要最低限のサイズしかメモリを消費しない
>>815 つか、アーキテクチャ依存に最適化されたbuilt-in関数が速い。
>>804 windowsで
├や└を文字列配列に入れたいけどやっぱ入りません
ロケールの問題じゃね
|-とかにすればいけんじゃね
>>819 「きっちり」とはどういう意味で言ってるんだ?
今の関心事は32bit-alignedであるかどうかだが、
>>818 ではchar配列は32bit-alignedにはなっていない。
827 :
770 :2010/04/07(水) 01:00:56
test
>>825 きっちりしているじゃないか
隙間があったら無駄じゃね
>>818 はスタックだからそうなるんじゃね
>>797 文字列はCが一番めんどくさい。それ以外ならなんでも簡単
JavaScriptなら何もインスコしなくてもWindowsだけで始められるぞ
831 :
デフォルトの名無しさん :2010/04/07(水) 15:49:40
先生、質問です。 以下のようなコーディングってありでしょうか? 前提条件として、char* strの指すアドレスが他で利用されていない事前提での話ですが、 なんというかEffectiveC++みたいな常套手段のような知識としてアリなのか知りたいのです。 typedef struct { int value; char* str; } Data; Data* CreateData(const char* c) { Data* d = (Data*)malloc(sizeof(Data)); d->value = 100; d->str = c; return d; } void ReleaseData(Data* d) { free(d); } void main(void) { Data* d = CreateData("This is Data."); // dを使ってシコシコする ReleaseData(d); }
832 :
>>831 修正 :2010/04/07(水) 15:51:01
void ReleaseData(Data* d) { free(d); d = 0; // ←ココ追加 } よろしくお願いします。
const char* c を受けてるのに char* d->str への代入? Data 定義で str を書き換える気まんまんだし c がリテラル文字列へのポインタだから、実際の書き換えを行って鼻から悪魔出しても文句は言えない 代入時のスコープから抜けた時に不安 とか 色々余計な心配事増やすぐらいなら 素直に複写するかな… ( d->str = malloc(strlen(c)+1); 〜 memcpy() )
>>832 Data* d = CreateData("This is Data.");
printf("%p\n", d);
ReleaseData(d);
printf("%p\n", d);
-----
ReleaseData() 内部で d = 0 とやっても、呼び出し側のポインタが変るわけじゃーない
ReleaseData(Data** d) { free(*d); *d = 0; } とし ReleaseData(&d); と呼び出すか
マクロで NULL 代入する式を追加するかだな
>>833 >>834 即レスどうもです。
>>833 リテラル文字を保持するつもりなのでおっしゃる通り const char* str; にしないとまずいですね。
ReleaseData()で開放という約束事があるので、ここは素直に複写するのがよさそうです。
>>834 うはぁw おっしゃるとおりです。ポインタの理解がまだまだですねorz
ReleaseData(Data* d) の Data* d はアドレスのコピーでしたね…
あーあー欝だ。
凄く勉強になりました! ありがとうございました!
http://codepad.org/ckEchaCF 書いてて気づいたんですが、
DATA型全体をmallocする設計だと、DATA p を関数に渡すときに DATA* とするか DATA** として渡すか?などで、余計な思考を一段はさむ
必要があって、わずらわしいと感じました。
strだけでいいのではないでしょうか? mallocするのは。
たとえば、freeDATA(DATA* d); d=0; とするか freeDATA( DATA** d);とするべきか? 他のwriteDATAなどは(DATA*)なのに、freeDATAだけ(DATA**)なのは
設計として歪な気がする。だから freeDATA(d);のあとに手動でd=0としています。
これは、freeDATAで開放するのが DATA型全体だから、こういう煩わしい問題が起こるのだとおもいます。
もしも freeDATAで開放する対象がメンバの str のみならば、DATA** を渡す必要はないし、freeDATA(d)内で d->str=0;として有効になります。
(これなら freeDATA() にだけ、DATA** という変則的な引数にする必要がなく、他のメソッドと同じく DATA* であつかえて、簡単だと思います。)
おそらく、strを可変長にしたいという目的なのだから、mallocは strのみに行うような設計にすればどうか?と思いました。
そうすれば、DATA* か DATA** か?という煩わしい問題から解法されるので、余計な思考を一段はさむ必要がなくなって簡単になると思いました。)
>>836 あーあCかわいそう
C++だとクラスに入れてデストラクタ書けばなーんも考えずに済むのに・・・・
生成パターンも使えるし
C++のクラスは、Cの構造体のメンバとして関数アドレス追加したり、 構造体を階層的に定義するのと大差ないしなぁ とか、あえて言ってみる
RAII使えるかどうかだけで全然違うだろ アホかいな
>>838 大差ないだと?
じゃあ死ぬまでCだけで頑張ってね
>>839 論点が分かってないようだが、C++の実行ロジックは、Cで組めるってことよ。
C++はコンパイラがより多くのコードを自動的に出力してくれる、ゆとり仕様の
高級言語(笑)ってこと
>>840 おう、おまいはC++で頑張れよ。腐ったコードのメンテナンスはCよりも
C++の方が100倍つらいわ
842 :
デフォルトの名無しさん :2010/04/07(水) 20:20:57
Linus乙
>>841 便利ならゆとり仕様と罵られようが俺はそっちを選ぶぜ
>>841 論点が分かってないようだが、Cの実行ロジックは、アセンブリで組めるってことよ。
Cはコンパイラがより多くのコードを自動的に出力してくれる、ゆとり仕様の
高級言語(笑)ってこと
>>841 >腐ったコードのメンテナンスはCよりもC++の方が100倍つらいわ
あーあジジイの頭ではこうなるのか
オブジェクト指向がなぜ開発されたかその経緯もしらないで
>>844 論点が分かってないようだが、アセンブリの実行ロジックは、バイナリコードで組めるってことよ。
アセンブリはアセンブラがより多くのコードを自動的に出力してくれる、ゆとり仕様の
高級言語(笑)ってこと
>>841 それからもう一つな
例外機構はCだけでは真似できない
だからC->C++トランスレータは今は開発不能
848 :
841 :2010/04/07(水) 20:29:58
うもう、冗談なのに。みんなマジレスしすぎ(´・ω・`)
なんだっけ、記号に別な意味を持たせるとか 同じ関数名で引数違いで動作変えるとか Cで無理なこといくらでもあるよな 同じようにアセンブラでも無理 CでC++をつくって自分を再解釈して再コンパイルとかするなら別だけど 出来上がった結果同じ動作をするものは作れるけど どういうロジックで動いているかを真似るのは無理
>>849 どっちかというと、コンパイラレベルの話だね。
同様の動作をする実行コードをつくるのは比較的簡単
>>847 真似ならできるんじゃないか?
>>849 それは同じ記述ができないだけであって、同じ動作ができないというのとはまるで違う話では?
>>850 でも例えばカプセル化は出来る?
全部publicになっちゃうでしょ?
プログラマが意識してpublicとprivateを見分けるなんてそりゃ基地外沙汰だぜ
>>851 longjmp()とsetjmp()を使って似たような事は出来るが、C++の
例外機構を完全に真似る事は不可能です
だから真似なら、と。
真似だけな それも大変な思いをしてな
またC++の話題かいな CとC++は別物だろ 専用スレもあるんだからほどほどに
>>852 ソースをコンパイルして、オブジェクトファイルになった時点で
CとかC++とかアセンブラとか、あまり関係無い話になるってことよ
C言語使ってC++のコンパイラ作ってC++のコードをコンパイルすればいい ほらC言語だけでC++に出来ること全部できるぞ
以下のように、ファイルを分割したプログラムを作ったのですが、 ビルド時にLNK2005エラーが発生してしまいます。 どこがいけないのでしょうか? --- test.cpp --- #include "test.h" void main(){ #ifdef ATEST Atest(); #endif } --- test.h --- #ifndef TEST_H #define TEST_H #define ATEST class A{}; //テストで使用するクラス void Atest(); #endif //TEST_H --- Atest.cpp --- #include "test.h" void Atest(){ ・・・ }
C++の話を聞きつけてここに来ちゃったのかしら
>>844 実行ロジックが組める事と綺麗で安全に組める事は別問題だぜ
デストラクタをまともにCで書こうと思ったらgotoの嵐だし
ミスっててもコンパイラは何も言わない
安全性なんて気にしない!とか頭の湧いたこと言うならもう知らんが
>>857 あまり関係ないだと?
そこまで持ってくまでがあまり関係あるでしょ
開発効率が全然違うんだけど
>>838 が
>>837 の論点を理解せずに違う話をしているんだよね。
>>837 の、C++で得られる利便性について話している人と
>>838 の、同じ動作の実行ファイルはCでもC++でもできることについて話している人がいて
見てておもしろいからもっとやれ
>>862 まず、コンパイラの話をしたいのか、実行コードの話をしたいのか
そこを明確にしてから話してくれると助かる
http://codepad.org/hPjdfDuX たしかに構造体と、その操作という組み合わせで組むのなら、C++の方が素直に書けるので簡単に読めて良いと思います。
個人的には、C++は単なる良いCとして扱う程度にとどめた方が分かりやすいと思ってます。
カプセル化と単一継承とテンプレート程度にとどめた素朴な使い方がいいと思います。
Cの「構造体とその操作」という方法の、単なる別記法としてのC++なら、それなら単なる良いCとしても読めますし。
あまり多態性を多用したコードは、個人的には、あれは苦手です…読みやすいとは思わないです…(頭が良さそうにはみえますがw)
プログラム中のあらゆる型をポリモフィズムで扱われると、あまりに抽象的になりすぎて具体的なコードが見え難くて、読むのがすごく大変だと感じます。
>>857 誰もオブジェクトコードの話はしてないだろアホかww
ソースレベルの話をしてるんだが
チラシの裏に書いてろ
>>865 なぜこうではないの?
int DATA::write( const char* s ){
const char* src=s; int l=0; while(*src++!=0){l++;}
if(!str) delete[] str;
str=new char[l+1];
char* dst=str; src=s; while(l-->0){*dst++=*src++;} *dst=0;
return(0);
}
>>865 クラス名が嫌。Dataじゃないのが嫌。
初期化リストで初期化しないのが嫌。
メソッド名が嫌。DATA::writeの実装が嫌。
strlenを使ってないのが嫌。strcpyやstrdupを使ってないのが嫌。
!strで先にdelete[]すればreturnスッキリするのに。
mainでreturn 0してないのが嫌。
ポリモってるつもりでDATA *d = new DPと書かないのが嫌。
同じくvoid f1(DP* d)としてvoid f1(DATA* d)としていないのが嫌。
>>865 その程度しかC++を使いこなす能力がないのなら確かに無理は
しない方がいいわな
871 :
869 :2010/04/07(水) 21:36:11
おわー。リロードしてなかったすまそ。
>>865 確かに C++ は仕事で使わないほうがよさそうだな、お前は。
>>869 おーい一つだけ
C++ではmain()でreturn 0;は省略してもいいんだぞ
コーディングスタイルが嫌って言ってるだけで規格で駄目と言ってるわけではないだろ
C++は難しいのう ヽ(゚∀゚)ノ
Cは半月もあれば覚えられるお手軽言語でミニマム脳みそでも習得可能だからいいよな
なんで至る所にDP::があるの そんなに多態性をぶっこわしたいの
うむむおっぱい
オレオレ、俺だよ
CとC++が全く別物であるということを理解した方がいいよw
CよりC++の方が高等とか勘違いしている奴がいるから C原理主義者が顔真っ赤になっちまうんだろ しまいにはCとC++が同じときたもんだ
template 厨はいないのか?
>>886 C++の話題を出したらC厨が顔を真っ赤にして反論するよなw
しかも言っている事が支離滅裂
いやー楽しませてもらいました
Cスレで++みたいなゴミの話する奴は開き直った荒らしなんだから相手するだけ無駄
今日もまたCのやつらが細けえことで揉めてるよw おやおや今回はC++のやつらも来てるなw
C++(゚听)イラネ
>>891 C++(゚听)イラネじゃなくてC++ワカラネだろw
そりゃCのスレだしな
++C
CならC++でもいいけど、C++なら++Cのほうがよい。
質問です。 これから新しくプログラミングを覚えようとしているのですが CとC++のどちらを勉強すべきでしょうか? こうですか?わかりません><
もちろんRubyを学ぶべきだ
当然冗談たよな?
>>896 C++から学べ
Cなんて時代遅れの糞言語から入るとポインタの考え方が
身に染みついてC++が学習不能になる
C++やるならJavaだろJK
Javaは最後の最後まで手を出すな 一度はまると極度の怠慢さが身に付き二度とC/C++に復帰できなくなる
ググって見ると C# > Java = C++ > C >> VB = PHP > Perl 的な感じで給料が違うように見える(あくまで主観だから、違う意見もあるだろうし、反論のための証拠も腐るほどあるだろうけど) C#をすすめる
Javaは言語云々よりライブラリの使い方を覚えるのが主な汚仕事ツール VB辺りと同じで書いてる最中は面白くも何ともねぇ上に 自コードが車輪再発明と判った時の脱力感と他人の冷たい評価が辛すぎる。
C#はダメだって Windowsでしか仕事がないじゃないか
いつも思うんだがCとC++を同列に考えてる奴って何? ドイツ語とフランスぐらい違いがあるんだが 言語ごとに思考プロセスを切り替えられない奴は屑
言語と国家ほど違うわけじゃないと思うぞ
お前らまとめてマ板行け。
だって、暇だし
909 :
デフォルトの名無しさん :2010/04/08(木) 23:26:12
あの、質問いいてすか?
日本語でおk
Cスレで++みたいなゴミの話する奴は開き直った荒らしなんだから相手するだけ無駄 なんせ++が偉いとか新しいとか勘違いしてる中学生だからな
新しいのは事実だろ
偉いとも新しいとも言ってないし(笑) C厨は被害妄想がいささかお強いようですね(笑)
C++の勝ち組=クラスライブラリを提供する側 C++の負け組=クラスライブラリを利用する側
Cの勝ち組=ライブラリを提供する側 Cの負け組=ライブラリを利用する側
そうでもなくないか、と
悔しいようですね 図星かw
>>904 スレチだが、さすがにそれはないwと思ったのでレス
Monoなんか仕事に使えるかいクソ
まあ、クラスライブラリが無い状況でC++使ってもコード量が増えるわ、 実行速度遅くなるわで効率が悪くなるだけだしなぁ JavaもC#も同じことだが
Cの方がもっとひどいけどな
どんなCだよw
プログラマーなんてやってる時点で全員負け組だっつの
しかしちょっとした軽いツールを作るにはCは最適だな C++で書くとどうしても大げさになってしまう でも今は勉強中なのでCで書いたものを必ずC++流に 書き直しています
>>924 > C++で書くとどうしても大げさになってしまう
んなこたーない。
ほぼ C のコードのままコンパイルもできるだろうし、書き直すとしても
コードが簡単になるところだけにとどめておけばいい。
わざわざ「大げさ」になるように書き直してるところがあるなら、それは
そのプログラマが悪いだけのこと。言語のせいにするのは筋違い。
>>925 いやね、char[]を全部std::stringに直して書いてるんだけど
とにかく簡潔に書けていた所がゴチャゴチャして
あとsprintf()はstd::ostringstreamになるわけでしょ
無理にそういうライブラリは使わなくても確かにいいけど、これも
勉強だと思って使ってます
どの言語のスレでも、それをネガキャンして代替案をマンセーしてるのは決まってキチガイ
>>924 ,926
× C++で書くとどうしても大げさになってしまう
○ 勉強だと思ってC++固有の機能を最大限使うように書くと大げさになってしまう
あたりまえだろ。
929 :
デフォルトの名無しさん :2010/04/09(金) 13:09:48
人からもらったCコードの中に・・・ float *data, *data0; data = data0 = (float *)malloc (sizeof (float) * 100); なるものがありました。えっと2行目の意味がよくわかりません! data0 = (float *)... は、単精度浮動小数100個分のメモリを確保してその先頭アドレスをdata0に教えてあげました、 とおもうのですが、 data=data0 の部分がなにを意味するのかちっともわかりません。教えてえらい人!
>>929 data = data0 = ... で data と data0 に同じ値を代入することになる。
C++でツールを作ってみた 速い なかなか速いじゃないか つーかWindowsがC++で書かれているから、C++が遅かったら Windowsも遅いという事になる
おまえらスレチいい加減にしろよ CでもC++でもどっちでもいいじゃん どっちがいいかは人それぞれだし って俺はどっちでも書くけど
この話題はいつも荒れるなw C++にもいいところはあるんだからさ 頭から否定しちゃだめだってば
>>931 GDI周りとかファイル周りとかタスクの部分とかキモになるところはCだよ
もちろんWindowsは速いとはいえないけどね
つかさ君が作るツールって呼ぶようなくらいのプログラムでCでもC++でも今時差がでるかいな
荒れるのは、CスレでCのネガキャンする奴が湧くからだろ これで荒れない方がおかしいわ。言語の問題じゃない
中途半端にCとC++で言語名が似てるのが問題だな
>>934 Linuxより圧倒的に速いし、OSの中じゃWindowsは最速だと思うよ。
Linuxより圧倒的に速いって、何を根拠に?
Linuxはモノリシックカーネルだぞ WindowsNT以降は部分的にもマイクロカーネルの技術を取り入れて いるので各プロセス間通信が多く、結構オーバーヘッドになっている そのため2000とXPではGDIを特権モードからユーザーモードに移したんだ その後CPUの性能が上がって性能余り気味になったので、その余剰パワー を活かしてVistaと7では先祖返りを起こしている GDIに起因する脆弱性を減らすためだ
カンマ演算子(関数の引数のカンマじゃなくて)って副作用完了して左から順に評価でおk?
>>931 Windowsの大部分はCだ
Windows Internalsにちゃんと書いてある
てきとうなデマを流すなよ
>>941 このスレでそこまで間抜けなら無理して書かなければいいのに。
この板はなんでID非表示なんだよ。スレチ湧き過ぎだろ
Linuxの見た目を軽いのにすると937はもっと幸せになっると思う あるいは、マシンの構成に合わせて全部コンパイルしなおしてみるとか びっくりするくらい速くなるよ 1個の商品として売ってるWindowsと、いくらでも個個の部分を変えれる物とくらべて 圧倒的に速いって言っちゃダメだよ
ubntuってあんまり速くないんでそ?俺は便利だから使ってるけど
速い印象はないけど、糞M$のような詐欺商法と違ってタダで良心的だから使ってる
どうでもいい
ubntu使ってるけど同じマシンでFireFox動かしたときUbuntuのほうが2000より遅いね Vistaには勝ってるかも X立ち上げないでコマンドラインで計算とかさせるとDos窓に勝つよ どこで戦うかじゃないかな いまどきCPUやつながってるデバイスに合わせてOS再コンパイルしたりとか すべてのモジュールやデーモン、アプリをスピード重視で再コンパイルとか いらないの消しちゃうとかしないよね やればそりゃ鬼のように速くなるだろうけど 新しく買って来たデバイスとかも自動認識してくれなくなるし デーモンとかドライバーとかどれが何なのかかなり勉強しないとわからなくなってるし そもそもそういうことしたくない人のためのubntuだしね っていうかtwmにするだけでずいぶんちがうw
そろそろlinux機ではブラウザはクロームの時代になると思う
>>947 二言目には「コンパイルしなおせ」だろお前ら。
聞き飽きたわそんな台詞。
やりたくないなら辞めればいいだけ
return (0);と return 0; ので解釈が違うコンパイラがあったと思うのですが、ご存じの方いますか? 上は関数で、下がifなどと同じ予約語だったと思います。 処理時間が違い、関数(return (0))の方が時間がかかったと記憶しています。
>>954 そんな聞き飽きるほど出てきたかぁ?Linuxの話題すらたまにだと思うのに
そもそも今時、二言目に出てくるほどLinuxコンパイルしなおしてるやついないぞ
みんな普通にインストールしたまま使ってると思う
>片方はCのコンパイラではありません。 なんか変。
return(n) ってマクロでも自作してたんじゃないの
初期のCコンパイラではreturnに括弧が必要だったことは知ってるが 今そんなコンパイラがあるのかは疑問
962 :
デフォルトの名無しさん :2010/04/10(土) 17:30:20
>>961 dmrが作ったCコンパイラではreturnにカッコは不要ですが。
そんなもん探してどうすんだ?
>>963 最近仲間内でそういう話題があったんで。
H8とかマイコンのコンパイラだったかもしれませんが、
returnの書き方によって処理落ちして、戻り値に異常が出たような…
関数だから変になったんじゃなくて、 括弧のついたreturnのparseにバグがあったんじゃないのかな
typoして、リンク時にエラーになっただけでしょ
プログラマってLinux使ってる人が多いように思えるんだけど、Linuxのメリットってなんかあるの? オープンソースのプログラムがtar.gzで多く配布されているのが関係してたりするんですか?
>>967 Linux をターゲットとして書かれたオープンソースのソフトウェアが多いのも
もちろん理由の一つだよ
エロゲーをしたいので普通にWindows使ってます
普通両方使ってるだろw
WindowsもOSXもLinuxも使ってますが。 ipadも
おまえは最後の一行言いたいだけだろ
サーバ系の仕事だとLinuxにかぎらずUnix系多いよね(Web系もそうじゃないやつも) 絵が必要ない大きな組み込み系とかもじんわり来てる気がする 家電にまでってわけにはまだまだ行かないけど でもただ単におもしろいからってのもあるよな Lnux動かしてそこでコンパイルしてみるだけで面白いじゃん せっかく無料でいろいろあそべるものがあるのに、使う理由がないってだけで使いもしない人と 特に使う目的ないけど動かしてますって人と人種的にどっちがプログラマ向きかといったら後者だろうし
windows ・エロゲー ・PCゲー ・p2p(ポエムの交換) ・jane linux ・計算機科学 ・論文作成 ・アプリ開発
976 :
967 :2010/04/10(土) 21:42:32
なるほど ありがとう。参考になった!
エロゲーやってる奴って例外なく頭がおかしいと思う
自分はまともだと言張る奴よりはまともだけどなw
エロゲーのほとんどはC/C++で作られているんだヨ!
紙芝居なんてどうでもいいよ
自分がマトモじゃないって理解してる人はマトモなんだと。アレッシーっていう偉い人が言ってた
誰でも言ってるだろそんなこと。だから何って話 マトモじゃないと自覚してマトモじゃない行動する奴もいるんだから説得力無いわ
マトモじゃないって理解していて、マトモじゃない行動してる奴は、マトモだとは思えない
じゃあマトモじゃない行動をしてる奴らは全員自分たちがマトモだと思ってるのかよ。んなわけねーだろ
>>979 うそこけ、数社と取引があったけどVBばっかだったぞ
ちょっとした紙芝居みたいな所ばっかだったけど
母数を考えろよ
>>985 エロゲってVBなのか?
すげー。
よく作れるな。
誰か次スレ立てて
確かStudio e.go!はVB使っていたと記憶している
次スレ立てます
1000ゲット
1000ならゲームをする気力が湧いてくる
紙芝居系のエロゲは HSP辺りで粗製濫造してるモノとばかり想像してた
HSPはがんばらないと絵を抜かれ放題だから だからといって、がんばるんだったらめんどくさくてVBで書いたほうが早いなってなるし
っていうか、マジでVBなのかよ。 C++でスクリプトエンジンくらい作るだろ?
既存のスクリプトつかうだろ。述べる専用の。
はい次1000どうぞ
ハ _ ___ ‖ヾ ハ / ヽ ‖::::|l ‖:||. / 聞 え | ||:::::::|| ||:::|| | こ ? | |{:::::‖. . .||:::|| | え | _」ゝ/'--―- 、|{::ノ! | な 何 | / __ `'〈 | い ? ! /´ /´ ● __ ヽ ヽ / / ゝ....ノ /´● i ` ー―< { ゝ- ′ | 厶-― r l> | ∠ヽ ゝ-― `r-ト、_,) | レ^ヾ ヽ>' ̄ LL/ 、 / .l ヾ:ヽ ` 、_ \\ ' l ヾ:ヽ ト`ー-r-;;y‐T^ | ヾ `ニニ「〈〉フ /‖. j
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。