C言語なら俺に聞け 145
■ このスレッドは過去ログ倉庫に格納されています
printデバッグなら専用モジュール作るべきだな 俺は時刻、関数名、コンテキストIDを付けて 標準出力かファイルにはかせてる >>361 setvbuf忘れなければ済む話だよパパ >>363 そだねー >>364 本当にそれだけで大丈夫かね? この頃のライブラリは多分マルチスレッドでもちゃんと動くように内部でロック掛けている部分があると 思うんだけどね、例えばシグナルハンドラの中でそのロックを掛けている最中にまたシグナルが来て 同じシグナルハンドラに入ると同じロックを掛けようとしてデッドロックするなんてことが起こり得ると 思うんだが。(まあその程度のことでデッドロックしてしまうこと自体がバグかも知れんが。それ以前に シグナルハンドラの中でprintf()は使うなって話でもあるか…)。 >>365 ロケールがCならprintfだってスレッドセーフだしぎりぎりシグナルセーフだよパパ 世の中には完全なCライブラリを実装していないタイニーなマシン用のサブセットだってあるんだよ坊や。 それはCじゃないから、このスレで話し合っても無駄では。 30年以上前だったかな、あるメーカーのプリンタファーム開発用Cコンパイラが配列要素上限が255だった 当時アスキーネットでこれを聞いたvoid氏が呆れていたようだ。 インストラクションに8ビットまでの即値を組み込めるなら、その制限によって(そのような最適化が必要なプロセッサにとって)強烈な最適化をかけられるから、アリやナシやと問われればアリのような感がある。 Cライクって言っときゃいいのにCと名乗ってしまうから イチャモンつけたいヤツの標的になる 本場ドイツ直輸入ポークソーセージを買ったら魚肉ソーセージだったような感じですね。 つまり詐欺です。 >>369 それ言ったらバッファリングの話題もCの話にならないだろぉオヤジィ 何が正当な教義かについて議論したければ、上級者スレでやってね こういう掲示板で宗教対決を規制したら過疎化するんじゃないだろか。 >>366 マルチスレッド版のライブラリーがあるかと 行出力中にスレッドが切り替わらない >>374 なお初代K&Rにはライブラリーの仕様は含まれない。 WhiteSmithとかはprintfが実装されてない 5Vシングルエンドがそのままコネクタに出てるアレか アレを基板に直付けするアフォが多くて頭クラクラした for(i=0;i<10;i++) scanf("%d",&num[i]) で入力した変数がiに入ってしまうことがあるのですがなぜですか? アルゴリズムによってはdo whileの方が素直なときがある。まれだが。マクロを本当の関数っぽく使うのにdo while (0)使うハックがある。まれだが。 コンパイラによってはdo whileの方が速いコード出す。まれだが。 >>370 プリンタっつーてもピンキリだからなぁ レシートプリンタとかならその程度で充分かもしれん >>385 んなこたーない whileのほうが使用頻度は高いけど 本質的に後判定なロジックはそんなに珍しくもない do〜whileは、必ず一回は処理してくれるから便利。 繰り返し対象処理が実行される条件がブレるから気をつけないといけないけどね do{continue;}while(false); で無限ループになるのウケる。 391 error: undeclared symbol 'false' こんな書き方たまにする do{ ・・・ 条件 break; ・・・ 条件 break; ・・・ 条件 continue; ・・・ 条件 break; ・・・ 条件 continue; ・・・ }while(0); >>387 一応汎用のレーザープリンターなんだ 30年って一寸行き過ぎだな 95が出てきた頃だから、20年前か >>394 GOTOを怖がるな。 俺は反GOTO教は抜けた。 まぁ乱用しようとも思わんけど。 >>392 文脈で察してくれ。 boolはいったことだし。 B 判定 A B 判定 A B … みたいに do { } while () のブロックの途中に飛び込んで開始するようなのが悩ましい goto ENTER; do { A(); ENTER: B(); } while(条件); 出口が複数は可だけどエントリーポイントが変なとこにあるのは読みにくいからやめたほうがいい。 この例の場合はB Aの無限ループにして、Bのあとの条件で脱出するのが定石。 for(;;) { B(); if (条件) break; A(); }; こんな感じですか。 やっぱり頭から入っていくほうが読みやすいし… 処理内容がそうならそういうことなんだろうが、 見ていて気持ちが悪くなるロジックだな、すまん エントリーポイントが変なとこって、mainだって1行目にはまずならないしな 実装されることなく廃止になったキーワードにentryつーのがあって そいつがおそらくは1行目に entry main; とか持ってこれるようにするつもりだったのかもな >>397 昔の BASIC を思い起こさせる goto の使い方だなw gotoは禁止はしないが、異常系の終了処理にジャンプするパターンだけ許容だな。 コンストラクター/デストラクターのような機構があれば 異常時の後始末は割と楽に書けるっすね >>408 volatileをつけ忘れて最適化で暴走するなんてよくあること。 >>395 1995年頃でLBPだと16bitから32bit CPUに移行する頃だから配列サイズが最大255なんて言うのはさすがに見たことないわ ちなみにうちはSH-2+独自モニタからR3000+VxWorksへの移行期だった コンパイラもチップベンダーかOSベンダーのものを使ってた gotoを後始末以外の使い方して変な所に飛ばしたりするから禁止って言われるんだよな。 昔のBASICにはON ERROR GOTOとかON ERROR GOSUBつーのがあって 異常系から復帰できたんだよな、それがCやC++にはない RESUME NEXTに相当する処理はsetjmp.hにはない gfortranで言うところのfcheck=allを設定した時のように配列の範囲外アクセスを検知したいのですが、いい方法はありますか? Linuxなので代用を探していたらvalgrindに辿り着きました ありがとうございます 初期化 タイトル ... GOTO 本編 GAME OVER ... GOTO タイトル ゲーム本編 ... GOTO GAME OVER >>412 まあ、ないけど、エラーになったら自分でif文使って分岐すれば良いだけでは? C言語は単に言語レベルでのそういう便利機能が少ないってだけで実現する方法は内部的な動作まで考えたら結局は同じにしかならんと思うよ、 C言語はマクロアセンブラから派生した感じなんで、言語体系はお世話にも良いとは言えないんだよな。 当時はマシン語で演算結果フラグで条件ジャンプや条件コールしてた煩わしさから開放されただけでも有り難かったんだ。 そんなチープな言語にオブジェクト指向だの例外処理だのとか求めて迷走したのがC++ ええい、いっそ作り直してしまえって出したのがJavaやC# だからC言語使う時点で諦めれ。 >>421 そのif文でゴチャゴチャしだしたら「例外処理」を名乗れない 基本的にウオーターフォールを守るのが大事やな。 そのうえでどこに飛びたいかって感じ。 >>423 名乗らんでいいのでは? Cが不便なら他の言語使えばいいじゃない。 >>428 ああ、議論できないのね いいよ話さなくて ここで幾ら議論してもC言語は変わらない。 Cから派生した言語を新たに作るというのであれば議論することには意味があるだろうが、そうでないならそれはただの愚痴だ。 おまえさあCの例外処理が言語のビルトインとか思っているわけ? Cは変わらないとか言っちゃってるけど、 その現状のCがわかってないのに変わったかどうか気付けるのか? 一応errnoだったかっていう、失敗理由を示す変数がある事はある。忘れられてるけど。 C言語で唯一トラブルシューティングに使える変数。 >>436 > その現状のCがわかってないのに お前だけだろ w >>437 ライブラリレベルの話を入れるかどうかは悩ましいな 普通の言語なら入れなくてもいいと思うがC言語にはsetjmp/longjmpなんて言うとんでもないものもあるからなぁ errnoだってwww あれが例外処理なのか setjmpがどうとんでもないのか具体的には言えないんだろうな だから聞かない >>439 大域ジャンプするとエラー処理したところが戻ったりして変数グチャグチャになることがあるからな。 まぁ、C++の例外も大域ジャンプだし。個人的には使わないな。 古き良き-1やら_boolであきらめる方が精神的には良い。 んで、趣味位のケースなら正常系だけ書いておけば大体問題ない。 エラー系は大体ロジックエラーだからデバッグで落とす。 >>439 > setjmpがどうとんでもないのか具体的には言えないんだろうな 他の言語でライブラリレベルで実装してる例はないから まともな頭があれば理解できるはず あれジャンプじゃなくて、スタックロールバックだからな。どっちかっていうとリセットの類。 他の言語でこれは実装できない。というかやりたくはないだろう。 大域ジャンプ+動的メモリアローケート。あぁおそろしい。 なので、大域ジャンプはやめましょう。 >>440 > 大域ジャンプするとエラー処理したところが戻ったりして変数グチャグチャになることがあるからな。 それはお前の能力が足りないだけの話だろ w > まぁ、C++の例外も大域ジャンプだし。 C++はデストラクタとかの処理も要るからライブラリレベルでは実現できない そう言う処理を全てプログラマに押し付けられるC言語だからできるってことでもある >>445 あーすげー。この人、他人がいじった変数全部把握してるんだな。すげー。 メモリ確保したのなかったことになっても正常系に戻せるんだな。 超人か!! C++のクラス機構をライブラリで実装するときは、構文糖入れたりとか、イベントモデル入れたりとか。 エネルギーばかりかかって収穫がない。 >>436 Cには言語レベルでの例外処理はないのでは?何のことを指してそう言っているのか? Cにだって例外処理はある。 でもそれって、CPUの例外割り込みの事だけどね。 あー結局言語仕様じゃ無いじゃんw 割り込みっていうならシグナルがあるがしかしOSの問題だよな? てか標準じゃないか。それにシグナルのために特別な言語仕様が作られてもいない。 >>441 現状のCの話じゃなかったのか? なんで他の言語が出てくるんだ 俺はてっきりsetjmpの仕様がとんでもないと言っているのかと思ったが 実装方法がとんでもないと言っているのか? あれか動作保証のないマイクロ診断命令でも使っていると言いたいの? >>448 言語を定義する規格票が定義しているライブラリのことだよ まさか知らんのか? 何やら雰囲気が悪くなってるように感じるけど、カレンダー絡みかな。 やたら突っかかってくるやつを構ってやっているだけだが >>454 知らんなあ。Cの例外処理ってなんなの? >>457 そうか、知らんのか じゃあ話にならんな 人の話の腰を折ることに専念せざるを得ない防戦一方なつまらんやつ ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる