X



C言語なら俺に聞け 149

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん (ワッチョイ af9f-7TBo)
垢版 |
2018/10/28(日) 22:01:44.38ID:D9Gt7gmT0
!extend:checked:vvvvv:1000:512

次スレを作る時は上記1行をコピーして2行に増やして必ず1行目に入るようにしてください。

C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/

C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf

C99
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
http://kikakurui.com/x3/X3010-2003-01.html

C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/

JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/

※前スレ
C言語なら俺に聞け 148
https://mevius.5ch.net/test/read.cgi/tech/1537347410/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
0368デフォルトの名無しさん (ワッチョイ 899e-ZtDu)
垢版 |
2018/12/07(金) 21:34:48.53ID:0/x3pMw+0
windowsならmsvc
unix、unixクローンならgcc

コレで十分

windowsでいちいちgccでコンパイルする必要なんかない
たまに確認に使う程度
0371デフォルトの名無しさん (アウアウウー Sa05-/enL)
垢版 |
2018/12/08(土) 02:14:28.50ID:5PBkTMHJa
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++の勉強にしか使ってない。
0372デフォルトの名無しさん (ワッチョイ db9f-n9Ol)
垢版 |
2018/12/08(土) 05:48:44.85ID:xmV4OmOO0
conio ライブラリの ncurses を使った Linux 用の互換ライブラリはあるよ(多分UNIX系OSならLinux以外でも動くような気がするが)。
https://ja.osdn.net/projects/sfnet_linux-conioh/
ていうか conio と curses ライブラリの両方が存在する状態になってから30年ぐらい経ってるので既に世界中で互換ライブラリは作られてると思う。

UNIX系OSでconioが標準的なものとして取り入れられない理由はもっと昔から curses や termios があって根付いていたからだと思う。
後から出てきた MS-DOS 画面専用ライブラリを組み込む気になる人はあまりいなかったんだろう。
0373デフォルトの名無しさん (アウアウウー Sa05-/enL)
垢版 |
2018/12/08(土) 08:04:27.69ID:5PBkTMHJa
助かった。
昔読んだ入門書に環境依存と書いてたけど、互換ライブラリあるんだね。
getch関数地味に使うのよ。

調べたらバッファオフしてから普通のgetchar使ってるのか。
そのままLinux流を覚えても良いかな。

どっちにしても良い機会だった。
有り難う。
0374デフォルトの名無しさん (ワッチョイ f14f-ZtDu)
垢版 |
2018/12/08(土) 10:14:50.43ID:+xxwdKok0
>>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で、実際それで十分で終わり、のはず。
無駄なところで苦労したくなければ、とりあえずみんなが使ってる物を使っておけ。
0378デフォルトの名無しさん (ワッチョイ 99cb-n9Ol)
垢版 |
2018/12/08(土) 11:51:32.86ID:PBftE5qw0
>>371
bccって揃えやすいか?
ダウンロードするのに個人的なことを根掘り葉掘り聞かれるのが
たとえば俺なんかウゼーと思うが

対応状況が良いって、C++98だぜ?
テンプレート実引数にメンバポインタを渡すとコケるあたり致命的だろ
0381デフォルトの名無しさん (ワッチョイ f14f-ZtDu)
垢版 |
2018/12/08(土) 13:05:07.00ID:+xxwdKok0
一応訂正(補完)しておく。

× > Clang標準のGUI環境としてはありなのか?
○ Clang標準のGUI環境『のIDE』としてはありなのか?

今更CでGUIアプリを作る意味はないし、Qtも流行らないよ。
やれば分かるが、GUIに関しては今現在はHTML/CSS/JavaScriptが最強だ。
マジでそれ以前のGUIなんて全部ゴミ。
だから全部の環境がHTML/CSS/JavaScriptを追いかけているのではないかな。
WPFもGtkもまだCSS部分が出来てない。Qtも見た目その辺の感じ。
Qtはそもそも今時珍しく仕様を開示してない.。この辺が超絶イケてない。
(例:QMLのビデオを試しにみようとしたが目隠しが出る)
0384デフォルトの名無しさん (ワッチョイ f14f-ZtDu)
垢版 |
2018/12/08(土) 15:59:03.07ID:+xxwdKok0
>>382
WebGLはGUIではなくグラ(フィックス)だし、
それ主体ならMFCでも大して変わらないと思うが。
Canvas自体はむしろ旧インタフェースをHTML側に輸入したものだし。

ただ、GUIやるならマジでHTML/CSSのお手軽さは一度試した方がいい。
今のところ他プラットフォームも同様の場所を目指しているから、無駄にはならんし。
CanvasでGUIやる気なら、背景にjpg貼ったなんちゃって仕様のHTMLの方が楽だし、見た目だけなら同じに出来る。
もちろんCanvasの上や下にHTMLを重ねてそっちでイベントだけ取り扱うことも出来る。
これらは旧来のインタフェース(Forms等)でも出来るが、それ用に設計されてないからいろいろ話が面倒になる。

が、まあ、CでGUIアプリを作ろうとすること自体が若干間違いで、
ビュワー等大きなデータを扱う(=速度がそれなりに必要)でなければ、
60fpsさえ出れば何でもいいし、Cでやる意味はないよ。

>>383
他環境と比べての話だぞ。
以前ドキュメント探してもろくなのが無かったし、
今日チュートリアルビデオを見ようとしても登録しないと目隠しが出るし。
こんなのでQtが流行るわけがないね。考え方が15年以上遅れてる。
それでもQtと心中するのも自由だけど。
0387デフォルトの名無しさん (ワッチョイ 4bbe-5svG)
垢版 |
2018/12/08(土) 18:40:20.20ID:hIfZgykd0
ほとんどC言語関係ないけどQtは最初,マルチプラットフォームで使えてC++バインディングが公式で提供されているっていう理由で
かなーり期待したんだけどね……。結局今はGTK+に戻ってしまった。
0389デフォルトの名無しさん (ワッチョイ 9312-ZtDu)
垢版 |
2018/12/09(日) 11:07:31.14ID:dkLieERx0
・C言語自体が単純で低水準、変換しやすい
・コンパイラの最適化とそこに投入された人月

というわけでC言語そのものじゃなくてコンパイラで生成された機械語が早い
0391デフォルトの名無しさん (ワッチョイ 93bd-xVWz)
垢版 |
2018/12/09(日) 15:56:34.95ID:LXVWu9Mt0
>>311
よくもまあPL/SQLを知らないのに批判できるよな。

PL/SQLの例外処理はOracle DatabaseがSQL、ビルトインパッケージの結果をうまく例外として伝播してくれる。

あなたは単に例外を作り出す方の実装が悪いものを見ているだけ。
0392デフォルトの名無しさん (ワッチョイ 93bd-xVWz)
垢版 |
2018/12/09(日) 15:58:53.53ID:LXVWu9Mt0
>>317
アドレスを指しているアドレスがポインタ。

ポインタが指しているアドレスにポインタがあるわけではない。
0393デフォルトの名無しさん (ワッチョイ 93bd-xVWz)
垢版 |
2018/12/09(日) 16:03:51.04ID:LXVWu9Mt0
>>388
C言語は低水準言語であるから、うまくやれば速いマシン語になるが、ちょっとしたことでむしろ遅くなるマシン語を生みやすい。

アーキテクチャの知識がない場合は、誤解したアーキテクチャを想定したコードを書いてしまい、実行速度が遅いものができあがる。
0398デフォルトの名無しさん (ワッチョイ 13d4-n9Ol)
垢版 |
2018/12/10(月) 15:44:39.90ID:Yf20pj4f0
あーそうか、
4byte(32bit)だと0x00000000から0xFFFFFFFFまでの?4294967296通りのアドレスが保存できるんですね。
なので処理系?によって変わるってことなんですね。
ありがとうございます。
0399デフォルトの名無しさん (アウアウウー Sa05-MnXc)
垢版 |
2018/12/10(月) 15:58:27.14ID:4x6+51xya
この頃の64bit環境だとアドレスも64bitだと思う。
クロスコンパイルする場合や意図的に32bit用のバイナリを作るようにコンパイルする場合を除く。
0408デフォルトの名無しさん (アウアウウー Sa05-MnXc)
垢版 |
2018/12/10(月) 20:29:46.12ID:4x6+51xya
>>404
昔々、8086があったとさ。
めでたしめでたし。
終わり。
0409デフォルトの名無しさん (アウアウウー Sa05-MnXc)
垢版 |
2018/12/10(月) 20:32:35.54ID:4x6+51xya
英語版

A long time ago,in a galaxy
far,far away....
0410デフォルトの名無しさん (アウアウウー Sa05-/enL)
垢版 |
2018/12/10(月) 23:14:07.07ID:l83Jt/Qga
>>396
OSによる。
4バイトは8ビット(=1バイト)x4なので32ビット。
32ビットOSなら、それで正しい。

じゃあ16ビットOSや64ビットOSの場合は?
0411デフォルトの名無しさん (アウアウウー Sa05-/enL)
垢版 |
2018/12/10(月) 23:16:39.78ID:l83Jt/Qga
>>400
セグメントは16ビット迄だよね〜。
0413デフォルトの名無しさん (アウアウウー Sa05-/enL)
垢版 |
2018/12/10(月) 23:38:01.37ID:l83Jt/Qga
いあ、知ってるよ?
でも今でも意味あるの?
Athlon64にPCの64ビット化を先越された時代の、その苦し紛れの拡張。

64ビット標準だけで今後PCに乗り切れる時代は来ないであろうメモリ容量をサポートしてるのに。
(理論上の限界来る前に、製造技術上の限界が来る)

Winはあえて制限してるが、時代とともに緩めるだけっしょ。
0414デフォルトの名無しさん (アウアウクー MM4d-xVWz)
垢版 |
2018/12/10(月) 23:53:27.02ID:bJUChMIiM
このスレッドは妄想コンピュータで話すやつが張り付いているね。昔は単純な話だったけどさ。
0417デフォルトの名無しさん (ワッチョイ 31b3-EBCi)
垢版 |
2018/12/11(火) 09:17:41.73ID:7sleUDEz0
プロセスルールの限界から実用的で物理的なメモリの上限はあるんだろうけど、何がどう進化するか分からないからねぇ。
単純に超多層化プロセスルールが一般化するかもしれないし、もしかするとクラウドRAMサービスとCPUアーキテクチャが融合してその限界突破なんて時代が来るかもしれん。
人間の創造力は無限と信じよう。
0419デフォルトの名無しさん (ワッチョイ dbf7-pji+)
垢版 |
2018/12/11(火) 12:57:57.93ID:ZRU2RXnk0
Visual Studio 2017のC/C++コンパイラってどこのフォルダに置いてあるんですか
(もしくはファイル名、あるいは、商標名?)
調べても「VSに付属するVisual C++にC/C++コンパイラが同梱されている」程度の
情報しか出てこない・・・
そのコンパイラは何て名前でどこに置いてあるんだ・・・
0421デフォルトの名無しさん (ワッチョイ dbf7-pji+)
垢版 |
2018/12/11(火) 13:42:28.53ID:ZRU2RXnk0
はい
**********************************************************************
** Visual Studio 2017 Developer Command Prompt v15.9.3
** Copyright (c) 2017 Microsoft Corporation
**********************************************************************
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community
0422デフォルトの名無しさん (ワッチョイ dbf7-pji+)
垢版 |
2018/12/11(火) 13:48:36.76ID:ZRU2RXnk0
\Microsoft Visual Studio\2017\Community\VC の中を compiler で検索した結果

compiler.cpp

ん・・・?これ?
実行ファイルじゃなくてソースファイル・・・?
分からない、もうダメだ(絶望)
0425デフォルトの名無しさん (ワッチョイ dbf7-pji+)
垢版 |
2018/12/11(火) 14:00:29.46ID:ZRU2RXnk0
ありました!(なぜか4つも)
というかcl.exeってコンパイラだったんですね
コンパイラその他を呼ぶための媒介物かと思ってますた
感謝
0427デフォルトの名無しさん (ワッチョイ dbf7-pji+)
垢版 |
2018/12/11(火) 14:51:38.89ID:ZRU2RXnk0
>とかいろんな環境があるから、コンパイラは複数必要
なるほど 勉強になりました
0428デフォルトの名無しさん (アウアウクー MM4d-xVWz)
垢版 |
2018/12/11(火) 20:20:15.88ID:3ovMnnL0M
CプログラマでいまのCPUを理解しているやつなんてごく僅か。わざわざC言語を作る必要がない。もっと高水準言語で作って、VMと優秀なコンパイラに任せた方がいい。
0429デフォルトの名無しさん (ワッチョイ 13d4-n9Ol)
垢版 |
2018/12/11(火) 20:46:12.25ID:g9W94UvY0
初心者です。
>>428ののレスを読んでちょっと混乱しているんですが、

>>いまのCPUを理解
というのがまず何を指しているのか分かりません。
パーソナルコンピュータに内蔵されているCPUでしょうか、炊飯器に内蔵されているCPUでしょうか。

>>C言語を作る必要が無い
作らなくてもすでに存在していると思うのですが、自作が必要なものなのでしょうか。

>>もっと高水準言語
C言語自体が高水準言語だと思うのですが、これ以上の高水準とはどういう基準なんでしょうか。
自然言語をコンパイルするとかでしょうか。

>>VMと優秀なコンパイラ
VMというのはVirtualMachineの略でしょうか。VM上で動作するC言語というのがあるのですか?
VMを動かすほどのリソースが無いようなマシン上では何を動かすのでしょうか。
優秀なコンパイラ、ということは Cのコンパイラは優秀ではないのでしょうか。

おじい・・・紳士のみなさま、ご教授お願いいたします。
0437デフォルトの名無しさん (ワッチョイ e18a-Po2/)
垢版 |
2018/12/12(水) 06:43:02.35ID:MN/7vBAt0
>基本情報とITパスポートの勉強

何のことかと思って調べてみれば情報処理技術者試験のことか
そう言えば昔に第一種と上級シスアドに合格してたこと思い出したわ
0439デフォルトの名無しさん (ワッチョイ e18a-24dN)
垢版 |
2018/12/12(水) 11:23:33.13ID:MN/7vBAt0
関数型は抽象表現能力は高いが実行効率を追求する様な用途向きではないぞ
生産効率も圏論などの数学的思考に慣れていないと下手すればOOPよりも悪化する可能性が高い
0440デフォルトの名無しさん (アウアウウー Sa05-MnXc)
垢版 |
2018/12/12(水) 12:19:40.64ID:XAdiQzbba
( ´_ゝ`)フーン
0445デフォルトの名無しさん (アウアウウー Sa05-MnXc)
垢版 |
2018/12/12(水) 13:11:22.57ID:XAdiQzbba
SFのスレはここですか?
0446デフォルトの名無しさん (ワッチョイ 91d2-3M3s)
垢版 |
2018/12/12(水) 13:12:45.03ID:5HIThNOt0
【平和を実現するために】 武器調達の中止、格差拡大の抑止、労働移民の禁止、国政からのバカウヨ排除
http://rosie.5ch.net/test/read.cgi/liveplus/1544586377/l50
0447デフォルトの名無しさん (ワッチョイ 9312-ZtDu)
垢版 |
2018/12/12(水) 13:15:11.92ID:SHf/dQVX0
関数型プログラミングはλ計算の時点で全く理想的だから
有限のアドレッシングで動いてる今のCPUには全くそぐわない
だから関数型と今のCPUアーキテクチャは根柢から反りが合わないんじゃねえかと

すると関数型の書法を現状の機械語に書き直すだけでロスが出てくる
理想的なモンを劣化させてるに等しいが技術上はそうするしかない

そもそも関数型を直接実行できるようなCPUを人類が作れるかどうか
無限の再帰と無限のストリームが必要になっている時点で怪しい
0448デフォルトの名無しさん (アウアウウー Sa05-/enL)
垢版 |
2018/12/12(水) 13:25:42.01ID:LIx8RHBsa
昔どっかがLisp用にスタックコンピュータだか何だか作ってなかったっけ。

それはともかく、関数型言語でも結局どういうマシン語に落とすかだから、最適化技術で高速化は出来るはずなんだがな。
Cは低水準な操作も出来るから速いコード書けるとはいえ、素直なコードは最適化無しだと他の言語と変わらないし、
速度で言えば別に低水準な操作出来る訳でも無いFortranはC並みに速いわけで。
最適化への技術や時間の掛け方が違うってだけ。
0452デフォルトの名無しさん (アウアウウー Sa05-/enL)
垢版 |
2018/12/12(水) 15:38:07.68ID:LIx8RHBsa
ループだと関数渡せないから。
あとはリストを受け取ってリスト返す関数とか、IOモナドとかは
再帰関数がそのままループになる。
(リストもモナドなので、モナドを返す再帰関数がループになると言える)
0453デフォルトの名無しさん (ワッチョイ cad4-UKyl)
垢版 |
2018/12/13(木) 14:18:51.88ID:oii7E7F70
初心者です。

inline指定子について教えて頂きたいのですが、
関数ポインタからinline関数を呼び出す場合、どのように展開されるのでしょうか。
また、関数ポインタを格納する配列から呼び出すような場合はどのように展開されるのでしょうか。
0454デフォルトの名無しさん (ラクペッ MM9b-8Y2+)
垢版 |
2018/12/13(木) 14:32:27.38ID:1m7XwvCgM
inline関数の展開は環境依存
呼び出し方が如何なる方法であれ関数の構造によってはインライン展開される保証はない
ループ構造を含んでいると殆ど期待できない
0455デフォルトの名無しさん (ワッチョイ cad4-UKyl)
垢版 |
2018/12/13(木) 14:56:19.82ID:oii7E7F70
なるほど、ありがとうございます。
まさに、
for (i = 0; i < length; i++) {
 func_ptrs[i](hoge);
}
みたいなことを試そうとしているところでした。
こういう場合は展開は期待できないということですね。

今回も勉強になりました。
0458デフォルトの名無しさん (アウアウウー Sa4f-mTCp)
垢版 |
2018/12/13(木) 18:40:11.12ID:Fv0+Omexa
Tではないと
0459デフォルトの名無しさん (アウアウウー Sa4f-mTCp)
垢版 |
2018/12/13(木) 18:48:07.23ID:Fv0+Omexa
>>457
え?gccで -O -S で置き換えられたように見えるアセンブリ言語出力したぞ。(97引いて5以下かどうか見ているやうなやつ)。
-Oなしだと一つ一つ比較していて明らかに違う。
0461デフォルトの名無しさん (アウアウウー Sa4f-mTCp)
垢版 |
2018/12/13(木) 18:51:31.61ID:Fv0+Omexa
CPUによっては一つ一つ比較するように書いた方が速いなんてこともあるのかも知れないが、普通はそうならないように思う。
0463デフォルトの名無しさん (ワッチョイ f34f-rp3U)
垢版 |
2018/12/13(木) 19:08:30.18ID:y280e6J90
>>457
>>461
a=='a'のときにべたの方が速いからだろ。
a-fが均等な確率だ、というのをコンパイラに対して教えてないし、教える方法もない。
だからコンパイラが勝手にそこを改変するようでは困るだろ。
(大半がa=='a'と分かっていて最速コードが欲しいときに記述出来なくなる)

C言語はそういう言語なんだよ。自動的に勝手にやってくれる言語ではない。
細部まで自分で指定できるからこそ極限までチューニング出来る。
最速コードが欲しければ、a-fの確率まで考えて、自分で指定しろ、でしかない。
0464デフォルトの名無しさん (ワッチョイ 2b93-eQ7e)
垢版 |
2018/12/13(木) 19:28:54.20ID:VenLBJVu0
ワシのとこでも -O で「即値97を引いて即値5と比較…」が出たわ。
-O なしだと真っ正直に即値との比較が6回。

>>457 に書かれた通りの ('a'<=a&&a<='f') にならないと言っても、
'a'以上か? 'f'以下か? の判定2回よりもっと効率的になってるでしょ。

もちろん gcc のバージョンによる違いかも知れんが。
0466デフォルトの名無しさん (アウアウウー Sa4f-mTCp)
垢版 |
2018/12/13(木) 19:58:30.01ID:Fv0+Omexa
>>463
あー。なるほど。

かといって言語の規格として最適化についてまで決まってたっけ?
その辺は決まってなくてコンパイラしだいのような気がするが。
0467デフォルトの名無しさん (アウアウウー Sa4f-mTCp)
垢版 |
2018/12/13(木) 20:01:00.67ID:Fv0+Omexa
>>465
しかし関数へのポインタが作れてしまう時点でそれはもう inline ではなくなっているように思うのだが。
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況