!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
C言語なら俺に聞け 149
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ af9f-7TBo)
2018/10/28(日) 22:01:44.38ID:D9Gt7gmT0391デフォルトの名無しさん (ワッチョイ 93bd-xVWz)
2018/12/09(日) 15:56:34.95ID:LXVWu9Mt0 >>311
よくもまあPL/SQLを知らないのに批判できるよな。
PL/SQLの例外処理はOracle DatabaseがSQL、ビルトインパッケージの結果をうまく例外として伝播してくれる。
あなたは単に例外を作り出す方の実装が悪いものを見ているだけ。
よくもまあPL/SQLを知らないのに批判できるよな。
PL/SQLの例外処理はOracle DatabaseがSQL、ビルトインパッケージの結果をうまく例外として伝播してくれる。
あなたは単に例外を作り出す方の実装が悪いものを見ているだけ。
392デフォルトの名無しさん (ワッチョイ 93bd-xVWz)
2018/12/09(日) 15:58:53.53ID:LXVWu9Mt0393デフォルトの名無しさん (ワッチョイ 93bd-xVWz)
2018/12/09(日) 16:03:51.04ID:LXVWu9Mt0 >>388
C言語は低水準言語であるから、うまくやれば速いマシン語になるが、ちょっとしたことでむしろ遅くなるマシン語を生みやすい。
アーキテクチャの知識がない場合は、誤解したアーキテクチャを想定したコードを書いてしまい、実行速度が遅いものができあがる。
C言語は低水準言語であるから、うまくやれば速いマシン語になるが、ちょっとしたことでむしろ遅くなるマシン語を生みやすい。
アーキテクチャの知識がない場合は、誤解したアーキテクチャを想定したコードを書いてしまい、実行速度が遅いものができあがる。
394デフォルトの名無しさん (ワッチョイ 31b3-EBCi)
2018/12/09(日) 16:59:21.16ID:c1W3T6/y0395デフォルトの名無しさん (ワッチョイ 9321-OBpN)
2018/12/09(日) 18:56:28.62ID:+IQ+xQud0396デフォルトの名無しさん (ワッチョイ 13d4-n9Ol)
2018/12/10(月) 15:01:58.63ID:Yf20pj4f0397デフォルトの名無しさん (アウアウエー Sa23-u1Zc)
2018/12/10(月) 15:10:08.76ID:FyPZmeq6a 何バイトかは決まっとらん。
サイズに注意出来るようになったらあなたは中級者。
サイズに注意出来るようになったらあなたは中級者。
398デフォルトの名無しさん (ワッチョイ 13d4-n9Ol)
2018/12/10(月) 15:44:39.90ID:Yf20pj4f0 あーそうか、
4byte(32bit)だと0x00000000から0xFFFFFFFFまでの?4294967296通りのアドレスが保存できるんですね。
なので処理系?によって変わるってことなんですね。
ありがとうございます。
4byte(32bit)だと0x00000000から0xFFFFFFFFまでの?4294967296通りのアドレスが保存できるんですね。
なので処理系?によって変わるってことなんですね。
ありがとうございます。
399デフォルトの名無しさん (アウアウウー Sa05-MnXc)
2018/12/10(月) 15:58:27.14ID:4x6+51xya この頃の64bit環境だとアドレスも64bitだと思う。
クロスコンパイルする場合や意図的に32bit用のバイナリを作るようにコンパイルする場合を除く。
クロスコンパイルする場合や意図的に32bit用のバイナリを作るようにコンパイルする場合を除く。
400デフォルトの名無しさん (ワッチョイ 0193-IW2Q)
2018/12/10(月) 16:54:58.91ID:o+toD3xT0 ポインタ変数のサイズは32bit幅、
ただしセグメント部16bitのオフセット部16bitで
有効な全範囲はトータルで20bit。
ただしセグメント部16bitのオフセット部16bitで
有効な全範囲はトータルで20bit。
401デフォルトの名無しさん (ワッチョイ 2b81-n9Ol)
2018/12/10(月) 16:56:42.73ID:/sc6zE4j0 いつの時代の話だろう
402デフォルトの名無しさん (ラクペッ MM7d-24dN)
2018/12/10(月) 17:03:42.11ID:Ezpzf515M プロテクトモード
何それ美味しいの?
何それ美味しいの?
403デフォルトの名無しさん (JP 0Hdd-nAVI)
2018/12/10(月) 17:04:09.37ID:M7qQG5lGH やべー
あの頃から35年も経ったのかよ
漠然と20数年かなとか思ってたよ
あの頃から35年も経ったのかよ
漠然と20数年かなとか思ってたよ
404デフォルトの名無しさん (ワッチョイ 13d4-n9Ol)
2018/12/10(月) 17:16:13.17ID:Yf20pj4f0 一体何の話をしているんです!?
教えてくださいおじい・・・紳士さま。
教えてくださいおじい・・・紳士さま。
405デフォルトの名無しさん (ワッチョイ 998a-Po2/)
2018/12/10(月) 17:33:22.27ID:OF068zeT0 16bitCPU時代のアドレスの話
406デフォルトの名無しさん (ワッチョイ 9312-ZtDu)
2018/12/10(月) 19:37:12.53ID:cqLRK3I00 映画タイタニックでも「near far wherever you are」と謳われているほどポインタは面倒
408デフォルトの名無しさん (アウアウウー Sa05-MnXc)
2018/12/10(月) 20:29:46.12ID:4x6+51xya409デフォルトの名無しさん (アウアウウー Sa05-MnXc)
2018/12/10(月) 20:32:35.54ID:4x6+51xya 英語版
A long time ago,in a galaxy
far,far away....
A long time ago,in a galaxy
far,far away....
410デフォルトの名無しさん (アウアウウー Sa05-/enL)
2018/12/10(月) 23:14:07.07ID:l83Jt/Qga411デフォルトの名無しさん (アウアウウー Sa05-/enL)
2018/12/10(月) 23:16:39.78ID:l83Jt/Qga >>400
セグメントは16ビット迄だよね〜。
セグメントは16ビット迄だよね〜。
412デフォルトの名無しさん (ワッチョイ f14f-ZtDu)
2018/12/10(月) 23:22:09.98ID:ADpwiSWg0 >>411
つPAE
つPAE
413デフォルトの名無しさん (アウアウウー Sa05-/enL)
2018/12/10(月) 23:38:01.37ID:l83Jt/Qga いあ、知ってるよ?
でも今でも意味あるの?
Athlon64にPCの64ビット化を先越された時代の、その苦し紛れの拡張。
64ビット標準だけで今後PCに乗り切れる時代は来ないであろうメモリ容量をサポートしてるのに。
(理論上の限界来る前に、製造技術上の限界が来る)
Winはあえて制限してるが、時代とともに緩めるだけっしょ。
でも今でも意味あるの?
Athlon64にPCの64ビット化を先越された時代の、その苦し紛れの拡張。
64ビット標準だけで今後PCに乗り切れる時代は来ないであろうメモリ容量をサポートしてるのに。
(理論上の限界来る前に、製造技術上の限界が来る)
Winはあえて制限してるが、時代とともに緩めるだけっしょ。
414デフォルトの名無しさん (アウアウクー MM4d-xVWz)
2018/12/10(月) 23:53:27.02ID:bJUChMIiM このスレッドは妄想コンピュータで話すやつが張り付いているね。昔は単純な話だったけどさ。
415デフォルトの名無しさん (ワッチョイ 2b81-n9Ol)
2018/12/11(火) 00:26:54.92ID:qpk98o5j0 8ビットがなつかしいね?
416デフォルトの名無しさん (ワッチョイ 93b3-KUw8)
2018/12/11(火) 07:34:54.16ID:zUaOIyWC0417デフォルトの名無しさん (ワッチョイ 31b3-EBCi)
2018/12/11(火) 09:17:41.73ID:7sleUDEz0 プロセスルールの限界から実用的で物理的なメモリの上限はあるんだろうけど、何がどう進化するか分からないからねぇ。
単純に超多層化プロセスルールが一般化するかもしれないし、もしかするとクラウドRAMサービスとCPUアーキテクチャが融合してその限界突破なんて時代が来るかもしれん。
人間の創造力は無限と信じよう。
単純に超多層化プロセスルールが一般化するかもしれないし、もしかするとクラウドRAMサービスとCPUアーキテクチャが融合してその限界突破なんて時代が来るかもしれん。
人間の創造力は無限と信じよう。
418デフォルトの名無しさん (ワッチョイ 2b81-n9Ol)
2018/12/11(火) 10:15:17.85ID:qpk98o5j0 4GBと言う上限は意外に早くたどり着いた
4K動画をオンメモリーで編集したいとなると
途端にぶつかる壁だな
次は誰がこの壁にたどり着くかな?
4K動画をオンメモリーで編集したいとなると
途端にぶつかる壁だな
次は誰がこの壁にたどり着くかな?
419デフォルトの名無しさん (ワッチョイ dbf7-pji+)
2018/12/11(火) 12:57:57.93ID:ZRU2RXnk0 Visual Studio 2017のC/C++コンパイラってどこのフォルダに置いてあるんですか
(もしくはファイル名、あるいは、商標名?)
調べても「VSに付属するVisual C++にC/C++コンパイラが同梱されている」程度の
情報しか出てこない・・・
そのコンパイラは何て名前でどこに置いてあるんだ・・・
(もしくはファイル名、あるいは、商標名?)
調べても「VSに付属するVisual C++にC/C++コンパイラが同梱されている」程度の
情報しか出てこない・・・
そのコンパイラは何て名前でどこに置いてあるんだ・・・
420さまよえる蟻人間 ◆T6xkBnTXz7B0 (ワッチョイ 31b3-BEmb)
2018/12/11(火) 13:14:43.83ID:CGbAPZXN0 >>419
スタートメニューのVSコマンドプロンプトを開いてみい。
スタートメニューの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
**********************************************************************
** 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
ん・・・?これ?
実行ファイルじゃなくてソースファイル・・・?
分からない、もうダメだ(絶望)
compiler.cpp
ん・・・?これ?
実行ファイルじゃなくてソースファイル・・・?
分からない、もうダメだ(絶望)
423デフォルトの名無しさん (ワッチョイ 01ea-fo8h)
2018/12/11(火) 13:51:50.68ID:rotYdjfa0 その昔は cl.exe に link.exe のフロントエンドで make は別途だったが今はどうなんだろう
424さまよえる蟻人間 ◆T6xkBnTXz7B0 (スフッ Sdb3-BEmb)
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ってコンパイラだったんですね
コンパイラその他を呼ぶための媒介物かと思ってますた
感謝
というかcl.exeってコンパイラだったんですね
コンパイラその他を呼ぶための媒介物かと思ってますた
感謝
426さまよえる蟻人間 ◆T6xkBnTXz7B0 (ワッチョイ 31b3-BEmb)
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と優秀なコンパイラに任せた方がいい。
429デフォルトの名無しさん (ワッチョイ 13d4-n9Ol)
2018/12/11(火) 20:46:12.25ID:g9W94UvY0 初心者です。
>>428ののレスを読んでちょっと混乱しているんですが、
>>いまのCPUを理解
というのがまず何を指しているのか分かりません。
パーソナルコンピュータに内蔵されているCPUでしょうか、炊飯器に内蔵されているCPUでしょうか。
>>C言語を作る必要が無い
作らなくてもすでに存在していると思うのですが、自作が必要なものなのでしょうか。
>>もっと高水準言語
C言語自体が高水準言語だと思うのですが、これ以上の高水準とはどういう基準なんでしょうか。
自然言語をコンパイルするとかでしょうか。
>>VMと優秀なコンパイラ
VMというのはVirtualMachineの略でしょうか。VM上で動作するC言語というのがあるのですか?
VMを動かすほどのリソースが無いようなマシン上では何を動かすのでしょうか。
優秀なコンパイラ、ということは Cのコンパイラは優秀ではないのでしょうか。
おじい・・・紳士のみなさま、ご教授お願いいたします。
>>428ののレスを読んでちょっと混乱しているんですが、
>>いまのCPUを理解
というのがまず何を指しているのか分かりません。
パーソナルコンピュータに内蔵されているCPUでしょうか、炊飯器に内蔵されているCPUでしょうか。
>>C言語を作る必要が無い
作らなくてもすでに存在していると思うのですが、自作が必要なものなのでしょうか。
>>もっと高水準言語
C言語自体が高水準言語だと思うのですが、これ以上の高水準とはどういう基準なんでしょうか。
自然言語をコンパイルするとかでしょうか。
>>VMと優秀なコンパイラ
VMというのはVirtualMachineの略でしょうか。VM上で動作するC言語というのがあるのですか?
VMを動かすほどのリソースが無いようなマシン上では何を動かすのでしょうか。
優秀なコンパイラ、ということは Cのコンパイラは優秀ではないのでしょうか。
おじい・・・紳士のみなさま、ご教授お願いいたします。
430デフォルトの名無しさん (ワッチョイ 2b80-7TzT)
2018/12/11(火) 21:55:08.95ID:ihMfYHRY0 Windows でも、ファイル操作なら、Ruby !
画面なしのツールなら、たいていのものは作れる
ポインタで時間を浪費することもない
画面なしのツールなら、たいていのものは作れる
ポインタで時間を浪費することもない
431デフォルトの名無しさん (ワッチョイ f14f-ZtDu)
2018/12/11(火) 23:16:54.03ID:j8P28cRB0 >>429
嘘を嘘と(ry
嘘を嘘と(ry
432さまよえる蟻人間 ◆T6xkBnTXz7B0 (ワッチョイ 31b3-BEmb)
2018/12/11(火) 23:27:54.09ID:CGbAPZXN0 相手にするのが時間の無駄。悩む時間で基本情報とITパスポートの勉強するのがはるかにまし。
433さまよえる蟻人間 ◆T6xkBnTXz7B0 (ワッチョイ 31b3-BEmb)
2018/12/11(火) 23:43:31.10ID:CGbAPZXN0 おじい、とか言って馬鹿にしちゃダメだよ。ワード、エクセルのエキスパートで、原子炉のタービンを設計するような「ものすごい人」も見てるんだからね。
434さまよえる蟻人間 ◆T6xkBnTXz7B0 (ワッチョイ 31b3-BEmb)
2018/12/11(火) 23:50:36.12ID:CGbAPZXN0 あと補足だけど、30歳定年説は、人件費を削るための嘘だからね。
人不足の今時にこんなことを言ってるアホの取引先は排除すべし。
人不足の今時にこんなことを言ってるアホの取引先は排除すべし。
435さまよえる蟻人間 ◆T6xkBnTXz7B0 (ワッチョイ 31b3-BEmb)
2018/12/11(火) 23:59:29.31ID:CGbAPZXN0 今時ハードディスク使ってモニターと照明費を削るようなケチ臭い企業とは取り引きしません!
436デフォルトの名無しさん (ワッチョイ 2b80-7TzT)
2018/12/12(水) 00:19:15.01ID:ysgUNYaF0 Code For Japan というイベント内でも、
PDF, Excel などの表示情報が入ったデータを、
エンジニア(住職)が供養する企画をやっているw
PDF, Excel などの表示情報が入ったデータを、
エンジニア(住職)が供養する企画をやっているw
437デフォルトの名無しさん (ワッチョイ e18a-Po2/)
2018/12/12(水) 06:43:02.35ID:MN/7vBAt0 >基本情報とITパスポートの勉強
何のことかと思って調べてみれば情報処理技術者試験のことか
そう言えば昔に第一種と上級シスアドに合格してたこと思い出したわ
何のことかと思って調べてみれば情報処理技術者試験のことか
そう言えば昔に第一種と上級シスアドに合格してたこと思い出したわ
438デフォルトの名無しさん (ワッチョイ 937f-xqdQ)
2018/12/12(水) 11:11:59.11ID:Fd1X4TAb0 マシン性能の限界を突破する為に、関数型プログラミングがある。
439デフォルトの名無しさん (ワッチョイ e18a-24dN)
2018/12/12(水) 11:23:33.13ID:MN/7vBAt0 関数型は抽象表現能力は高いが実行効率を追求する様な用途向きではないぞ
生産効率も圏論などの数学的思考に慣れていないと下手すればOOPよりも悪化する可能性が高い
生産効率も圏論などの数学的思考に慣れていないと下手すればOOPよりも悪化する可能性が高い
440デフォルトの名無しさん (アウアウウー Sa05-MnXc)
2018/12/12(水) 12:19:40.64ID:XAdiQzbba ( ´_ゝ`)フーン
441デフォルトの名無しさん (ドコグロ MMa3-KUw8)
2018/12/12(水) 12:31:12.08ID:4PEjGm8GM それ以前にマシン性能を言語で突破できたらノーベル賞ものかと w
442デフォルトの名無しさん (ワッチョイ 2b61-KVvr)
2018/12/12(水) 12:38:27.52ID:b75HkCZx0 CPUは関数型言語を直接実行するようにできてないから遅いでしょ。
443デフォルトの名無しさん (ワッチョイ 2b81-n9Ol)
2018/12/12(水) 12:42:36.11ID:x/hCtcVY0 フォースとともにあれ
444デフォルトの名無しさん (アークセー Sxcd-EBCi)
2018/12/12(水) 12:55:07.41ID:AGB/ZeXIx CPUの限界を超えれる関数型言語上で関数型言語を作れば元の関数型言語の限界を突破できる。
その作った関数型言語上でまたry
んなわけねーよw
その作った関数型言語上でまた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
http://rosie.5ch.net/test/read.cgi/liveplus/1544586377/l50
447デフォルトの名無しさん (ワッチョイ 9312-ZtDu)
2018/12/12(水) 13:15:11.92ID:SHf/dQVX0 関数型プログラミングはλ計算の時点で全く理想的だから
有限のアドレッシングで動いてる今のCPUには全くそぐわない
だから関数型と今のCPUアーキテクチャは根柢から反りが合わないんじゃねえかと
すると関数型の書法を現状の機械語に書き直すだけでロスが出てくる
理想的なモンを劣化させてるに等しいが技術上はそうするしかない
そもそも関数型を直接実行できるようなCPUを人類が作れるかどうか
無限の再帰と無限のストリームが必要になっている時点で怪しい
有限のアドレッシングで動いてる今のCPUには全くそぐわない
だから関数型と今のCPUアーキテクチャは根柢から反りが合わないんじゃねえかと
すると関数型の書法を現状の機械語に書き直すだけでロスが出てくる
理想的なモンを劣化させてるに等しいが技術上はそうするしかない
そもそも関数型を直接実行できるようなCPUを人類が作れるかどうか
無限の再帰と無限のストリームが必要になっている時点で怪しい
448デフォルトの名無しさん (アウアウウー Sa05-/enL)
2018/12/12(水) 13:25:42.01ID:LIx8RHBsa 昔どっかがLisp用にスタックコンピュータだか何だか作ってなかったっけ。
それはともかく、関数型言語でも結局どういうマシン語に落とすかだから、最適化技術で高速化は出来るはずなんだがな。
Cは低水準な操作も出来るから速いコード書けるとはいえ、素直なコードは最適化無しだと他の言語と変わらないし、
速度で言えば別に低水準な操作出来る訳でも無いFortranはC並みに速いわけで。
最適化への技術や時間の掛け方が違うってだけ。
それはともかく、関数型言語でも結局どういうマシン語に落とすかだから、最適化技術で高速化は出来るはずなんだがな。
Cは低水準な操作も出来るから速いコード書けるとはいえ、素直なコードは最適化無しだと他の言語と変わらないし、
速度で言えば別に低水準な操作出来る訳でも無いFortranはC並みに速いわけで。
最適化への技術や時間の掛け方が違うってだけ。
449デフォルトの名無しさん (ワッチョイ 9312-ZtDu)
2018/12/12(水) 13:28:27.57ID:SHf/dQVX0 シンボリクスだ
450さまよえる蟻人間 ◆T6xkBnTXz7B0 (スフッ Sdb3-BEmb)
2018/12/12(水) 14:37:12.07ID:duFENGTGd 理論的限界を超えたら、その理論のモデルが事実に反する訳だから、理論の反例になってしまう。
451デフォルトの名無しさん (アメ MMb5-FdCK)
2018/12/12(水) 15:28:39.64ID:02Irmhu2M ループに展開されることを期待して末尾再起化にハゲむってギャグだよな。
最初からループ書けよw
最初からループ書けよw
452デフォルトの名無しさん (アウアウウー Sa05-/enL)
2018/12/12(水) 15:38:07.68ID:LIx8RHBsa ループだと関数渡せないから。
あとはリストを受け取ってリスト返す関数とか、IOモナドとかは
再帰関数がそのままループになる。
(リストもモナドなので、モナドを返す再帰関数がループになると言える)
あとはリストを受け取ってリスト返す関数とか、IOモナドとかは
再帰関数がそのままループになる。
(リストもモナドなので、モナドを返す再帰関数がループになると言える)
453デフォルトの名無しさん (ワッチョイ cad4-UKyl)
2018/12/13(木) 14:18:51.88ID:oii7E7F70 初心者です。
inline指定子について教えて頂きたいのですが、
関数ポインタからinline関数を呼び出す場合、どのように展開されるのでしょうか。
また、関数ポインタを格納する配列から呼び出すような場合はどのように展開されるのでしょうか。
inline指定子について教えて頂きたいのですが、
関数ポインタからinline関数を呼び出す場合、どのように展開されるのでしょうか。
また、関数ポインタを格納する配列から呼び出すような場合はどのように展開されるのでしょうか。
454デフォルトの名無しさん (ラクペッ MM9b-8Y2+)
2018/12/13(木) 14:32:27.38ID:1m7XwvCgM inline関数の展開は環境依存
呼び出し方が如何なる方法であれ関数の構造によってはインライン展開される保証はない
ループ構造を含んでいると殆ど期待できない
呼び出し方が如何なる方法であれ関数の構造によってはインライン展開される保証はない
ループ構造を含んでいると殆ど期待できない
455デフォルトの名無しさん (ワッチョイ cad4-UKyl)
2018/12/13(木) 14:56:19.82ID:oii7E7F70 なるほど、ありがとうございます。
まさに、
for (i = 0; i < length; i++) {
func_ptrs[i](hoge);
}
みたいなことを試そうとしているところでした。
こういう場合は展開は期待できないということですね。
今回も勉強になりました。
まさに、
for (i = 0; i < length; i++) {
func_ptrs[i](hoge);
}
みたいなことを試そうとしているところでした。
こういう場合は展開は期待できないということですね。
今回も勉強になりました。
456デフォルトの名無しさん (ワッチョイ 6acb-UKyl)
2018/12/13(木) 17:31:05.02ID:jSkPpV300 >>418
次は16EBの壁だな
次は16EBの壁だな
457デフォルトの名無しさん (ワッチョイ 1e61-6aDR)
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')に置き換えてくれないのな
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+Omexa460デフォルトの名無しさん (ワッチョイ 1e81-UKyl)
2018/12/13(木) 18:48:36.88ID:Gz5l93Ou0 GCCの動作環境は特定OSだけではないと思う
461デフォルトの名無しさん (アウアウウー Sa4f-mTCp)
2018/12/13(木) 18:51:31.61ID:Fv0+Omexa CPUによっては一つ一つ比較するように書いた方が速いなんてこともあるのかも知れないが、普通はそうならないように思う。
462デフォルトの名無しさん (ワッチョイ cad4-UKyl)
2018/12/13(木) 19:07:27.96ID:oii7E7F70 ソース全体で見たときに(a < 'a') や (a > 'f')の可能性もあるから最適化されないということでしょうか?
463デフォルトの名無しさん (ワッチョイ f34f-rp3U)
2018/12/13(木) 19:08:30.18ID:y280e6J90464デフォルトの名無しさん (ワッチョイ 2b93-eQ7e)
2018/12/13(木) 19:28:54.20ID:VenLBJVu0 ワシのとこでも -O で「即値97を引いて即値5と比較…」が出たわ。
-O なしだと真っ正直に即値との比較が6回。
>>457 に書かれた通りの ('a'<=a&&a<='f') にならないと言っても、
'a'以上か? 'f'以下か? の判定2回よりもっと効率的になってるでしょ。
もちろん gcc のバージョンによる違いかも知れんが。
-O なしだと真っ正直に即値との比較が6回。
>>457 に書かれた通りの ('a'<=a&&a<='f') にならないと言っても、
'a'以上か? 'f'以下か? の判定2回よりもっと効率的になってるでしょ。
もちろん gcc のバージョンによる違いかも知れんが。
>>454
ときどき夢にみます、inline 指定がどんな場合にも百発百中 inline になるコンパイラがあればどんなに嬉しいか…
ときどき夢にみます、inline 指定がどんな場合にも百発百中 inline になるコンパイラがあればどんなに嬉しいか…
466デフォルトの名無しさん (アウアウウー Sa4f-mTCp)
2018/12/13(木) 19:58:30.01ID:Fv0+Omexa467デフォルトの名無しさん (アウアウウー Sa4f-mTCp)
2018/12/13(木) 20:01:00.67ID:Fv0+Omexa >>465
しかし関数へのポインタが作れてしまう時点でそれはもう inline ではなくなっているように思うのだが。
しかし関数へのポインタが作れてしまう時点でそれはもう inline ではなくなっているように思うのだが。
468デフォルトの名無しさん (ワッチョイ f34f-rp3U)
2018/12/13(木) 20:23:30.62ID:y280e6J90 >>466
規格云々以前に、適用ヶ所と文化の問題。
C言語がガチで使われている領域はそういうところだから、「書いたとおりのコードを吐け」でないと困るし使えない。
だから適当に改変するコンパイラは嫌われる。
対してC++は「出来るだけコンパイラにやらせる」思想だし、そもそもCほど掘り下げる使い方はされないから、
「可能な限り自動的に最適化しろ」な気はするが。
規格云々以前に、適用ヶ所と文化の問題。
C言語がガチで使われている領域はそういうところだから、「書いたとおりのコードを吐け」でないと困るし使えない。
だから適当に改変するコンパイラは嫌われる。
対してC++は「出来るだけコンパイラにやらせる」思想だし、そもそもCほど掘り下げる使い方はされないから、
「可能な限り自動的に最適化しろ」な気はするが。
469デフォルトの名無しさん (ワッチョイ 1e61-6aDR)
2018/12/13(木) 21:03:29.67ID:Bj9kGxVc0 C言語のアセンブリがすぐ確認できるサイトで調べてみたんだけど、
違うみたいだね。
違うみたいだね。
>>467
なるほど…
そういうときは、call されたときは inline に展開するけれども、関数のポインタとして渡されたときに動かすためだけに(実際にポインタから呼ばれるかどうかは考えずに)inline の関数を別にバイナリーに展開しておくっていうのはどうですか?
なるほど…
そういうときは、call されたときは inline に展開するけれども、関数のポインタとして渡されたときに動かすためだけに(実際にポインタから呼ばれるかどうかは考えずに)inline の関数を別にバイナリーに展開しておくっていうのはどうですか?
471デフォルトの名無しさん (ドコグロ MMaa-skpA)
2018/12/13(木) 21:28:48.05ID:k+IaCMCPM >>468
この人何言ってるんだろう…
この人何言ってるんだろう…
472デフォルトの名無しさん (ワッチョイ d3b3-JU2d)
2018/12/13(木) 21:30:50.24ID:Pd0B4/Sw0 >>468
ん??
ん??
473デフォルトの名無しさん (ワッチョイ f34f-rp3U)
2018/12/13(木) 21:53:47.05ID:y280e6J90474デフォルトの名無しさん (アウアウウー Sa4f-fk3u)
2018/12/13(木) 22:39:39.76ID:fVy8DFiFa >>470
関数内でstaticの変数が宣言されるケースも忘れずに。
関数内でstaticの変数が宣言されるケースも忘れずに。
475デフォルトの名無しさん (ドコグロ MMaa-skpA)
2018/12/13(木) 23:12:49.49ID:k+IaCMCPM ガイジかな? w ⇒ ID:y280e6J90
476デフォルトの名無しさん (ワッチョイ f34f-rp3U)
2018/12/13(木) 23:49:06.95ID:y280e6J90477デフォルトの名無しさん (ワッチョイ 1e81-UKyl)
2018/12/13(木) 23:54:03.07ID:Gz5l93Ou0 踏まないように気をつけて歩こう
478デフォルトの名無しさん (ワッチョイ 8ab3-skpA)
2018/12/14(金) 05:40:44.32ID:yDEitqc60 うわっ、ガイジと言うよりマジキチやん ⇒ ID:y280e6J90
>>477が意味深になってて笑うわ
>>477が意味深になってて笑うわ
479デフォルトの名無しさん (ワッチョイ 1e61-6aDR)
2018/12/14(金) 06:20:30.12ID:lAbDnTGa0480デフォルトの名無しさん (ワッチョイ 1e61-6aDR)
2018/12/14(金) 06:26:32.39ID:lAbDnTGa0 いまやったら引き算と比較一回になった。
別の関数の中に比較を入れないと駄目みたいだった。
一個ずつ比較させたいときはvolatileを使えばいいんだな。
別の関数の中に比較を入れないと駄目みたいだった。
一個ずつ比較させたいときはvolatileを使えばいいんだな。
481デフォルトの名無しさん (ワッチョイ 1e61-6aDR)
2018/12/14(金) 06:30:05.99ID:lAbDnTGa0 最適化をいれるとaが定数だとaが消されるからaを別の関数の引数にすることで
消されないようにできる。
volatileで消さないようにするとなぜか比較が最適されない。
消されないようにできる。
volatileで消さないようにするとなぜか比較が最適されない。
482デフォルトの名無しさん (ワッチョイ f34f-rp3U)
2018/12/14(金) 06:46:52.77ID:gWmPrUHE0483デフォルトの名無しさん (バットンキン MM33-JU2d)
2018/12/14(金) 06:52:31.89ID:TYVfP/dyM 最適化は処理の最中に使う変数が外部(別スレッドや割り込みハンドラ)から変更されないということを前提としてるから、volatileつけるとaの比較途中でaそのものが変更されるかもしれないので逐一比較になる。
まぁスタック上のローカル変数aが外部から変更されるってのは通常は単なるスタック破壊のバグだけどね。
まぁスタック上のローカル変数aが外部から変更されるってのは通常は単なるスタック破壊のバグだけどね。
484デフォルトの名無しさん (ワッチョイ 6acb-UKyl)
2018/12/14(金) 06:53:45.77ID:8u55nHdC0 >>468
おまえ4.3BSDのccとかまだ使ってるのか?
おまえ4.3BSDのccとかまだ使ってるのか?
485464 (ワッチョイ 2b93-eQ7e)
2018/12/14(金) 07:50:49.15ID:FIv/Q2MJ0 >>479-480
素直なコードで出るはずだけどなぁ。
サンプル abcdef.c
第1引数の最初の文字が [a-f] なら yes, それ以外なら no と表示
(引数が与えられなかった場合は no を表示)
$ cat abcdef.c
#include <stdio.h>
int main(int argc, char *argv[]) {
int a;
a = (argc>1) ? argv[1][0] : 'z';
if (a=='a'||a=='b'||a=='c'||a=='d'||a=='e'||a=='f') printf("yes\n");
else printf("no\n");
return 0;
}
$ gcc -S abcdef.c
最適化なし 比較6回
$ gcc -O -S abcdef.c
最適化 97引いて5と比較
素直なコードで出るはずだけどなぁ。
サンプル abcdef.c
第1引数の最初の文字が [a-f] なら yes, それ以外なら no と表示
(引数が与えられなかった場合は no を表示)
$ cat abcdef.c
#include <stdio.h>
int main(int argc, char *argv[]) {
int a;
a = (argc>1) ? argv[1][0] : 'z';
if (a=='a'||a=='b'||a=='c'||a=='d'||a=='e'||a=='f') printf("yes\n");
else printf("no\n");
return 0;
}
$ gcc -S abcdef.c
最適化なし 比較6回
$ gcc -O -S abcdef.c
最適化 97引いて5と比較
486デフォルトの名無しさん (ワッチョイ 0a12-rp3U)
2018/12/14(金) 09:57:08.83ID:v3sklYn80 volatileは磁気コアメモリ時代の命令じゃねえのか
487デフォルトの名無しさん (ワッチョイ 1e61-6aDR)
2018/12/14(金) 10:14:56.92ID:lAbDnTGa0488デフォルトの名無しさん (ワッチョイ 3b8a-8Y2+)
2018/12/14(金) 10:15:15.85ID:QZB89f550 現在でも組み込み開発でSFRを弄るにはvolatile宣言は必須
489デフォルトの名無しさん (ワッチョイ 1e61-6aDR)
2018/12/14(金) 10:28:42.01ID:lAbDnTGa0 結論を言うとvolatile で最適化を調べるために最適化を抑制したのが間違いの原因だっと
ということだな。
ということだな。
490デフォルトの名無しさん (ワッチョイ 3fe3-3flP)
2018/12/14(金) 12:14:57.88ID:E1rpoA/W0 volatileは変数がI/Oポートにマッピングされてることを想定した仕様
コンパイラによる省略とかを許さず書いてある通りにアクセスする
コンパイラによる省略とかを許さず書いてある通りにアクセスする
■ このスレッドは過去ログ倉庫に格納されています
