C言語なら俺に聞け 149

■ このスレッドは過去ログ倉庫に格納されています
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
2018/12/08(土) 11:51:32.86ID:PBftE5qw0
>>371
bccって揃えやすいか?
ダウンロードするのに個人的なことを根掘り葉掘り聞かれるのが
たとえば俺なんかウゼーと思うが

対応状況が良いって、C++98だぜ?
テンプレート実引数にメンバポインタを渡すとコケるあたり致命的だろ
2018/12/08(土) 12:13:07.40ID:+xxwdKok0
>>378
いやこっちだろ。一応ClangベースでC++11らしいぜ。
https://www.embarcadero.com/jp/free-tools/ccompiler

Clang標準のGUI環境としてはありなのか?
或いはVSでgccやClangを動作させている奴もいるし、そっちの方がマシなのか?
いずれにしても人柱物件だと思うぜ。勇者に期待だな。
2018/12/08(土) 12:16:03.45ID:UjmNmcZda
最近はwindowsでもQt使ってくれみたいな話は多いですね
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のビデオを試しにみようとしたが目隠しが出る)
2018/12/08(土) 15:03:57.91ID:AnxWbhvF0
そうか、じゃあwebglでも使うか。
2018/12/08(土) 15:27:14.56ID:AnxWbhvF0
あとQtはgpl/lgpl3でもライセンスされてるぞ?ドキュメントも公開されてる。
仕様を開示してないとかどこ見て言ってるんだよ
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と心中するのも自由だけど。
2018/12/08(土) 17:15:39.30ID:AnxWbhvF0
>>384
開示してないって断言してるじゃん。チュートリアルは仕様じゃないよ?
意見変えるならそう言ってよ。
2018/12/08(土) 17:42:53.93ID:+xxwdKok0
>>385
変えてない。Qtはゴミだよ。
あれで公開していると思うのなら他フレームワーク等見てみろよ。
2018/12/08(土) 18:40:20.20ID:hIfZgykd0
ほとんどC言語関係ないけどQtは最初,マルチプラットフォームで使えてC++バインディングが公式で提供されているっていう理由で
かなーり期待したんだけどね……。結局今はGTK+に戻ってしまった。
2018/12/09(日) 09:54:16.91ID:8tZnBeFG0
Cってほんとに実行速度が速いの? 他のコンパイル式の言語に速度で勝る理由が分からん。
インタプリタならともかく。
2018/12/09(日) 11:07:31.14ID:dkLieERx0
・C言語自体が単純で低水準、変換しやすい
・コンパイラの最適化とそこに投入された人月

というわけでC言語そのものじゃなくてコンパイラで生成された機械語が早い
390デフォルトの名無しさん (ワッチョイ 2b61-KVvr)
垢版 |
2018/12/09(日) 15:36:30.25ID:e81YHx5p0
http://www.c-tipsref.com/reference/stdlib/div.html
この辞典の作者はnumeratorを知らないらしいなwww
391デフォルトの名無しさん (ワッチョイ 93bd-xVWz)
垢版 |
2018/12/09(日) 15:56:34.95ID:LXVWu9Mt0
>>311
よくもまあPL/SQLを知らないのに批判できるよな。

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

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

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

アーキテクチャの知識がない場合は、誤解したアーキテクチャを想定したコードを書いてしまい、実行速度が遅いものができあがる。
2018/12/09(日) 16:59:21.16ID:c1W3T6/y0
>>392
>>393
ん??
2018/12/09(日) 18:56:28.62ID:+IQ+xQud0
>>392
>>393
どうやら違う世界線から紛れ込んできたと見える

なんでこういうcrazyなことを言う輩に限って自信満々に断言するんだ
2018/12/10(月) 15:01:58.63ID:Yf20pj4f0
初心者です。
>>392-393のレスを読んでちょっと混乱しているんですが、
C言語は高水準言語で、
ポインタ変数自体は「アドレスを格納できる4バイト?の変数」っていう認識で合っていますか?
2018/12/10(月) 15:10:08.76ID:FyPZmeq6a
何バイトかは決まっとらん。
サイズに注意出来るようになったらあなたは中級者。
2018/12/10(月) 15:44:39.90ID:Yf20pj4f0
あーそうか、
4byte(32bit)だと0x00000000から0xFFFFFFFFまでの?4294967296通りのアドレスが保存できるんですね。
なので処理系?によって変わるってことなんですね。
ありがとうございます。
399デフォルトの名無しさん (アウアウウー Sa05-MnXc)
垢版 |
2018/12/10(月) 15:58:27.14ID:4x6+51xya
この頃の64bit環境だとアドレスも64bitだと思う。
クロスコンパイルする場合や意図的に32bit用のバイナリを作るようにコンパイルする場合を除く。
2018/12/10(月) 16:54:58.91ID:o+toD3xT0
ポインタ変数のサイズは32bit幅、
ただしセグメント部16bitのオフセット部16bitで
有効な全範囲はトータルで20bit。
2018/12/10(月) 16:56:42.73ID:/sc6zE4j0
いつの時代の話だろう
2018/12/10(月) 17:03:42.11ID:Ezpzf515M
プロテクトモード
何それ美味しいの?
2018/12/10(月) 17:04:09.37ID:M7qQG5lGH
やべー
あの頃から35年も経ったのかよ
漠然と20数年かなとか思ってたよ
2018/12/10(月) 17:16:13.17ID:Yf20pj4f0
一体何の話をしているんです!?
教えてくださいおじい・・・紳士さま。
2018/12/10(月) 17:33:22.27ID:OF068zeT0
16bitCPU時代のアドレスの話
2018/12/10(月) 19:37:12.53ID:cqLRK3I00
映画タイタニックでも「near far wherever you are」と謳われているほどポインタは面倒
2018/12/10(月) 20:20:50.73ID:NenbAhKQ0
>>406
…うまい

でも near far とかもう通じないんじゃないかな?
408デフォルトの名無しさん (アウアウウー Sa05-MnXc)
垢版 |
2018/12/10(月) 20:29:46.12ID:4x6+51xya
>>404
昔々、8086があったとさ。
めでたしめでたし。
終わり。
409デフォルトの名無しさん (アウアウウー Sa05-MnXc)
垢版 |
2018/12/10(月) 20:32:35.54ID:4x6+51xya
英語版

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

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

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

Winはあえて制限してるが、時代とともに緩めるだけっしょ。
414デフォルトの名無しさん (アウアウクー MM4d-xVWz)
垢版 |
2018/12/10(月) 23:53:27.02ID:bJUChMIiM
このスレッドは妄想コンピュータで話すやつが張り付いているね。昔は単純な話だったけどさ。
2018/12/11(火) 00:26:54.92ID:qpk98o5j0
8ビットがなつかしいね?
2018/12/11(火) 07:34:54.16ID:zUaOIyWC0
>>413
> 64ビット標準だけで今後PCに乗り切れる時代は来ないであろうメモリ容量をサポートしてるのに。
32ビットになった時にもそんな話をしてたな w
2018/12/11(火) 09:17:41.73ID:7sleUDEz0
プロセスルールの限界から実用的で物理的なメモリの上限はあるんだろうけど、何がどう進化するか分からないからねぇ。
単純に超多層化プロセスルールが一般化するかもしれないし、もしかするとクラウドRAMサービスとCPUアーキテクチャが融合してその限界突破なんて時代が来るかもしれん。
人間の創造力は無限と信じよう。
2018/12/11(火) 10:15:17.85ID:qpk98o5j0
4GBと言う上限は意外に早くたどり着いた
4K動画をオンメモリーで編集したいとなると
途端にぶつかる壁だな

次は誰がこの壁にたどり着くかな?
2018/12/11(火) 12:57:57.93ID:ZRU2RXnk0
Visual Studio 2017のC/C++コンパイラってどこのフォルダに置いてあるんですか
(もしくはファイル名、あるいは、商標名?)
調べても「VSに付属するVisual C++にC/C++コンパイラが同梱されている」程度の
情報しか出てこない・・・
そのコンパイラは何て名前でどこに置いてあるんだ・・・
2018/12/11(火) 13:14:43.83ID:CGbAPZXN0
>>419
スタートメニューのVSコマンドプロンプトを開いてみい。
421デフォルトの名無しさん (ワッチョイ 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
422デフォルトの名無しさん (ワッチョイ dbf7-pji+)
垢版 |
2018/12/11(火) 13:48:36.76ID:ZRU2RXnk0
\Microsoft Visual Studio\2017\Community\VC の中を compiler で検索した結果

compiler.cpp

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

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

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

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

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

おじい・・・紳士のみなさま、ご教授お願いいたします。
2018/12/11(火) 21:55:08.95ID:ihMfYHRY0
Windows でも、ファイル操作なら、Ruby !
画面なしのツールなら、たいていのものは作れる

ポインタで時間を浪費することもない
2018/12/11(火) 23:16:54.03ID:j8P28cRB0
>>429
嘘を嘘と(ry
2018/12/11(火) 23:27:54.09ID:CGbAPZXN0
相手にするのが時間の無駄。悩む時間で基本情報とITパスポートの勉強するのがはるかにまし。
2018/12/11(火) 23:43:31.10ID:CGbAPZXN0
おじい、とか言って馬鹿にしちゃダメだよ。ワード、エクセルのエキスパートで、原子炉のタービンを設計するような「ものすごい人」も見てるんだからね。
2018/12/11(火) 23:50:36.12ID:CGbAPZXN0
あと補足だけど、30歳定年説は、人件費を削るための嘘だからね。
人不足の今時にこんなことを言ってるアホの取引先は排除すべし。
2018/12/11(火) 23:59:29.31ID:CGbAPZXN0
今時ハードディスク使ってモニターと照明費を削るようなケチ臭い企業とは取り引きしません!
2018/12/12(水) 00:19:15.01ID:ysgUNYaF0
Code For Japan というイベント内でも、

PDF, Excel などの表示情報が入ったデータを、
エンジニア(住職)が供養する企画をやっているw
2018/12/12(水) 06:43:02.35ID:MN/7vBAt0
>基本情報とITパスポートの勉強

何のことかと思って調べてみれば情報処理技術者試験のことか
そう言えば昔に第一種と上級シスアドに合格してたこと思い出したわ
2018/12/12(水) 11:11:59.11ID:Fd1X4TAb0
マシン性能の限界を突破する為に、関数型プログラミングがある。
2018/12/12(水) 11:23:33.13ID:MN/7vBAt0
関数型は抽象表現能力は高いが実行効率を追求する様な用途向きではないぞ
生産効率も圏論などの数学的思考に慣れていないと下手すればOOPよりも悪化する可能性が高い
440デフォルトの名無しさん (アウアウウー Sa05-MnXc)
垢版 |
2018/12/12(水) 12:19:40.64ID:XAdiQzbba
( ´_ゝ`)フーン
2018/12/12(水) 12:31:12.08ID:4PEjGm8GM
それ以前にマシン性能を言語で突破できたらノーベル賞ものかと w
2018/12/12(水) 12:38:27.52ID:b75HkCZx0
CPUは関数型言語を直接実行するようにできてないから遅いでしょ。
2018/12/12(水) 12:42:36.11ID:x/hCtcVY0
フォースとともにあれ
2018/12/12(水) 12:55:07.41ID:AGB/ZeXIx
CPUの限界を超えれる関数型言語上で関数型言語を作れば元の関数型言語の限界を突破できる。
その作った関数型言語上でまたry

んなわけねーよw
445デフォルトの名無しさん (アウアウウー Sa05-MnXc)
垢版 |
2018/12/12(水) 13:11:22.57ID:XAdiQzbba
SFのスレはここですか?
446デフォルトの名無しさん (ワッチョイ 91d2-3M3s)
垢版 |
2018/12/12(水) 13:12:45.03ID:5HIThNOt0
【平和を実現するために】 武器調達の中止、格差拡大の抑止、労働移民の禁止、国政からのバカウヨ排除
http://rosie.5ch.net/test/read.cgi/liveplus/1544586377/l50
2018/12/12(水) 13:15:11.92ID:SHf/dQVX0
関数型プログラミングはλ計算の時点で全く理想的だから
有限のアドレッシングで動いてる今のCPUには全くそぐわない
だから関数型と今のCPUアーキテクチャは根柢から反りが合わないんじゃねえかと

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

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

それはともかく、関数型言語でも結局どういうマシン語に落とすかだから、最適化技術で高速化は出来るはずなんだがな。
Cは低水準な操作も出来るから速いコード書けるとはいえ、素直なコードは最適化無しだと他の言語と変わらないし、
速度で言えば別に低水準な操作出来る訳でも無いFortranはC並みに速いわけで。
最適化への技術や時間の掛け方が違うってだけ。
2018/12/12(水) 13:28:27.57ID:SHf/dQVX0
シンボリクスだ
2018/12/12(水) 14:37:12.07ID:duFENGTGd
理論的限界を超えたら、その理論のモデルが事実に反する訳だから、理論の反例になってしまう。
2018/12/12(水) 15:28:39.64ID:02Irmhu2M
ループに展開されることを期待して末尾再起化にハゲむってギャグだよな。
最初からループ書けよw
452デフォルトの名無しさん (アウアウウー Sa05-/enL)
垢版 |
2018/12/12(水) 15:38:07.68ID:LIx8RHBsa
ループだと関数渡せないから。
あとはリストを受け取ってリスト返す関数とか、IOモナドとかは
再帰関数がそのままループになる。
(リストもモナドなので、モナドを返す再帰関数がループになると言える)
2018/12/13(木) 14:18:51.88ID:oii7E7F70
初心者です。

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

今回も勉強になりました。
2018/12/13(木) 17:31:05.02ID:jSkPpV300
>>418
次は16EBの壁だな
2018/12/13(木) 18:29:51.36ID:Bj9kGxVc0
gccもclangも最適化を-O3にしても
if(a=='a'||a=='b'||a=='c'||a=='d'||a=='e'||a=='f')
をif('a'<=a&&a<='f')に置き換えてくれないのな
458デフォルトの名無しさん (アウアウウー Sa4f-mTCp)
垢版 |
2018/12/13(木) 18:40:11.12ID:Fv0+Omexa
Tではないと
459デフォルトの名無しさん (アウアウウー Sa4f-mTCp)
垢版 |
2018/12/13(木) 18:48:07.23ID:Fv0+Omexa
>>457
え?gccで -O -S で置き換えられたように見えるアセンブリ言語出力したぞ。(97引いて5以下かどうか見ているやうなやつ)。
-Oなしだと一つ一つ比較していて明らかに違う。
2018/12/13(木) 18:48:36.88ID:Gz5l93Ou0
GCCの動作環境は特定OSだけではないと思う
461デフォルトの名無しさん (アウアウウー Sa4f-mTCp)
垢版 |
2018/12/13(木) 18:51:31.61ID:Fv0+Omexa
CPUによっては一つ一つ比較するように書いた方が速いなんてこともあるのかも知れないが、普通はそうならないように思う。
2018/12/13(木) 19:07:27.96ID:oii7E7F70
ソース全体で見たときに(a < 'a') や (a > 'f')の可能性もあるから最適化されないということでしょうか?
2018/12/13(木) 19:08:30.18ID:y280e6J90
>>457
>>461
a=='a'のときにべたの方が速いからだろ。
a-fが均等な確率だ、というのをコンパイラに対して教えてないし、教える方法もない。
だからコンパイラが勝手にそこを改変するようでは困るだろ。
(大半がa=='a'と分かっていて最速コードが欲しいときに記述出来なくなる)

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

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

もちろん gcc のバージョンによる違いかも知れんが。
2018/12/13(木) 19:56:57.11ID:mMIcaeGH0
>>454
ときどき夢にみます、inline 指定がどんな場合にも百発百中 inline になるコンパイラがあればどんなに嬉しいか…
466デフォルトの名無しさん (アウアウウー Sa4f-mTCp)
垢版 |
2018/12/13(木) 19:58:30.01ID:Fv0+Omexa
>>463
あー。なるほど。

かといって言語の規格として最適化についてまで決まってたっけ?
その辺は決まってなくてコンパイラしだいのような気がするが。
467デフォルトの名無しさん (アウアウウー Sa4f-mTCp)
垢版 |
2018/12/13(木) 20:01:00.67ID:Fv0+Omexa
>>465
しかし関数へのポインタが作れてしまう時点でそれはもう inline ではなくなっているように思うのだが。
2018/12/13(木) 20:23:30.62ID:y280e6J90
>>466
規格云々以前に、適用ヶ所と文化の問題。
C言語がガチで使われている領域はそういうところだから、「書いたとおりのコードを吐け」でないと困るし使えない。
だから適当に改変するコンパイラは嫌われる。

対してC++は「出来るだけコンパイラにやらせる」思想だし、そもそもCほど掘り下げる使い方はされないから、
「可能な限り自動的に最適化しろ」な気はするが。
2018/12/13(木) 21:03:29.67ID:Bj9kGxVc0
C言語のアセンブリがすぐ確認できるサイトで調べてみたんだけど、
違うみたいだね。
2018/12/13(木) 21:27:21.48ID:mMIcaeGH0
>>467
なるほど…
そういうときは、call されたときは inline に展開するけれども、関数のポインタとして渡されたときに動かすためだけに(実際にポインタから呼ばれるかどうかは考えずに)inline の関数を別にバイナリーに展開しておくっていうのはどうですか?
2018/12/13(木) 21:28:48.05ID:k+IaCMCPM
>>468
この人何言ってるんだろう…
2018/12/13(木) 21:30:50.24ID:Pd0B4/Sw0
>>468
ん??
2018/12/13(木) 21:53:47.05ID:y280e6J90
>>471
>>472
お前がな
2018/12/13(木) 22:39:39.76ID:fVy8DFiFa
>>470
関数内でstaticの変数が宣言されるケースも忘れずに。
2018/12/13(木) 23:12:49.49ID:k+IaCMCPM
ガイジかな? w ⇒ ID:y280e6J90
2018/12/13(木) 23:49:06.95ID:y280e6J90
>>475
まずお前がガイジじゃないことを示せよ
ゆとりなら死ね
2018/12/13(木) 23:54:03.07ID:Gz5l93Ou0
踏まないように気をつけて歩こう
2018/12/14(金) 05:40:44.32ID:yDEitqc60
うわっ、ガイジと言うよりマジキチやん ⇒ ID:y280e6J90
>>477が意味深になってて笑うわ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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