C言語なら俺に聞け 147

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2018/08/16(木) 23:36:02.22ID:fOCSKLtw
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言語なら俺に聞け 146
https://mevius.5ch.net/test/read.cgi/tech/1525031257/
2018/08/24(金) 22:40:17.59ID:O/FKuFVp
ラベルブレークしたらラベルがFor文の頭にくるもんで読みづらい
ブレークしなかったときだけ値を変えるとかもやりづらい
おれはケツにGotoする
2018/08/24(金) 22:51:34.52ID:s18ZTF9u
>>358
おける場所マークがにくくくて点数も要らないと感じるのですね
自分の感覚ではわからなくてその感覚を理解できなくて残念です
どうすれば人のてを借りずにそういうことがわかるようにできるのでしょうか
2018/08/24(金) 22:53:48.04ID:s18ZTF9u
ちなみにjs版もあります
https://pre.aichi.jp/Othello/
2018/08/24(金) 22:55:34.09ID:O3WQJa8X
>>359
それはラベルブレーク自体ではなく文法の問題だろ。
後置ラベルであれば問題なし。
TypeScriptもGoも型は後置だし、じきにそういう言語が出てくるかもしれんよ。

label: {} // 前置
{} : label // 後置

goto は自由度が高すぎるんだよ。だからリンターには嫌われる。
ただ、お前らが goto に拘るのはさっぱり分からん。
「禁止されたらからこそ使いたくなる」という若気の至りだとしても、ちょっと行きすぎてる。
2018/08/24(金) 23:03:27.47ID:QHdFlAyZ
dgt:
 if(mmr!=00) free(mmr);
 return mdr;
err:
 mdr=1;
 goto dgt;
2018/08/24(金) 23:04:40.43ID:ZkSPfVdV
>>362
>>294 の上半分、
gotoを使わないで書いてみて
2018/08/24(金) 23:06:04.22ID:ZkSPfVdV
>>363
なんで8進数?
2018/08/24(金) 23:07:25.00ID:QHdFlAyZ
>>364
10にする
2018/08/24(金) 23:09:57.93ID:QHdFlAyZ
printf("メンテナンス楽しくさせたる0x%o'",>>365);
2018/08/24(金) 23:13:00.47ID:ZkSPfVdV
こら
2018/08/24(金) 23:21:50.02ID:QHdFlAyZ
for (y = 0; y < 9; y++){
. . for (x = 0; x < 9; x++){
. . . . if (判定) goto break_loop;
. . . . int nico[x+1]=(8^0^8);
. . }
}
break_loop:
2018/08/24(金) 23:21:54.95ID:ZkSPfVdV
8進数使わないよね
0も厳密には8進数だけど

2進数の方が欲しい
コンパイラによっては使えたりする

あと16進数の小数
2018/08/24(金) 23:26:13.62ID:ZkSPfVdV
>>369
顔に見えない

可変長配列?
初期化変じゃね?
2018/08/24(金) 23:29:02.20ID:YufcJqyf
gcc拡張にはローカルのラベルがある
2018/08/24(金) 23:31:23.64ID:O3WQJa8X
>>364
お前みたいな初心者には目新しいのかもしれんが、それは古典的な議論なんだよ。
https://stackoverflow.com/questions/9695902/how-to-break-out-of-nested-loops
2018/08/24(金) 23:34:21.43ID:srP6ovAZ
>>322
だから「前半」って書いてあるだろ
今でもしょぼい環境あるぞとか言われてもそんな特殊な環境出されても困るし
2018/08/25(土) 00:24:24.60ID:Jgm8sU0X
前半って具体的にどの箇所のこと言ってんの?
2018/08/25(土) 01:05:51.76ID:Jgm8sU0X
>>286
>しかしコンパイラはwhile文をif文とdo-while文相当に置き換えて最適化するから、差は出ない。

while文をgoto文とdo-while文相当に置き換えて最適化する

の方が正しいような気がする
377デフォルトの名無しさん
垢版 |
2018/08/25(土) 03:21:08.67ID:5+GN6Il1
なぜコンパイル後のアセンブリコードで話をしないのか
この辺LLVMとかだとどうなってるんだろうね
2018/08/25(土) 05:48:12.02ID:r5O9PJUC
>>375
> whileは先頭付近に条件分岐が必要な他に、末尾に必ず無条件のジャンプが必要。
> 対してdo-whileは末尾の条件分岐だけでいい。
> このおかげでループ1回あたり命令実行が一つ減る。

>>376
もうそれ何度も指摘されてる
2018/08/25(土) 06:08:11.27ID:mKHlp3ya
>>373
わざわざ検索したの?
であなたならどうやるの?
2018/08/25(土) 06:25:56.22ID:mKHlp3ya
. . for (y = 0; y < 9; y++){
. . . . for (x = 0; x < 9; x++){
. . . . . . if (判定){
. . . . . . . . [breakする場合だけ行う処理]
. . . . . . . . goto break_loop;
. . . . . . }
. . . . . . 処理
. . . . }
. . }
. . [ループ完了した時だけ行う処理]
break_loop:
. . [共通の処理]
2018/08/25(土) 06:28:41.80ID:/11s7nnG
例外処理にgotoが必要なんて話は
大昔から語り尽くされているのに
今さらドヤられても・・・・
2018/08/25(土) 06:33:15.79ID:mKHlp3ya
gotoの使い方を知らない人がいるようなので
2018/08/25(土) 08:56:32.19ID:khOLQHnm
>>379
お前は本当に無知なようだが、
この議論は昔からある有名な物で、結論も『既に』決まっているんだよ。

> No, don't spoil the fun with a break. This is the last remaining valid use of goto :)
> If not this then you could use flags to break out of deep nested loops.
> Another approach to breaking out of a nested loop is to factor out both loops into a separate function, and return from that function when you want to exit.
>
> Summarized - to break out of nested loops:
>
> 1. use goto
> 2. use flags
> 3. factor out loops into separate function calls
> Couldn't resist not including xkcd here :)
>
> enter image description here
>
> source
>
> Goto's are considered harmful but as many people in the comments suggest it need not be. If used judiciously it can be a great tool. Anything used in moderation is fun.
まさにこの通り。
その中でお前がどれを選択するかは自由だし、それは俺含めた他人の選択とは無関係だ。
○○を選択した俺ツエーとイキれる話でもない。

俺はお前がこの『既に結論が決まっている』話をどう持って行きたいのか分からない。
レス乞食なら死ね。
2018/08/25(土) 09:01:26.86ID:khOLQHnm
>>377
LLVMでも変わらない。
あれはコンパイラの制作を楽にするものであって、魔法の杖ではないから。
https://blanktar.jp/blog/2015/07/c-while-do-while.html
2018/08/25(土) 09:04:29.83ID:qgzET8Il
CにはJavaのArrayList、HashMap、TreeMapみたいなライブラリはないみたいですが、普通はどうやってデータを管理するのでしょうか?
2018/08/25(土) 09:12:41.48ID:iDBA6fbU
そう言ったデータ構造を標準機能で使いたいならC++を部分的に利用するのが手っ取り早いのでは?
gccもclangもC言語処理系ではあるけどC++の処理系でもある
2018/08/25(土) 09:15:10.60ID:qgzET8Il
>>386
C++でできるのは調べました
純粋なCではどうしているのかが分からないので
2018/08/25(土) 09:23:12.83ID:iDBA6fbU
>>387
標準ライブラリにそんな機能はないよ
純粋なC言語でやるなら、すべて自前で作るか適当な外部ライブラリを探すしかない
2018/08/25(土) 09:46:55.20ID:Gb+uOyj2
世の中には便利で高性能なライブラリがあるからね。言語自体が機能を内包してた方が迷いはないかも知れんが。
標準ライブラリのhsearchとか誰も使わんな。俺も使わない。
2018/08/25(土) 09:50:09.09ID:mKHlp3ya
>>383
C言語の話題はもうされ尽くしてるから
お前はこのスレに来なくていいよ

人間の結論も既に決まってる
死ぬ事だ
2018/08/25(土) 09:57:03.08ID:/11s7nnG
>>389
標準ライブラリってISO/IEC9899:2011か?
hsearchなんてないぞ
bsearchか、もしかして
あれは確かにイケてない関数の1つだな
2018/08/25(土) 10:17:18.44ID:khOLQHnm
>>390
C言語は50年近い歴史が既にあって、無知な新参がイキる余地はない。
イキりたいだけならJavaScriptかGoに行け。
あっちは馬鹿同士で楽しくやってる。
393デフォルトの名無しさん
垢版 |
2018/08/25(土) 10:30:26.94ID:OV9APJVg
Cのコードを自動生成するようなフレームワークもあると思うけど
そういうのが出てきたらCプログラマって必要なくないか?
最近Cのプログラマが需要がないから減ってる気がする
2018/08/25(土) 10:31:25.04ID:mKHlp3ya
>>392
負け宣言www
2018/08/25(土) 10:33:04.07ID:/11s7nnG
>>392
自己紹介乙
2018/08/25(土) 10:37:34.03ID:mM6Mjb64
>>388>>389
hsearchはHashMapみたいですが、確かに使いづらそう・・・
自作するってやっぱりCは初心者には厳しいですね

ちなみにこのスレの方々は自作しますか?それとも外部ライブラリ使う派ですか?
外部ライブラリ使うのであればオススメありますか?
2018/08/25(土) 11:02:02.19ID:khOLQHnm
>>393
https://www.tiobe.com/tiobe-index/
PC等、富豪プログラミングが許される状況では書く必要はなくなっていくだろう。
Cは必要なところのみDLLに切り出してピンポイント高速化でいい。
ただ、IoTの場合、速度=バッテリの持ち=小型化に直結するので、
今後ともCで書くのが主流ではないかな。

C++は結局の所、C程の速度は出ないし、DLLもイマイチなので主流になりきれなかった。
Rustが完全に立ち上がれば、Cが駆逐される可能性はある。
Javaがなんだかんだで主流なのは、いろんな意味でバランスが取れているからだ。
2018/08/25(土) 11:08:31.00ID:mKHlp3ya
C++でCの速度が出ない????
2018/08/25(土) 11:17:43.56ID:mKHlp3ya
ピンポイント高速化とDLLも関係ないし

Cが使われるのはほとんどが小規模組み込み
逆に小規模組み込みはCしか選択肢が無い場合が多い
他の言語と競ってもあまり意味が無い
2018/08/25(土) 11:23:43.36ID:M70RZcxI
>>396
俺はstringとかarrayとか自作しちゃうかな
Cやるなら他言語の標準ライブラリぐらいは自前で実装できないと話にならないよ
何にもないからね
2018/08/25(土) 11:25:52.08ID:06VRwQlu
必要なもの(だけ)を作る
使いたいけどないなら作る
これがC言語
402デフォルトの名無しさん
垢版 |
2018/08/25(土) 11:28:31.78ID:OV9APJVg
>>397
そういうことじゃなくて
C言語のコードを別の言語で書いて変換すれば
Cでかく必要ないじゃんってこと
2018/08/25(土) 11:30:03.25ID:LrSeHAMC
>>396
あえて言えばGlibとかですかね。機能は揃ってると思う。
オブジェクト指向っぽいCになれてないとつらいけど…
2018/08/25(土) 11:32:05.97ID:/11s7nnG
>>397
C++が使えません、まで読んだ
405デフォルトの名無しさん
垢版 |
2018/08/25(土) 11:35:24.37ID:0r5h6/lL
言語なんか関係ない
知恵遅れなクソがコード書けば
クソなコードになる

それ以外ない

すべて知恵遅れが原因
406デフォルトの名無しさん
垢版 |
2018/08/25(土) 11:38:10.89ID:OV9APJVg
Cで例えばメモリを操作するコードが100行あるとするよな?
そのコードを作成するフレームワークがあるなら
それ使えばいいし、Cいらなくねwwってことな
407デフォルトの名無しさん
垢版 |
2018/08/25(土) 11:39:19.95ID:0r5h6/lL
いちいちな
試験もされてないような知恵遅れが作ったフレームワーク()
なんかつかわないからな

障害の原因
408デフォルトの名無しさん
垢版 |
2018/08/25(土) 11:50:32.60ID:0r5h6/lL
知恵遅れはまとな思考してれば
まともな人間なら書けないようなコードを平気で書くからな

やばいぐらい頭悪いコードを
それも息するように書くからな

しかもその自覚がない
オツムに致命的な問題がある

アルゴリズムを実現するための言語の問題じゃない
アルゴリズムなんかどんな言語でも実現できる

言語なんかただの方言だからな
Cが畿内の方言なら
C++はエミシの方言
Javaはクマソの方言
2018/08/25(土) 11:57:12.59ID:0NZIGmlJ
>>400
自分は馬鹿ですって言ってるな
2018/08/25(土) 11:59:50.71ID:yggGxXGy
>>408
コーディングもアルゴリズムも数学も出来ない学歴コンプなアホは黙ってろ
411デフォルトの名無しさん
垢版 |
2018/08/25(土) 12:09:09.86ID:0r5h6/lL
javaはpascalとも混血してる
412デフォルトの名無しさん
垢版 |
2018/08/25(土) 12:13:02.72ID:0r5h6/lL
pascalはインチキalgol
413デフォルトの名無しさん
垢版 |
2018/08/25(土) 12:58:06.70ID:OV9APJVg
if文の中を抜けたい場合ってどうすればいいですか?
breakはforとwileを抜けるんですよね?
ifを抜けるには?gotoは使いたくないです
2018/08/25(土) 13:05:12.45ID:Q2JYdW4P
意味不明
if文の中ってどういうこと?
ただ条件式があるだけだろ
2018/08/25(土) 13:05:57.37ID:J3tnFs/w
goto使え
宗教的に無理ならdo while (0);で囲んでbreak
2018/08/25(土) 13:07:57.58ID:YF0z4wS0
continueかbreak
417デフォルトの名無しさん
垢版 |
2018/08/25(土) 13:08:12.82ID:0r5h6/lL
switchならbreakで抜けれる
breakで抜けなければ、続きが実行される
2018/08/25(土) 13:18:05.46ID:khOLQHnm
>>402
意味不明。
わざわざCのソースコードを中間出力する意味ないだろ。

>>406
もしかしてCソースなら何でも速くなると思ってるゆとり?

>>413
意味不明。
> if文の中を抜けたい場合
これを他言語でいいから書いてみて。


多分お前は相当な馬鹿で、全てピント外れだと思うぜ。
自分では賢いつもりなんだろうけど。
419デフォルトの名無しさん
垢版 |
2018/08/25(土) 13:25:50.33ID:0r5h6/lL
むかしのc++はcのコードジェネレーターだったからな
昔あったinfomixのesqlもインチキなcのコード書くと、それをcのコードにおきかえて出力する

昔、大量のfortranのコードをcに変換しないといけなかったことがあるが
最初は自動変換したがとても読めるシロモノじゃなかったから
ドカタに人力作業をお願いした

ドカタはこういうのは得意
2018/08/25(土) 13:32:40.10ID:M70RZcxI
>>409
お前ほどじゃないよ
421デフォルトの名無しさん
垢版 |
2018/08/25(土) 13:41:52.99ID:0r5h6/lL
cで書いとけば間違いない
なんにでも使える
luaからでも超簡単に使えてしまう
2018/08/25(土) 13:50:16.83ID:yggGxXGy
if や単なる {} をbreakで抜けられたら便利だと思ったことがある
この場合、多段 break もほぼセットで必要

break n
break if
break for
break switch
break while
break do

こんなのでもいいかも
2018/08/25(土) 13:52:19.69ID:yggGxXGy
名前付きループ
だとbreakやcontinueにも使えるけど
わざわざ名前を付けるくらいならgotoでいい
424デフォルトの名無しさん
垢版 |
2018/08/25(土) 13:53:56.31ID:0r5h6/lL
あいかわらず
低学歴知恵遅れは頭悪いこといってるわ
ループのbreakなのか条件のbreakなのか
コンパイラが解釈できない

コレがザ知恵遅れ
425デフォルトの名無しさん
垢版 |
2018/08/25(土) 13:56:46.76ID:0r5h6/lL
for (;;) {
if (!aho) {
break;
}
}

自覚がないアホが治らないからアホの仕様では無限ループから抜けれない
アホのまま無限ループ
2018/08/25(土) 13:57:14.09ID:Q2JYdW4P
ループならいざ知らず、ただの複文ブロックでブロック外に制御が行きつ戻りつする様ならもはや構造化プログラミングとは呼べない
立派なスパゲティプログラムだろう
2018/08/25(土) 13:57:35.88ID:yggGxXGy
>>422の1行目しか読まずに脊髄反射?
428デフォルトの名無しさん
垢版 |
2018/08/25(土) 13:58:01.93ID:0r5h6/lL
低学歴知恵遅れがなんかいってる
2018/08/25(土) 13:59:14.30ID:yggGxXGy
コーディングもアルゴリズムも数学も出来ない学歴コンプなアホは黙ってろ
2018/08/25(土) 14:00:01.87ID:yggGxXGy
日本語も読めない
も追加だな
431デフォルトの名無しさん
垢版 |
2018/08/25(土) 14:01:13.44ID:0r5h6/lL
まず低学歴知恵遅れは低学歴知恵遅れの自覚がないからな
cの言語構造がどうなってるかすらわかってない
2018/08/25(土) 14:01:22.38ID:yggGxXGy
>>422に対して>>425のレス
ヤバいと思わない?
433デフォルトの名無しさん
垢版 |
2018/08/25(土) 14:02:44.53ID:0r5h6/lL
まずどう字句解析されて
どう構文解析されてるかすら分かってない

まあ致命的

低学歴知恵遅れがバカなこと書いて
どやがおしてるワケだからな

相変わらず
2018/08/25(土) 14:04:07.49ID:yggGxXGy
>>426
戻るなんて誰か書いてたか?
ただのbreakだ
関数途中のreturnと本質的には変わらん
2018/08/25(土) 14:04:47.83ID:XpRMjBtL
短期記憶に障害があるレベル
436デフォルトの名無しさん
垢版 |
2018/08/25(土) 14:06:09.75ID:0r5h6/lL
break_if
とかにするならまだ少しは分かる

低学歴知恵遅れは単純になにもモノをしらなすぎる
タイムゾーンスレでも同じように
2018/08/25(土) 14:07:25.33ID:E22oAZjP
>>397
> C++は結局の所、C程の速度は出ないし、DLLもイマイチ

どこ情報よ
2018/08/25(土) 14:08:13.17ID:yggGxXGy
>>436
本当に1行目しか読んで無いんだな
439デフォルトの名無しさん
垢版 |
2018/08/25(土) 14:09:13.24ID:0r5h6/lL
顔真っ赤にしなくてもな
低学歴かどうかなんか
レスからすぐにわかっちゃう

残念なことに
2018/08/25(土) 14:09:42.60ID:E22oAZjP
>>396
あればなるべく外部ライブラリを使う
十分に使われてるなら自作よりそっちのほうがいい
2018/08/25(土) 14:10:54.85ID:yggGxXGy
>>439
大差でおれに3連敗したアホ
4連敗確定にされたいか?
2018/08/25(土) 14:20:36.81ID:yggGxXGy
15GBのテキストデータの解析速度
4倍の差

複数の数値データから上位3個を選ぶアルゴリズム
高速、非破壊、安定 / 低速、破壊、不安定

フィボナッチ数列の計算
計算式、計算アルゴリズム、コードいずれも大差
443デフォルトの名無しさん
垢版 |
2018/08/25(土) 14:21:26.04ID:0r5h6/lL
まさに阿Q正伝
2018/08/25(土) 14:32:32.93ID:yggGxXGy
>>439の恥ずかしい書き込み

795 :デフォルトの名無しさん (ワッチョイ cf80-gYkF) [] :2018/08/06(月) 23:39:21.68 ID:9v3Lf9b90
全然ずれてない
コールスタックの深さとぴったり一致してる

オツムが足りない知恵遅れのために
さらにムダな補助出力をつけてやったぞ(AとB)

 https://ideone.com/2vP2kN

ここまでくると
メクラやツンボを誘導するのに近い。。。

 ↓この課題は、最終的には、コレにおちつくことになる
  (なんでかは、nを増やせばきっと知恵遅れでも分かるとは思ってたからな)
 https://ideone.com/eaJEjX

補助出力がないとなにやってるのかすら分からないメクラやツンボでは
コレがなにやってるかもきっと理解できないわ
u_l、u_r、u_yしかないからな

知恵遅れは再帰が理解できてないのが、よおく分かったわ
2018/08/25(土) 14:33:32.61ID:yggGxXGy
882 :デフォルトの名無しさん (ワッチョイ de80-oNxq) [] :2018/08/11(土) 19:44:24.09 ID:17qcRus/0
で、>>881の結果に基づいて
一般項で処理するコードを書いた

 https://ideone.com/QKTrLi
 一般項で処理

やってみたが
一般項で処理なんかするとともかく遅い

6,942,482 bitsの一般項の計算で
お話にならないぐらいものすごい時間がかかる

calculation 6942482bits
f,10000000,35.082393,34.855636
g,10000000,0.722054,0.720584

つまり、結論としてフィボナッチ数を求めるなら
GMPに用意されてる関数を使うのが一番

再帰階乗演算使う方がはるかにマシ
一般項で求めるのはウンコ
446デフォルトの名無しさん
垢版 |
2018/08/25(土) 14:35:05.39ID:0r5h6/lL
なんか低学歴知恵遅れが
意味不明なこと書いてるわ
447デフォルトの名無しさん
垢版 |
2018/08/25(土) 14:35:56.77ID:0r5h6/lL
なんかしらんけど
よほど悔しいらしい

低学歴知恵遅れは
自己評価だけは高いからな
2018/08/25(土) 14:37:01.56ID:95iULeOH
また半角くんが暴れてんのか・・
449デフォルトの名無しさん
垢版 |
2018/08/25(土) 14:39:15.70ID:0r5h6/lL
まず基本的なことが分かってないからな
致命的
2018/08/25(土) 14:39:54.36ID:XpRMjBtL
最後に本当に共通ライブラリより高速なロジックがはられてたが
それに対する彼のコメント

// アホが書いたコード
// なにをやってるかは不明
451デフォルトの名無しさん
垢版 |
2018/08/25(土) 14:43:19.36ID:0r5h6/lL
オレはちゃんと
アホがスレで書いたコードをwebコンパイラで動かしたからな
2018/08/25(土) 14:45:50.69ID:yggGxXGy
で?
453デフォルトの名無しさん
垢版 |
2018/08/25(土) 14:46:13.55ID:0r5h6/lL
で、正しい結果になった?
2018/08/25(土) 14:49:17.98ID:XpRMjBtL
ビット数がWebだと32なのでそこで矛盾があっただけだった
ちゃんと作って張りなおされたやつは数千桁あっという間に求めるやつだったぞ
みただろ?
455デフォルトの名無しさん
垢版 |
2018/08/25(土) 14:50:29.77ID:0r5h6/lL
オレはしっかり低学歴知恵遅れが相当に頭悪いことを
しっかり 実 証 してるからな
2018/08/25(土) 14:51:46.41ID:yggGxXGy
半角君が劣化コピーして

if (32bit変数 & 0x8000000000000000)
がTRUEにならんとか騒いでたね
2018/08/25(土) 14:53:18.47ID:XpRMjBtL
あれ劣化コピーだったんかいw
最悪だな
458デフォルトの名無しさん
垢版 |
2018/08/25(土) 14:53:24.24ID:0r5h6/lL
1~64まで足して
まず0x8000000000000000
になるとかないからな

ぱっと見で分かるレベルだからな
相当な知恵遅れでなければな
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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