C言語なら俺に聞け 149
■ このスレッドは過去ログ倉庫に格納されています
授業で使ったからこれでいいかなーって感じ、これといった理由ないです笑 最近はどんなコンパイラーが主流なんです? MSのVisual Stdioに入ってるVC++か、gcc か、clangだね。 bcpad使った事ないけど、それで使えるbccも地味に生き残ってて進化してた。 (久しぶりに見に行ったらフリーのは最新じゃないけど、地味に進化してた) エンバカデロがまだインプレス(買収される前)だったり、ボーランド(社名変更前)だったりしてた時代のbccコンパイラ環境設定記事がまんま使えるはず。 LinuxまたはWindowsのWSLのUbuntu等やCygwinの中でもgccが動く。Macでも中はUNIXなので動く。 windowsならmsvc unix、unixクローンならgcc コレで十分 windowsでいちいちgccでコンパイルする必要なんかない たまに確認に使う程度 Windowsでネイティブに動かせるGCCもあるし、 無理してVC使わなくても良いと思う 今調べたらけっこうあるんだな、、 これのここがダメ!とかここが強み!とかあったら教えて欲しい🙏 Winならmsvc(VC++)かなぁ。。。速いしVS入れれば個人用途に限りMFC(MSのC++ライブラリ)付きで無料で使える。 ただ、最新のC/C++への対応状況は多分一番対応が悪い。 つい先月見た限りでは、bccは地味に対応状況は良いので、Win32APIが付いてて最新のC/C++使いたいってのには一番環境整え易い。(setbccで一発) Linux/Unix系はclangかな。 gccにはconio.hが無い。(msvc、bcc、clangにはある) 最新のC/C++対応状況じゃclangとgccが2強だけど、Win用にWin32APIは最初から付いてたか分からない。 WinでGUIするのに情報少なかったから、最新のC/C++の勉強にしか使ってない。 conio ライブラリの ncurses を使った Linux 用の互換ライブラリはあるよ(多分UNIX系OSならLinux以外でも動くような気がするが)。 https://ja.osdn.net/projects/sfnet_linux-conioh/ ていうか conio と curses ライブラリの両方が存在する状態になってから30年ぐらい経ってるので既に世界中で互換ライブラリは作られてると思う。 UNIX系OSでconioが標準的なものとして取り入れられない理由はもっと昔から curses や termios があって根付いていたからだと思う。 後から出てきた MS-DOS 画面専用ライブラリを組み込む気になる人はあまりいなかったんだろう。 助かった。 昔読んだ入門書に環境依存と書いてたけど、互換ライブラリあるんだね。 getch関数地味に使うのよ。 調べたらバッファオフしてから普通のgetchar使ってるのか。 そのままLinux流を覚えても良いかな。 どっちにしても良い機会だった。 有り難う。 >>371 > WinでGUIするのに情報少なかったから、最新のC/C++の勉強にしか使ってない。 MFCなんて言ってるから少ないんだよ。それ、20年前の話だし。 MFC -> .NET(Forms) -> .NET(WPF) -> UWPか?もう一つくらい有った気もしたが。 『標準』への対応という意味では遅いけど、 そもそも標準が糞な所はMS独自拡張が行われているからそれなりには困らない。 最新のならC++11にはほぼ対応してたはずだし、「どれがいいですか?」なんて聞く奴には問題にならない。 まあ、お前らは最新の文法を使えることが腕前だと勘違いしているようだから、大問題なのだろうけど。 それも含めて自由にやればいいが。 Borland Builderは一時期Cをリードしたのは事実だが、今だに開発が継続されていたのは俺も今知ったレベル。 Borland信者でなければ普通は地雷扱いで使わない。 というか、win環境ならVS以外を考える意味がない。 無料でGUIのIDEなら第一選択肢がVSで、実際それで十分で終わり、のはず。 無駄なところで苦労したくなければ、とりあえずみんなが使ってる物を使っておけ。 C/C++でFormsやWPFなんて使えないんだからしょうがないじゃん。 普通の人やMSの定義なら「使える」わけだが。 まあどう見ても平行線だからもういいが。 >>371 bccって揃えやすいか? ダウンロードするのに個人的なことを根掘り葉掘り聞かれるのが たとえば俺なんかウゼーと思うが 対応状況が良いって、C++98だぜ? テンプレート実引数にメンバポインタを渡すとコケるあたり致命的だろ >>378 いやこっちだろ。一応ClangベースでC++11らしいぜ。 https://www.embarcadero.com/jp/free-tools/ccompiler Clang標準のGUI環境としてはありなのか? 或いはVSでgccやClangを動作させている奴もいるし、そっちの方がマシなのか? いずれにしても人柱物件だと思うぜ。勇者に期待だな。 最近はwindowsでもQt使ってくれみたいな話は多いですね 一応訂正(補完)しておく。 × > Clang標準のGUI環境としてはありなのか? ○ Clang標準のGUI環境『のIDE』としてはありなのか? 今更CでGUIアプリを作る意味はないし、Qtも流行らないよ。 やれば分かるが、GUIに関しては今現在はHTML/CSS/JavaScriptが最強だ。 マジでそれ以前のGUIなんて全部ゴミ。 だから全部の環境がHTML/CSS/JavaScriptを追いかけているのではないかな。 WPFもGtkもまだCSS部分が出来てない。Qtも見た目その辺の感じ。 Qtはそもそも今時珍しく仕様を開示してない.。この辺が超絶イケてない。 (例:QMLのビデオを試しにみようとしたが目隠しが出る) あとQtはgpl/lgpl3でもライセンスされてるぞ?ドキュメントも公開されてる。 仕様を開示してないとかどこ見て言ってるんだよ >>382 WebGLはGUIではなくグラ(フィックス)だし、 それ主体ならMFCでも大して変わらないと思うが。 Canvas自体はむしろ旧インタフェースをHTML側に輸入したものだし。 ただ、GUIやるならマジでHTML/CSSのお手軽さは一度試した方がいい。 今のところ他プラットフォームも同様の場所を目指しているから、無駄にはならんし。 CanvasでGUIやる気なら、背景にjpg貼ったなんちゃって仕様のHTMLの方が楽だし、見た目だけなら同じに出来る。 もちろんCanvasの上や下にHTMLを重ねてそっちでイベントだけ取り扱うことも出来る。 これらは旧来のインタフェース(Forms等)でも出来るが、それ用に設計されてないからいろいろ話が面倒になる。 が、まあ、CでGUIアプリを作ろうとすること自体が若干間違いで、 ビュワー等大きなデータを扱う(=速度がそれなりに必要)でなければ、 60fpsさえ出れば何でもいいし、Cでやる意味はないよ。 >>383 他環境と比べての話だぞ。 以前ドキュメント探してもろくなのが無かったし、 今日チュートリアルビデオを見ようとしても登録しないと目隠しが出るし。 こんなのでQtが流行るわけがないね。考え方が15年以上遅れてる。 それでもQtと心中するのも自由だけど。 >>384 開示してないって断言してるじゃん。チュートリアルは仕様じゃないよ? 意見変えるならそう言ってよ。 >>385 変えてない。Qtはゴミだよ。 あれで公開していると思うのなら他フレームワーク等見てみろよ。 ほとんどC言語関係ないけどQtは最初,マルチプラットフォームで使えてC++バインディングが公式で提供されているっていう理由で かなーり期待したんだけどね……。結局今はGTK+に戻ってしまった。 Cってほんとに実行速度が速いの? 他のコンパイル式の言語に速度で勝る理由が分からん。 インタプリタならともかく。 ・C言語自体が単純で低水準、変換しやすい ・コンパイラの最適化とそこに投入された人月 というわけでC言語そのものじゃなくてコンパイラで生成された機械語が早い >>311 よくもまあPL/SQLを知らないのに批判できるよな。 PL/SQLの例外処理はOracle DatabaseがSQL、ビルトインパッケージの結果をうまく例外として伝播してくれる。 あなたは単に例外を作り出す方の実装が悪いものを見ているだけ。 >>317 アドレスを指しているアドレスがポインタ。 ポインタが指しているアドレスにポインタがあるわけではない。 >>388 C言語は低水準言語であるから、うまくやれば速いマシン語になるが、ちょっとしたことでむしろ遅くなるマシン語を生みやすい。 アーキテクチャの知識がない場合は、誤解したアーキテクチャを想定したコードを書いてしまい、実行速度が遅いものができあがる。 >>392 >>393 どうやら違う世界線から紛れ込んできたと見える なんでこういうcrazyなことを言う輩に限って自信満々に断言するんだ 謎 初心者です。 >>392-393 のレスを読んでちょっと混乱しているんですが、 C言語は高水準言語で、 ポインタ変数自体は「アドレスを格納できる4バイト?の変数」っていう認識で合っていますか? 何バイトかは決まっとらん。 サイズに注意出来るようになったらあなたは中級者。 あーそうか、 4byte(32bit)だと0x00000000から0xFFFFFFFFまでの?4294967296通りのアドレスが保存できるんですね。 なので処理系?によって変わるってことなんですね。 ありがとうございます。 この頃の64bit環境だとアドレスも64bitだと思う。 クロスコンパイルする場合や意図的に32bit用のバイナリを作るようにコンパイルする場合を除く。 ポインタ変数のサイズは32bit幅、 ただしセグメント部16bitのオフセット部16bitで 有効な全範囲はトータルで20bit。 やべー あの頃から35年も経ったのかよ 漠然と20数年かなとか思ってたよ 一体何の話をしているんです!? 教えてくださいおじい・・・紳士さま。 映画タイタニックでも「near far wherever you are」と謳われているほどポインタは面倒 >>406 …うまい でも near far とかもう通じないんじゃないかな? >>404 昔々、8086があったとさ。 めでたしめでたし。 終わり。 英語版 A long time ago,in a galaxy far,far away.... >>396 OSによる。 4バイトは8ビット(=1バイト)x4なので32ビット。 32ビットOSなら、それで正しい。 じゃあ16ビットOSや64ビットOSの場合は? いあ、知ってるよ? でも今でも意味あるの? Athlon64にPCの64ビット化を先越された時代の、その苦し紛れの拡張。 64ビット標準だけで今後PCに乗り切れる時代は来ないであろうメモリ容量をサポートしてるのに。 (理論上の限界来る前に、製造技術上の限界が来る) Winはあえて制限してるが、時代とともに緩めるだけっしょ。 このスレッドは妄想コンピュータで話すやつが張り付いているね。昔は単純な話だったけどさ。 >>413 > 64ビット標準だけで今後PCに乗り切れる時代は来ないであろうメモリ容量をサポートしてるのに。 32ビットになった時にもそんな話をしてたな w プロセスルールの限界から実用的で物理的なメモリの上限はあるんだろうけど、何がどう進化するか分からないからねぇ。 単純に超多層化プロセスルールが一般化するかもしれないし、もしかするとクラウドRAMサービスとCPUアーキテクチャが融合してその限界突破なんて時代が来るかもしれん。 人間の創造力は無限と信じよう。 4GBと言う上限は意外に早くたどり着いた 4K動画をオンメモリーで編集したいとなると 途端にぶつかる壁だな 次は誰がこの壁にたどり着くかな? Visual Studio 2017のC/C++コンパイラってどこのフォルダに置いてあるんですか (もしくはファイル名、あるいは、商標名?) 調べても「VSに付属するVisual C++にC/C++コンパイラが同梱されている」程度の 情報しか出てこない・・・ そのコンパイラは何て名前でどこに置いてあるんだ・・・ >>419 スタートメニューのVSコマンドプロンプトを開いてみい。 はい ********************************************************************** ** Visual Studio 2017 Developer Command Prompt v15.9.3 ** Copyright (c) 2017 Microsoft Corporation ********************************************************************** C:\Program Files (x86)\Microsoft Visual Studio\2017\Community \Microsoft Visual Studio\2017\Community\VC の中を compiler で検索した結果 compiler.cpp ん・・・?これ? 実行ファイルじゃなくてソースファイル・・・? 分からない、もうダメだ(絶望) その昔は cl.exe に link.exe のフロントエンドで make は別途だったが今はどうなんだろう cl.exeとかcl64.exeなどの名であると思う。 ありました!(なぜか4つも) というかcl.exeってコンパイラだったんですね コンパイラその他を呼ぶための媒介物かと思ってますた 感謝 最近はx64とかx86とかARMとかARM64とかいろんな環境があるから、コンパイラは複数必要になっている。 >とかいろんな環境があるから、コンパイラは複数必要 なるほど 勉強になりました CプログラマでいまのCPUを理解しているやつなんてごく僅か。わざわざC言語を作る必要がない。もっと高水準言語で作って、VMと優秀なコンパイラに任せた方がいい。 初心者です。 >>428 ののレスを読んでちょっと混乱しているんですが、 >>いまのCPUを理解 というのがまず何を指しているのか分かりません。 パーソナルコンピュータに内蔵されているCPUでしょうか、炊飯器に内蔵されているCPUでしょうか。 >>C言語を作る必要が無い 作らなくてもすでに存在していると思うのですが、自作が必要なものなのでしょうか。 >>もっと高水準言語 C言語自体が高水準言語だと思うのですが、これ以上の高水準とはどういう基準なんでしょうか。 自然言語をコンパイルするとかでしょうか。 >>VMと優秀なコンパイラ VMというのはVirtualMachineの略でしょうか。VM上で動作するC言語というのがあるのですか? VMを動かすほどのリソースが無いようなマシン上では何を動かすのでしょうか。 優秀なコンパイラ、ということは Cのコンパイラは優秀ではないのでしょうか。 おじい・・・紳士のみなさま、ご教授お願いいたします。 Windows でも、ファイル操作なら、Ruby ! 画面なしのツールなら、たいていのものは作れる ポインタで時間を浪費することもない 相手にするのが時間の無駄。悩む時間で基本情報とITパスポートの勉強するのがはるかにまし。 おじい、とか言って馬鹿にしちゃダメだよ。ワード、エクセルのエキスパートで、原子炉のタービンを設計するような「ものすごい人」も見てるんだからね。 あと補足だけど、30歳定年説は、人件費を削るための嘘だからね。 人不足の今時にこんなことを言ってるアホの取引先は排除すべし。 今時ハードディスク使ってモニターと照明費を削るようなケチ臭い企業とは取り引きしません! Code For Japan というイベント内でも、 PDF, Excel などの表示情報が入ったデータを、 エンジニア(住職)が供養する企画をやっているw >基本情報とITパスポートの勉強 何のことかと思って調べてみれば情報処理技術者試験のことか そう言えば昔に第一種と上級シスアドに合格してたこと思い出したわ マシン性能の限界を突破する為に、関数型プログラミングがある。 関数型は抽象表現能力は高いが実行効率を追求する様な用途向きではないぞ 生産効率も圏論などの数学的思考に慣れていないと下手すればOOPよりも悪化する可能性が高い それ以前にマシン性能を言語で突破できたらノーベル賞ものかと w CPUは関数型言語を直接実行するようにできてないから遅いでしょ。 CPUの限界を超えれる関数型言語上で関数型言語を作れば元の関数型言語の限界を突破できる。 その作った関数型言語上でまたry んなわけねーよw 関数型プログラミングはλ計算の時点で全く理想的だから 有限のアドレッシングで動いてる今のCPUには全くそぐわない だから関数型と今のCPUアーキテクチャは根柢から反りが合わないんじゃねえかと すると関数型の書法を現状の機械語に書き直すだけでロスが出てくる 理想的なモンを劣化させてるに等しいが技術上はそうするしかない そもそも関数型を直接実行できるようなCPUを人類が作れるかどうか 無限の再帰と無限のストリームが必要になっている時点で怪しい 昔どっかがLisp用にスタックコンピュータだか何だか作ってなかったっけ。 それはともかく、関数型言語でも結局どういうマシン語に落とすかだから、最適化技術で高速化は出来るはずなんだがな。 Cは低水準な操作も出来るから速いコード書けるとはいえ、素直なコードは最適化無しだと他の言語と変わらないし、 速度で言えば別に低水準な操作出来る訳でも無いFortranはC並みに速いわけで。 最適化への技術や時間の掛け方が違うってだけ。 理論的限界を超えたら、その理論のモデルが事実に反する訳だから、理論の反例になってしまう。 ループに展開されることを期待して末尾再起化にハゲむってギャグだよな。 最初からループ書けよw ループだと関数渡せないから。 あとはリストを受け取ってリスト返す関数とか、IOモナドとかは 再帰関数がそのままループになる。 (リストもモナドなので、モナドを返す再帰関数がループになると言える) 初心者です。 inline指定子について教えて頂きたいのですが、 関数ポインタからinline関数を呼び出す場合、どのように展開されるのでしょうか。 また、関数ポインタを格納する配列から呼び出すような場合はどのように展開されるのでしょうか。 inline関数の展開は環境依存 呼び出し方が如何なる方法であれ関数の構造によってはインライン展開される保証はない ループ構造を含んでいると殆ど期待できない なるほど、ありがとうございます。 まさに、 for (i = 0; i < length; i++) { func_ptrs[i](hoge); } みたいなことを試そうとしているところでした。 こういう場合は展開は期待できないということですね。 今回も勉強になりました。 gccもclangも最適化を-O3にしても if(a=='a'||a=='b'||a=='c'||a=='d'||a=='e'||a=='f') をif('a'<=a&&a<='f')に置き換えてくれないのな >>457 え?gccで -O -S で置き換えられたように見えるアセンブリ言語出力したぞ。(97引いて5以下かどうか見ているやうなやつ)。 -Oなしだと一つ一つ比較していて明らかに違う。 CPUによっては一つ一つ比較するように書いた方が速いなんてこともあるのかも知れないが、普通はそうならないように思う。 ソース全体で見たときに(a < 'a') や (a > 'f')の可能性もあるから最適化されないということでしょうか? >>457 >>461 a=='a'のときにべたの方が速いからだろ。 a-fが均等な確率だ、というのをコンパイラに対して教えてないし、教える方法もない。 だからコンパイラが勝手にそこを改変するようでは困るだろ。 (大半がa=='a'と分かっていて最速コードが欲しいときに記述出来なくなる) C言語はそういう言語なんだよ。自動的に勝手にやってくれる言語ではない。 細部まで自分で指定できるからこそ極限までチューニング出来る。 最速コードが欲しければ、a-fの確率まで考えて、自分で指定しろ、でしかない。 ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる