C言語なら俺に聞け 152at TECH
C言語なら俺に聞け 152 - 暇つぶし2ch521:デフォルトの名無しさん
19/07/16 16:37:07.34 cpfSTA9t0.net
>>487
if の nest が深くなってしまう?

522:デフォルトの名無しさん
19/07/16 16:54:01.54 Yi/rfLM50.net
>>521
教条主義的に守るなら そうせざるを得ないだろうね
if (エラー) return ; // 即脱出
後続コード
return ; // 最終
即脱出を禁ずるなら
後続コードは即脱出条件とは排他的なので if (or else) 内に収めるしかない
if (!エラー) {
 後続コード
}
return ; // 最終

523:デフォルトの名無しさん
19/07/16 16:58:26.41 EySzsoWc0.net
goto ___exit; /* 震え声 */

524:デフォルトの名無しさん
19/07/16 16:59:45.97 Yi/rfLM50.net
多分 goto も塞がれてる気配w

525:デフォルトの名無しさん
19/07/16 17:24:48.72 uQ5be57j0.net
うちはreturnは最後に一つのみってやつは適用除外になってる
理由はネストが深くなって読みづらくなるから
gotoもネストしたループから一気に抜ける場合のみ使ってもよいことになってる
フラグ使ってbreakで抜けるより読みやすいからね

526:デフォルトの名無しさん
19/07/16 17:27:15.45 glyNXuyHa.net
もちろんgotoも禁止さ。
あと、各関数の頭で引数チェックも必須なのでreturn禁止とのコンボでほぼ必ず正常系処理のネストが一段以上深くなる。
引数チェック必須はISO26262だったかもしれん。

527:デフォルトの名無しさん
19/07/16 17:27:59.62 UHx9kM+ca.net
途中のreturn禁止を徹底するなら、ifとかelseの後に2行以上書くの禁止にした方がいいね。
代入だけ許容するくらいでいい。

528:デフォルトの名無しさん
19/07/16 17:28:40.15 T78CNDqDd.net
>>513
0は0x0とか書かなきゃいけないんかね

529:デフォルトの名無しさん
19/07/16 18:10:37.85 QICQY/wp0.net
>515
そりゃもう512色カラー設定に(ry

530:デフォルトの名無しさん
19/07/16 18:31:58.85 2nARKc5Ld.net
ここまできたらC言語も禁止だな。
pythonでコーディングしてコンパイルしてやればいい。

531:デフォルトの名無しさん
19/07/16 18:35:56.79 /Cc9wbE10.net
結構前から言われてない?
「C言語を使う必要が無いなら使うな」と

532:デフォルトの名無しさん
19/07/16 18:47:43.53 K50k857la.net
pythonを使って人が死んだら責任とれるの?

533:デフォルトの名無しさん
19/07/16 18:54:47.98 2nARKc5Ld.net
>>532
大丈夫さ。プログラム全体をtryで囲んで引っ掛かったらprint("手動運転に切り替てください")のコンボがある。

534:デフォルトの名無しさん
19/07/16 18:58:26.32 uQ5be57j0.net
pythonでOSやデバドラ書けるようになったら考えるわ

535:デフォルトの名無しさん
19/07/16 20:05:19.62 WsWptbblx.net
#define xxx 06
#define yyy 07
//#define zzz 08 // なぜかエラーになる

536:デフォルトの名無しさん
19/07/16 20:31:07.37 K50k857la.net
なぜかはひみつ

537:デフォルトの名無しさん
19/07/16 20:54:46.50 GCGNUpCjM.net
>>535
なんてありがちな…

538:デフォルトの名無しさん
19/07/16 21:03:30.93 GCGNUpCjM.net
ここらへん嫁
URLリンク(programming-study.com)

539:デフォルトの名無しさん
19/07/16 21:05:08.13 K50k857la.net
祈りが足りないからだな

540:デフォルトの名無しさん
19/07/16 21:08:14.38 uQ5be57j0.net
ちょっと前に8進数が~ってやってるのに
あ、ネタかw

541:デフォルトの名無しさん
19/07/16 21:22:48.20 /Cc9wbE10.net
このスレの人って少し前のレス読まないよね

542:デフォルトの名無しさん
19/07/16 21:31:28.73 7JXDuVC90.net
const char *sの順番が納得いかない
直感的にはchar * const sだろうが!!

543:デフォルトの名無しさん
19/07/16 21:32:10.10 W8tOKWg20.net
char const*だろ?

544:デフォルトの名無しさん
19/07/16 22:16:46.03 Qe+dZ6A/0.net
* const char s
じゃね?

545:デフォルトの名無しさん
19/07/16 22:17:34.37 Qe+dZ6A/0.net
おれは何を言ってるんだ??

546:デフォルトの名無しさん
19/07/16 22:20:37.80 dxLim7GAx.net
>>542
>const char *sの順番が納得いかない
>直感的にはchar * const sだろうが!!
前者はポイントされる文字列が const で、後者はポインタ自体が const でしょ

547:デフォルトの名無しさん
19/07/16 22:42:49.53 uQ5be57j0.net
const char* const s
これも直感的じゃないって言うんだろうか

548:デフォルトの名無しさん
19/07/16 22:43:19.23 dxLim7GAx.net
546です
すみません、それを踏まえてということか…

549:デフォルトの名無しさん
19/07/16 22:50:32.56 g+WSNcLQ0.net
const は後置で書いたほうが整合性が取れる
char const * const s:
しかし、見た目的にかわいいのは前置である
const char * s;
私はかわいいのが好きである
よって前置は使わない

550:デフォルトの名無しさん
19/07/16 22:58:11.13 g+WSNcLQ0.net
そこで私が提案したいのが「strong」である
strongは修飾したデータをすべてconstにする
つまり
char const * const s;

strong char * s;
は等価である

551:デフォルトの名無しさん
19/07/16 23:13:59.86 ICazHXPW0.net
>>550
安易な予約語の追加は嫌われるよ

552:デフォルトの名無しさん
19/07/16 23:18:11.31 EySzsoWc0.net
「strongがやられたようだな…」
「フフフ…奴は四天王の中でも最弱…」

553:デフォルトの名無しさん
19/07/16 23:19:03.80 /Cc9wbE10.net
<strong>char* s</strong>

554:デフォルトの名無しさん
19/07/16 23:22:51.61 uQ5be57j0.net
stringと間違えそうで嫌だなw
readonlyはc#で使ってるしな
やっぱconstだな

555:デフォルトの名無しさん
19/07/16 23:40:17.89 awioItM70.net
大文字で CONST にするとか。

556:デフォルトの名無しさん
19/07/17 04:24:07.40 CqcyHUxLd.net
フン
char *const_s

557:デフォルトの名無しさん
19/07/17 06:33:32.66 Pp4wfZXK0.net
>>546
const int a → constなint型のa
const char *s → constなchar *型のs
constなのはchar *つまりポインタ(直感)
char * const s → char *型のconstなs
constなのはsつまり文字列自体(直感)
なんで逆!!

558:デフォルトの名無しさん
19/07/17 06:46:44.61 NB17uhF90.net
> const char *s → constなchar *型のs
ギャグだよな?

559:デフォルトの名無しさん
19/07/17 06:57:50.40 i06pHchL0.net
宣言は右から左に読む
const等の修飾は左にかかる
char const * const s; // sは、const *である、const char型の
右にかかるなら↓のように書けないとおかしいがこれは構文エラーである
const char const *s;
変数名はただの識別子で、ある領域にsという名前を付けただけにすぎない
constやvolatileは型修飾子であり、これらが付くのは型に対してである
~という領域を、以後sと呼ぶ、である

560:デフォルトの名無しさん
19/07/17 07:14:03.66 NB17uhF90.net
ちげーよ
宣言は真ん中から左右に読むんだよ
char const *(* const s)[1];

561:443
19/07/17 09:21:48.88 u050lnGw0.net
>>526
引数チェックに関しては、Java のコーディングルールでは、
外部の人用のAPI、つまりpublic な関数には、必要
一方、そのモジュール・クラスの実装者が使う、
内部的なAPI、つまりprivate な関数には、いらない
既にどこかで、エラーチェックしてるから、何回も同じエラーチェックするのは、無駄

562:デフォルトの名無しさん
19/07/17 21:08:01.97 E0YvS3zE0.net
const char *sは*sがconst
つまりポインタsの指すアドレスにある値が不変だけどsがどこを指すのかは可変
char *const sはsがconst
つまりポインタsがどこを指すかは不変だけどsの指すアドレスにある値は可変

大体こんな認識で合ってる?

563:デフォルトの名無しさん
19/07/17 23:04:57.90 Pp4wfZXK0.net
あってるけど納得いかないって話
1つ目がまず何で*sにかかるんだよ
自然に読んだらconstはchar *にかかるだろ
右から読むとか頭おかしいわ、アラビア語かよ

564:
19/07/17 23:22:42.51 UrUB0t8/0.net
>>563
char * s;
に 1 個の const を追加するとき、形式的に追加できる場所は 4 箇所
a) char * s const;
b) char * const s;
c) char const * s;
d) const char * s;
このうち a) はコンパイルできない
b) c) は可能だが、の二つの間で意味は異なる
d) は本来ならエラーであるべきだと私は考えているが、実際には c) と一緒の意味になっている

565:デフォルトの名無しさん
19/07/17 23:34:56.30 RL7WDafS0.net
C言語使う時はいつ?
早いコードが欲しい時
メモリー消費に無駄のないコードが欲しい時
他ある?

566:
19/07/17 23:39:48.74 UrUB0t8/0.net
>>565
他の言語はほとんどわからず(かじってはみたものの使えるまでにはMPがあがらず)、C/C++ でしかまともに書けないし発想できないからです…

567:デフォルトの名無しさん
19/07/17 23:42:49.57 FDkzfNlT0.net
>>563
実はアラビア語って可能性はないのか?

568:デフォルトの名無しさん
19/07/17 23:49:47.36 Pp4wfZXK0.net
そもそもconst char *sの宣言の時の切れ目がconst / char / *s なのも何だかなぁ
const / char * / s でconstはchar *にかかれよjk
現実に間違ってるのは渋々受け入れてるけど開発者が許せない

569:デフォルトの名無しさん
19/07/18 00:00:28.28 OLFUgkogx.net
>>564
自分は b or(and) d かなー

570:デフォルトの名無しさん
19/07/18 00:33:34.97 Nr80YdQr0.net
>>565
他に思い付くところとしては、
組み込み環境などで、C言語以外の選択肢がない、または他の言語で実行できる環境を整えるよりCを使った方が楽な場合。
外部のライブラリのインタフェースがC言語で、呼び出す部分をCで作る方が楽な場合。
バイナリファイルの操作などポインタ操作を使って実装しやすい場合。

571:デフォルトの名無しさん
19/07/18 00:48:28.58 Nr80YdQr0.net
>>568
単純なポインタのことしか考えないから、左から右にこだわってんだろ。
>>560も指摘している通り、変数宣言の構文は内から外だぞ。配列や関数ポインタも交えて、それらを多段階の組み合わせにしても一意に解釈できるのを理解すれば、合理的な物だとわかると思うよ。
>>563
1つ目は、constがかかってるのはcharだぞ。内側から解釈するとsは*が付いているからポインタであり、それが指す型がconstなcharだ。

572:デフォルトの名無しさん
19/07/18 05:33:10.45 yO5P6Jqp0.net
char *s
の意味は*sはchar型だよって意味で
sはchar *型だよって意味じゃないよ

573:デフォルトの名無しさん
19/07/18 05:43:05.99 xY9KzRxOd.net
>>572
こう理解できてるとわかりやすいね。つまり
const char *s

*s(sの指す先)はchar型でさらにconstだよ
となる。

574:デフォルトの名無しさん
19/07/18 06:48:06.17 2qyz/4gG0.net
>>572
その宣言から以後、
sという式がchar*型
*sという式がchar型
2つの意味を同時に表現してるんだよ

575:デフォルトの名無しさん
19/07/18 07:54:18.60 kb0ZHGx0M.net
*と*const があると憶えるべき。

576:デフォルトの名無しさん
19/07/18 09:56:03.22 q9HPUerJa.net
>>563
ポインタを表す * が型にくっついてるんじゃなくて変数にくっついてるからでは?
分かりにくいなら typedef でポインタの型を作ってそれを使えばいいんじゃないな。
右から読む事に関しては英語を日本語に翻訳する時に順序を入れ換えた方が自然な感じになる事があるのでなんとも言えんな。漢文のレ点みたいなものもあるしな。
日本語とは逆順の方が自然な表現になる言語はある。そして歴史的な事情で混在してしまっているのもある(アメリカでの年月日が月日年の順だとか)。
生まれながらにしてその言語使ってればその人にとってはそれが一番自然な表現だからな。

577:デフォルトの名無しさん
19/07/18 10:04:50.81 xY9KzRxOd.net
>>574
結果はいっしょでも解釈の仕方は複数ある感じだね。
自分にとって理解しやすいので
char *s

sの指す先はchar型、つまりsはポインタ
って言う風に捉えてる。

578:デフォルトの名無しさん
19/07/18 21:25:27.83 PbeogWAD0.net
この話は何時も混乱するんだけど
結局の所は
自分の言葉で理解するまでやる
これをやらないと混乱してしまう
なぜそうなってしまったのか?
という視点で解釈しようとしないと
なかなかにc言語って難しい
その辺は例のc言語ポインタにのみついて書かれた本
あれを読んで
後は何とか自分の言葉で理解して解釈するしか方法が無い
それとこんなになってしまっている原因に
キーボード上の記号が少ない
というのもある
basic何かでは記号類は四則演算類だけ使って
なるだけ英単語?を使って記述するようになっている
だから使う場所によって記号の意味が違う
なんていうのが起こりにくくなってる
ある意味c言語が普及してしまったのはプログラミング世界にとっては不幸なのかもしれない

579:デフォルトの名無しさん
19/07/18 21:30:10.98 1zgaXsge0.net
C言語って初心者向けに作られたものではないと思う

580:
19/07/18 21:32:28.55 /oDno/7H0.net
>>578
私も最初に C をやったときには、ここまで流行るとは思わなかったんです、むしろ pascal の方が筋がいいと思っていたのですが、どうしてこうなってしまったのでしょうか?

581:
19/07/18 21:34:00.28 /oDno/7H0.net
>>579
当時は初心者用とかは特に無くて、BASIC でもある程度できる人はすぐに peek, poke を連発するようになったものです、最近の人は甘えていると思います

582:デフォルトの名無しさん
19/07/18 21:41:19.07 AzHVv8Pq0.net
>>580
UNIXがCで云々というのもあるけど、良い意味で高級アセンブラとして使い勝手が良かったからじゃないかな?

583:デフォルトの名無しさん
19/07/18 22:00:46.19 8m1lI2X40.net
厳格で融通がきかないと嫌われる
pascalはそんな感じ

584:
19/07/18 22:15:37.33 /oDno/7H0.net
>>583
delphi は結構流行ったと思ったんですけれど…

585:デフォルトの名無しさん
19/07/18 22:18:08.64 0kCblb2b0.net
pascal失速最大の原因は:=だろう
これを採用している言語はもう一つも無い
プログラミング業界最大かつ唯一にして不可侵の大例外を抱えてるのがpascalだ

586:デフォルトの名無しさん
19/07/18 22:30:23.30 1zgaXsge0.net
pascalで開発したアプリっていうと
JaneStyleが有名かな?

587:デフォルトの名無しさん
19/07/18 22:32:00.45 1zgaXsge0.net
厳格で融通がきかないのは、教育用として最適だと思う

588:デフォルトの名無しさん
19/07/18 22:35:15.64 ugDCzjFC0.net
pascalでUNIX張りのOS書いていれば流行ったかもね

589:デフォルトの名無しさん
19/07/19 00:19:03.24 7Hdy7m6i0.net
>>585
Modula-2は:=だったような気がする。

590:デフォルトの名無しさん
19/07/19 00:22:05.35 7Hdy7m6i0.net
>>588
Delphiみたいに拡張されてれば可能だとは思うがコードが大きくなりそうなので昔のPCでは苦しいかもね。
ただし、Androidみたいに元のOSの上に乗っけて動くOSなら行けるかも。

591:デフォルトの名無しさん
19/07/19 00:25:42.16 Mih8lrFJ0.net
もう一つが奥の深さでC言語ではポインタが奥の深い箇所にあたる
この難易度が絶妙で難しい難しいと言われていて初学者には適度に難しいので挫折者が増える、
挫折者の総量が言語の価値を決定する
教育用に作られた言語は難しい箇所とか理屈に合わない箇所とか奥の深い箇所とかが無いのでオカルトとしての魅力が無い
学習曲線がいびつじゃないと流行しない

592:デフォルトの名無しさん
19/07/19 00:30:44.87 QK1dwfXD0.net
ポインタはただの入り口だろ
Cは入り口で躓く奴が多いだけで奥は寧ろ浅い

593:デフォルトの名無しさん
19/07/19 00:36:04.81 nbu0jJrl0.net
ポインタ使わないでもC言語ってプログラム書けるんだよな
無理して難しいことをしなくても良いと思う
ちゃんと動くかどうかの方が重要

594:デフォルトの名無しさん
19/07/19 00:38:14.85 QK1dwfXD0.net
ポインタを使わないならCを使わない方がいい

595:デフォルトの名無しさん
19/07/19 01:10:46.83 0vO2r76S0.net
超無理矢理ならポインタ使わずになんでもできるんかな?
いずれにせよポインタ理解してないとライブラリ使えなくて詰むでしょ。たぶん突然落ちたりメモリリークだらけのプログラムができあがるはず。

596:デフォルトの名無しさん
19/07/19 01:25:31.41 nbu0jJrl0.net
グローバル領域に予め必要な変数や配列確保しておけば
メモリーリークが発生する余地はないw

597:デフォルトの名無しさん
19/07/19 01:28:45.01 QK1dwfXD0.net
ネタで言ってるのか本気で言ってるのか判断が付かない

598:デフォルトの名無しさん
19/07/19 01:46:29.51 ZOnA3nWq0.net
ポインタ難しいって言われてるけどそんなに難しいか?
メモリイメージできれば理解できると思うけどな

599:デフォルトの名無しさん
19/07/19 02:19:29.42 1jezjf9K0.net
俺はポインタは難しいことがわかってたから、一度にすべて理解しようとしなかった
数年使って徐々に理解した
それが正解だった

600:デフォルトの名無しさん
19/07/19 02:49:16.94 ApXEphk20.net
初期化してないポインタにアクセスするとどうなっちゃうの
とか危険そうなのは試してないからわからないが
ハードウェアのイメージがあれば難しさはあまりない
(命名規則で Xxx_p と書いておけば

601:デフォルトの名無しさん
19/07/19 06:09:16.79 8762T9lH0.net
> (命名規則で Xxx_p と書いておけば
システムハンガリアンは大大大大大嫌い

602:デフォルトの名無しさん
19/07/19 07:17:09.85 gH0zRzIgM.net
>>585
ada, APLも知らない情弱知ったかは黙っとけ
>>589
まあ作者は同じだから後継って感じだし

603:デフォルトの名無しさん
19/07/19 09:10:50.31 EJb/7aTM0.net
>>599
そういう人もいるのか
おれはアセンブラもやってたので秒で理解した

604:デフォルトの名無しさん
19/07/19 09:29:24.25 uab/wKdga.net
>>580
マイコン用の小さいコードも作れるから。
昔のマイコンやPCはメモリが物凄く少ないのでその辺は重要。
少なくとも毎回でかいランタイムライブラリがくっついてしまうようではダメだ。
それと元々 UNIX の記述用に使ってた言語なので Linux 等の互換OSでも使われていて、そういうのが徐々に広まっていったので、それを通してCが流行った面もあると思う。

605:デフォルトの名無しさん
19/07/19 09:39:17.61 uab/wKdga.net
>>603
アセンブラできるとポインタについては理解が楽だよね。
アセンブラの方では普通に使う考え方だし。(というかないとプログラム作れないぐらい重要)。

606:デフォルトの名無しさん
19/07/19 11:29:42.41 1jezjf9K0.net
>>603
はじめてのプログラミング言語がCだったからな
けっこう苦労したよ、先輩

607:デフォルトの名無しさん
19/07/19 11:43:44.67 nbu0jJrl0.net
プログラムはZ80からなので、当たり前のようにアセンブラから学習した
CPUの仕組みを学ぶのにちょうど良かった気がする

608:デフォルトの名無しさん
19/07/19 12:47:23.54 8762T9lH0.net
Z80だとパイプラインとかあんまり憶えないよな
でRISCブームのとき苦労させられたと

609:デフォルトの名無しさん
19/07/19 13:03:51.18 hLCIQJ7mx.net
まぁZ80全盛期にパイプラインしてたCPUなんて限られてたしな。
そういう汎用コンピータはほぼ高級言語使われてたし。

610:デフォルトの名無しさん
19/07/19 13:07:02.40 8762T9lH0.net
6502とか

611:デフォルトの名無しさん
19/07/19 13:28:17.26 EJb/7aTM0.net
>>606
C++とかじゃ未だにオーバーライドとオーバーロードを間違えるので
レベル的にはおまえとドッコイだよ、後輩

612:デフォルトの名無しさん
19/07/19 14:13:06.92 ZOnA3nWq0.net
ムカデ長老を見習え

613:デフォルトの名無しさん
19/07/20 21:04:06.20 lWqONft90.net
泣いてる顔文字→( ; ; )がforの無限ループにしか見えないのですが、職業病でしょうか?

614:デフォルトの名無しさん
19/07/20 21:31:18.65 TRa6Slo50.net
8086のアセンブラはセグメントで挫折する・・・と言われてたけど
Z80やってたらすんなり理解できたな。

615:デフォルトの名無しさん
19/07/21 01:27:26.84 3tY7pLz50.net
>>613
煽りとかで()とか書かれてると関数に見えるときある
例: 職業病()とか言われましても

616:デフォルトの名無しさん
19/07/21 04:14:55.91 Nmc6oncn0.net
>>615
草、見えたことないわw

617:デフォルトの名無しさん
19/07/21 06:51:52.49 F3an1Rtm0.net
>>613
はい。
>>614
セグメントすごくわかりやすいと思うけどな。まともに説明出来る人と巡り会えなかったのだろうか。

618:デフォルトの名無しさん
19/07/21 08:20:20.57 /atv33Bt0.net
>>608
わかりやすいけど面倒だよね

619:デフォルトの名無しさん
19/07/21 15:59:50.66 FmQzr+LX0.net
>>613
forで無限ループつかうの?
おれはwhileかなw

620:デフォルトの名無しさん
19/07/21 16:10:09.79 g8U8cyIO0.net
forの方が短くてすむじゃないか

621:デフォルトの名無しさん
19/07/21 16:20:48.28 PhbbaTTy0.net
>>614
Z80にセグメントの概念なんてあったけっけ?
メモリバンク切り替えは機種によってはあったけど、あれはZ80の機能ではないし。

622:デフォルトの名無しさん
19/07/21 16:27:59.21 m/GaQUZU0.net
空白のcontinue節みたいなのに入る必要がないから
ちょっとwhileのほうが早いイメージ

623:デフォルトの名無しさん
19/07/21 16:43:59.35 g8U8cyIO0.net
>>622
インタープリターじゃないんだからさ

624:デフォルトの名無しさん
19/07/21 16:52:32.65 /atv33Bt0.net
>>619-620
俺はfor(;;)だな
while(TRUE)は警告表示されることが多かったから

625:デフォルトの名無しさん
19/07/21 18:08:15.14 Q0wcPMRB0.net
for (;;) とwhile (1) がどっちがぱっと見分かりやすいか戦争勃発しますか?
あとfor派は;;周りにスペースを入れるか入れないかでさらに細かく派閥が分かれていると聞きました!

626:デフォルトの名無しさん
19/07/21 18:19:58.86 FmQzr+LX0.net
>>625
まさに永久ループ戦争!

627:デフォルトの名無しさん
19/07/21 18:30:02.78 +S54SSox0.net
字下げのいらないgotoも参戦

628:デフォルトの名無しさん
19/07/21 18:32:50.79 Q0wcPMRB0.net
あ、do {} while(1);派も出てくるとおもうので皆さん頑張ってください応援してます

629:デフォルトの名無しさん
19/07/21 18:38:59.23 g8U8cyIO0.net
do while(0)は便利

630:
19/07/21 18:39:57.32 vddupZNY0.net
>>629
それは #define で使うときだけでしょう?

631:デフォルトの名無しさん
19/07/21 18:44:37.26 g8U8cyIO0.net
いや、エラー判定とかでもよく使うだろ?

632:デフォルトの名無しさん
19/07/21 18:48:06.96 I0JRxlnTx.net
for (;;) は forever と読むとか

633:デフォルトの名無しさん
19/07/21 18:50:32.60 /atv33Bt0.net
バッドノウハウに近いが
do {
if(...) break;

if(…) break;

} while(0);
みたいなのは昔書いてたわ

634:デフォルトの名無しさん
19/07/21 18:52:10.72 Q0wcPMRB0.net
do {} while (0); の意味と目的【do while false イディオムの利点】 | MaryCore
URLリンク(marycore.jp)

635:デフォルトの名無しさん
19/07/21 18:58:23.23 FmQzr+LX0.net
flag=true;
while(flag)
{
flag=(....);
}

636:デフォルトの名無しさん
19/07/21 19:09:32.73 /atv33Bt0.net
>>634
do {
if (that(value)) break;
if (value == -1) break;
if (value == 0) break;
puts("有効な値です");
} while (0);
みたいなのは
do {
if (
that(value)
|| value == -1
|| value == 0
) break;
puts("有効な値です");
} while (0);
って書けばいいだけ
do {
if (that(value)) break;
value = f(…);
if (value == -1) break;
value = g(…);
if (value == 0) break;
puts("有効な値です");
} while (0);
みたいに間に処理をはさまる場合が難しい

637:デフォルトの名無しさん
19/07/21 19:18:11.94 Q0wcPMRB0.net
このスレって直接ここに複数行のソース書き始める人多いよね

638:デフォルトの名無しさん
19/07/21 19:37:52.68 m/GaQUZU0.net
>>633
小さなスコープを作るため?

639:デフォルトの名無しさん
19/07/21 19:39:13.75 g8U8cyIO0.net
breakが使えるスコープね

640:デフォルトの名無しさん
19/07/21 20:14:20.69 /SITzbMm0.net
#define fe for( ; ; )
が最強

641:デフォルトの名無しさん
19/07/21 20:35:26.43 +S54SSox0.net
>633
おかしな事してるのが一目で、continue が外に漏れるこれ オススメ
switch(0)default:{

642:デフォルトの名無しさん
19/07/21 20:45:42.22 R+Rb+3j1d.net
gotoが便利すぎて禁止されがちなのが悪い。ちゃんと使えばコードが見やすくなることこの上なしなのに。

643:デフォルトの名無しさん
19/07/21 21:09:22.26 /atv33Bt0.net
>>642
そう言うこと
なので最近は素直にgotoで書くことが多い
一部の言語の様にブロックに名前付けて
break 名前;
でそのブロックを抜けられるようにしてくれれば良いのにと常々思う

644:デフォルトの名無しさん
19/07/21 21:21:29.94 m/GaQUZU0.net
ないものねだりではありますが
perlのようにブロックやループの頭にラベルをつけて、
redo next last があったらもっと良い
do {...} while(0); も {} と簡潔

645:デフォルトの名無しさん
19/07/21 21:42:59.10 ZJZWYLqf0.net
>>642
便利すぎってどういうことだよ
教条主義的goto禁止論の域を出とらんだろうが

646:デフォルトの名無しさん
19/07/21 21:46:07.68 AbjqA2h30.net
>>621
インデックスのことかも

647:デフォルトの名無しさん
19/07/21 22:36:03.44 c+HlyquL0.net
>グローバル領域に予め必要な変数や配列確保しておけば
>ネタで言ってるのか本気で言ってるのか判断が付かない
実際に仕様なんかがしっかりしているタイプで
メモリー確保が動的に大きく変化しないものなら
実際にそういう風に作っているのを聞いた事は有る
配列式だと動的に確保したり開放したりが無く
リークしたり無効になったりしない分かなり安全
実行開始時に使用する領域が完全に確保されているから

648:デフォルトの名無しさん
19/07/21 23:24:53.03 R+Rb+3j1d.net
>>645
すまん、そんなに深い意味はない。

649:デフォルトの名無しさん
19/07/22 00:04:19.79 PN8KKKdJa.net
静的な所にプール作るのはメモリ制限ある組込では割とあったと思いますよ

650:デフォルトの名無しさん
19/07/22 15:35:08.24 vmYUDJ0Ja.net
>>643
最近の言語ではそういうのあるね。
とはいってもJavaには既にあったのでかなり前からあるな。
Java以前はあるかどうか俺は知らん。

651:デフォルトの名無しさん
19/07/22 15:37:04.86 vmYUDJ0Ja.net
あ、Perlもループにラベル付けてlastで抜けるなんてのあるな。

652:デフォルトの名無しさん
19/07/22 16:18:33.80 QnLUYAOH0.net
break ラベル で、多重ループから一気に抜けられると便利なんだがな

653:デフォルトの名無しさん
19/07/22 16:35:14.27 rxI3cfFL0.net
gotoが便利すぎというより
単純な break returnで間にあわないときには
それしか制御がないのでは

654:デフォルトの名無しさん
19/07/22 17:24:33.59 7pc0Xm6O0.net
二重ループから抜けるにはgotoが一番
gotoを廃止した言語制作者は天罰を受けるべき

655:デフォルトの名無しさん
19/07/22 17:30:50.79 rxI3cfFL0.net
goto はそれで使われている保障がないから、
保守性のためにも
ループなどに名前付けて、それを抜けると明記したい

656:デフォルトの名無しさん
19/07/22 17:54:19.31 e8FkVPqsa.net
まず多重ループを避けろと

657:デフォルトの名無しさん
19/07/22 18:05:34.66 LktYqlpm0.net
gccで X Window System (x11) でウインドウつくって画像合成するのって
どうすればできますか? なにかサンプルプログラムなど無いでしょうか?

658:デフォルトの名無しさん
19/07/22 18:22:30.58 QnLUYAOH0.net
>>656
二次元配列を総なめする場合に
ループを 1変数でやるのかな?

659:蟻人間
19/07/22 18:36:31.65 zh10SCAHd.net
>>657
古本を漁ればやり方が書いてあるかも。
XScreenSaverのソースみれば参考になるかも。

660:蟻人間
19/07/22 18:39:10.09 zh10SCAHd.net
いにしえのシステムなら、関数名をmanコマンドで引けば、X Windowの関数のマニュアルが見られるはず。

661:デフォルトの名無しさん
19/07/22 18:42:21.76 LktYqlpm0.net
>>659
linuxOSだとSDL(Simple DirectMedia Layer)で書いたほうが情報が多く 
描画書き換え速度もはやい気がします
SDLに移行したほうがやはり無難でしょうか?

662:デフォルトの名無しさん
19/07/22 18:50:51.45 QnLUYAOH0.net
質問者自身で決定すれば良いと思うが

663:蟻人間
19/07/22 18:54:21.58 zh10SCAHd.net
>>661
X11は将来、Waylandにバトンを渡すらしい。新しい端末ではX11が採用されない状況が考えられる。クロスプラットフォームの方が安心かな?

664:蟻人間
19/07/22 18:56:55.15 zh10SCAHd.net
暗号化されてないX11をネットワークで見たら丸裸だからあんまり使いたくないよね。

665:デフォルトの名無しさん
19/07/22 19:02:32.68 LktYqlpm0.net
ネットワーク環境はsshしか使ったこと無いのですが
SDL_net などは関数に暗号化などがふくまれているのですか?

666:蟻人間
19/07/22 19:08:12.59 zh10SCAHd.net
>>665
ソーシャルゲームを作るなら、暗号化は必須。暗号化方式を決めて、それに合った暗号化専用のライブラリーを使う形になる。

667:デフォルトの名無しさん
19/07/22 19:10:57.83 LktYqlpm0.net
>>666
C言語の暗号化ライブラリで使いやすいのおせーてください

668:蟻人間
19/07/22 19:22:24.63 zh10SCAHd.net
ソーシャルゲームは専門ではないが、暗号化なら
URLリンク(ja.m.wikipedia.org)

669:デフォルトの名無しさん
19/07/22 19:25:19.41 MRg17CtQa.net
いろいろあるんですけど、ライセンス的にopensslでいいやみたいな感じになりましたね
waylandは5年後くらいにはなんとかなるんかな。どういうレイヤでサービス提供したいのかよくわからん所がある。

670:デフォルトの名無しさん
19/07/22 21:33:35.10 tAjmkx+m0.net
同じくopensslでいいんじゃないかと思いますな

671:デフォルトの名無しさん
19/07/23 03:25:09.81 /ZO3BTO70.net
gchar **command = (gchar *[]){"./Hello.exe","World",NULL};
を gcc6 で compile すると以下の2種類の warning が出ます。
warning: ISO c++11 does not allow conversion from string literal to 'gchar *' (aka 'char *') [-Wwritable-strings]
warning: pointer is initialized by a temporary array, which will be destroyed at the end of the full-expression [-Waddress-of-array-temporary]
どう書くのが正解なのでしょうか? 教えてください。最後の NULL がなければ、
gchar **command = (gchar **)((char [][20]){"./Hello.exe","World"});
で良いと思うのですが、最後の NULL も必要です。よろしくお願いします。

672:デフォルトの名無しさん
19/07/23 04:01:15.67 XJs/DfWFa.net
要素の文字列をそれぞれキャストしてみるとか?
でも別に文字列の実体を用意した方が無難では。

673:デフォルトの名無しさん
19/07/23 05:54:57.80 XS6t8zxL0.net
char * const command[3] = {"./Hello.exe","World"};

674:デフォルトの名無しさん
19/07/23 09:58:47.20 J+ZHGa1Mr.net
初心者で勉強中なんですが、
switch文は
if文みたく
switch(a >0)のように()の中に関係演算子を使った式はかけないんでしょうか?
エラーがでるので無理なのかなと思ったんですが

675:デフォルトの名無しさん
19/07/23 10:46:29.88 DdnFitx+M.net
エラーじゃなくて警告では?
動かない理由はないと思うのでgccで試してみたけど、ちゃんと動いたよ。
ただ、結果は1か0の2値しかないのでif文使ったほうが良いと思うよ

676:デフォルトの名無しさん
19/07/23 10:51:17.50 unlUKZmGx.net
本当は
 switch (a) {
 case a > 0:
...
的なことをしたかったのではないかとエスパーしてみる。

677:デフォルトの名無しさん
19/07/23 11:36:41.71 LSxEgoA20.net
>>674
これなんか意味あるの?
具体的に何がしたいか知りたいなあ

678:デフォルトの名無しさん
19/07/23 11:42:11.95 CU39ntZ20.net
>>676
switch(true) って裏技 あれマジで気色悪いよね

679:デフォルトの名無しさん
19/07/23 11:44:08.90 SF2VCGvmM.net
case に何を書けばいいんだ?false は 0 でいいだろうけど、true は?

680:671
19/07/23 11:49:30.09 /ZO3BTO70.net
>>673
>char * const command[3] = {"./Hello.exe","World"};
ありがとうございます。これでも1つめの warning "does not allow conv..." は出ました。皆さんの所では出ませんか?
それと、 command はどうしても char ** 型である必要があります。
仮想端末で何かを実行させる関数 vte_terminal_spawn_async() に与えるためです。
URLリンク(developer.gnome.org)
引き続きアドバイスをお願いします。

681:デフォルトの名無しさん
19/07/23 11:53:01.06 4sm3RNn+0.net
>>674
書くことはできる
関係式は int 型の 0 または 1 という結果を生じるので
switch (a > 0) は a の値により
switch (0) もしくは
switch (1) と等価になる
おまえさんが言いたいのは switch で範囲チェックができるのか
ということだろうがそれはできない
a と case に指定した定数の == 比較しかできないのが switch だ
不等号や != が使いたければ if 文か3項演算子ということになる

682:671
19/07/23 12:04:01.45 /ZO3BTO70.net
>>672
ありがとうございます。具体的にはどうしたら良いでしょうか?
char list[2][20] = {"./Hello.exe","World"};  
gchar **command = (gchar **){ (char *)list[0], (char *)list[1], NULL};
だと、↓のエラーになります。
error: function-style cast to a builtin type can only take one argument
正しいやり方をお願いします。
うーむ。どうしたものか。 gchar ** 型をどうやって作るのかさっぱり分からない。。。
ダブルポインタがよく分かってない。もう warning は放っておくしかないのかな?

683:デフォルトの名無しさん
19/07/23 12:10:49.21 XJs/DfWFa.net
その前に、671の警告でC++11って出てるのはなぜなのか。
複合リテラルってあれキャストではないよな。知らんけど。

684:671
19/07/23 12:21:12.41 /ZO3BTO70.net
>>672
gchar list1[][20] = {"../Exe/H2O.exe","World"};
gchar *list2[] = {(gchar *)list1[0], (gchar *)list1[1], NULL};
gchar **command = (gchar **)list2;
いろいろ試したところ、↑だと warning でなくなりました。意図されたのはコレでしょうか?コレで良いでしょうか?

685:デフォルトの名無しさん
19/07/23 12:21:15.34 d2s+lfJ+0.net
>>682
URLリンク(ideone.com)
これなら警告出ないけど、やりたいことと合ってるかどうかは知らん

686:デフォルトの名無しさん
19/07/23 12:22:08.73 7yf4dx7Q0.net
>>680
文字列リテラルは書き換え不可なので当然の警告。
char const* const command[] なら警告は出ないだろうけど、渡した先で書き換えしない保証がないならアウト。
渡した先で書き換えしない保証がないなら、リテラルでの初期化は無理だと思う。

687:671
19/07/23 12:24:46.80 /ZO3BTO70.net
>>683
なんかおかしいですよね。
でも Makefile に書いていいて実際に compile に使っているのは間違いなく gcc6 です。
warning が g++6 と共通なのですかね?

688:デフォルトの名無しさん
19/07/23 12:30:44.31 d2s+lfJ+0.net
URLリンク(ideone.com)
そもそもgcharってなんなの?
charのエイリアスかなんか?

689:デフォルトの名無しさん
19/07/23 12:33:40.67 d2s+lfJ+0.net
> warning: ISO c++11 does not allow conversion from string literal to 'gchar *' (aka 'char *') [-Wwritable-strings]
charのエイリアスか
なら最初に書いとけよ

690:デフォルトの名無しさん
19/07/23 12:38:30.05 XJs/DfWFa.net
>>684
そういう話です。

691:671
19/07/23 13:18:08.85 /ZO3BTO70.net
>>688
ありがとうございます。スマートですね。参考にします。
gchar は char の別名です。すみません。

692:671
19/07/23 13:24:51.89 /ZO3BTO70.net
>>683
Makefile には gcc6 と書いてあるのですが、出力をみると c++ でコンパイルしていました。。。
今気づきました。 -std=c++11 もつけてある。
Cのソースを c++ でコンパイルするとマズいですか?今のところ何も問題はないです。

693:デフォルトの名無しさん
19/07/23 14:56:41.16 XJs/DfWFa.net
>>692
C++に複合リテラルないんじゃないかな。なくても困らんか。
あとさっきの配列の要素にstrdup突っ込むとconstにしなくていいかもな。
もしくはmemcpy(malloc(100),"hoge",5)とか。
標準に沿った書き方かどうかは知らん。

694:671
19/07/23 17:13:31.67 TCk4qRZWa.net
>>693
ありがとうございます。なるほど、複合リテラルですね。調べてみます。
自分、C で書いていて compile も C でやっているつもりだったんですが、コンパイラが c++ だった。。。
これは c++ 用の Makefile を流用した為です。
最初 c++ でアプリを作ろうとして、Makefile を用意して、ソースを書き始めたのですが、途中で仮想端末オブジェクトが c++ ではうまく使えない事が判明して、
ソースを C に書き変えたのです。Makefile はフラグ等あるので流用してしまった...
これ以上は困らないですかね。困った時にはコンパイラが c++ な為を疑ってみます。
strdup と memcpy も試してみます
これをヒントに検索していて g_strsplit なる関数もある事を発見しました。

695:デフォルトの名無しさん
19/07/23 18:36:28.60 5chEKyGia.net
C++ には引数に void だけって関数がないらしいぞ。
その他細かい違いがあるかも知れないので要注意だ。

696:デフォルトの名無しさん
19/07/23 18:58:12.02 Ffr5F2PG0.net
どちらかというと()の解釈が違う
c++だと()は(void)と同じ
cは()が(void)と同じになる文脈とそうでない文脈がある

697:デフォルトの名無しさん
19/07/23 19:36:26.79 5chEKyGia.net
こうしてまた(void)論争が始まり3スレぐらい消費されるのであった。

698:デフォルトの名無しさん
19/07/23 19:42:24.88 FnKSwmbm0.net
生兵法家しかいないスレだから仕方ないね

699:デフォルトの名無しさん
19/07/23 19:45:15.53 5chEKyGia.net
また一つ燃料が投下された

700:デフォルトの名無しさん
19/07/23 20:15:50.53 xWhG5FgG0.net
線香花火程度

701:デフォルトの名無しさん
19/07/23 20:23:08.15 d2s+lfJ+0.net
strdupはいつになったら標準ライブラリに入るんですか?

702:デフォルトの名無しさん
19/07/23 20:55:09.99 4sm3RNn+0.net
> cは()が(void)と同じになる文脈とそうでない文脈がある
ほほう、それはどんな場合だ? 具体的なコードで示せるか?

703:デフォルトの名無しさん
19/07/23 20:56:28.16 LLlz9dHQ0.net
>>668
>>669
>>670
ありがとう!
なんとかがんばってやってみます

704:デフォルトの名無しさん
19/07/23 21:08:17.10 Ffr5F2PG0.net
int f();
int f()
{
return 1;
}

705:
19/07/23 21:21:24.40 JcFEdZGk0.net
>>702
①(void) と同じ
void f() { return; }
②(void)と違う
void f();

706:デフォルトの名無しさん
19/07/23 21:47:42.09 4sm3RNn+0.net
>>705
URLリンク(paiza.io)
URLリンク(ideone.com)
URLリンク(codepad.org)

707:
19/07/23 21:55:11.77 JcFEdZGk0.net
>>706
thx 納得しました
URLリンク(ideone.com)

708:デフォルトの名無しさん
19/07/23 21:58:12.31 Ffr5F2PG0.net
>>706
URLリンク(ideone.com)

709:デフォルトの名無しさん
19/07/23 22:01:20.82 4sm3RNn+0.net
>>708
ん、何が言いたい?

710:デフォルトの名無しさん
19/07/23 22:13:17.57 Ffr5F2PG0.net
>>709
()と(void)が違う例
1行目のコメントはずして、2行目にコメントつけたらコンパイル通る
定義の時は()は(void)と同じで引数の無い関数の定義になる

711:
19/07/23 22:19:55.80 JcFEdZGk0.net
>>710
>定義の時は()は(void)と同じで引数の無い関数の定義になる
そ、れ、が…
URLリンク(ideone.com)

712:デフォルトの名無しさん
19/07/23 22:31:08.37 cffvmBp10.net
プロトタイプ宣言で引数部分を空にすると引数チェックがされなくなる
例えばこんなコードも動く
URLリンク(ideone.com)

713:デフォルトの名無しさん
19/07/23 22:43:31.16 Ffr5F2PG0.net
URLリンク(softwareengineering.stackexchange.com)
draftだから正規版で変わった可能性もあるが
n1570の133,134ページに記載がある

714:デフォルトの名無しさん
19/07/23 23:42:31.01 4sm3RNn+0.net
>>710
すまんが、寝落ちする
明朝またくる

715:デフォルトの名無しさん
19/07/24 02:42:47.45 S0ZgllDI0.net
はっ。ちょっと目を離したスキに(void)ネタだけでもうこんなに書き込みが。

716:デフォルトの名無しさん
19/07/24 03:03:06.58 VPRaWuN40.net
2進数で表現されている多倍長整数を10進数の文字列に変換する場合、機械語レベルではどうするのが現代風ですか。
レジスタ長までならBCD変換でしょうか?
例えば、Cのprintf(“%d”, 12345)はどういう実装がされますか。
多倍長ならまた違ってきますか。

717:
19/07/24 05:30:33.02 +4E3jW9F0.net
>>716
C++ ですが多桁長演算を書いています。
スレリンク(tech板:51番)
std::ostream &operator<<(std::ostream &stream, mpz_base_class c)
std::ostream &operator<<(std::ostream &stream, mpz_class c)

718:デフォルトの名無しさん
19/07/24 06:54:11.66 VPRaWuN40.net
>>717
ありがとうございます。
多倍長演算では内部2進数のまま演算しているのですね。

719:デフォルトの名無しさん
19/07/24 06:55:28.24 VPRaWuN40.net
改めて質問します。
2進数で内部表現されている整数を10進数の文字列に変換する場合、
機械語レベルではどうするのが現代風ですか。
レジスタ長までならBCD変換でしょうか?
例えば、Cのprintf(“%d”, 12345)はどういう実装がされますか。

720:デフォルトの名無しさん
19/07/24 09:34:09.57 UuFmwqvta.net
現代風?
現代だろうが古代だろうが10で割った余りを並べながら10で割る事は変わらんと思うが。(CPUによってはBCDに一発変換なんて命令あるのかな?あればそれ使うと速いだろうね)。

721:デフォルトの名無しさん
19/07/24 10:27:00.90 H/U9sRCS0.net
JIS X3010:2003
6.7.5.3 関数宣言子(関数原型を含む)
意味規則 宣言“T D1”においてD1 が形式
D ( 仮引数型並び )
又は
D ( 識別子並びopt )
をもつ場合,次のとおりとする。
識別子並びは,関数の仮引数の識別子だけを宣言する。関数定義の一部である関数宣言子で識別子並びが空の場合,関数が仮引数をもたないことを指定する。関数定義の一部でない関数宣言子の識別子並びが空の場合,仮引数の個数及び型の情報がないことを指定する(124)。
(124) “今後の言語の方針”(6.11.6 参照)。
(125) 両方の関数型が“古い形式”の場合,仮引数の型は比較されない。
6.11.6 関数宣言子 空の括弧を伴う関数宣言子(関数原型形式の仮引数型並びではない。)の使用は,廃止予定事項とする。
6.11.7 関数定義 仮引数の識別子並びと宣言並びを別々に与える関数定義(関数原型形式の仮引数の型及び識別子の宣言ではない。)の使用は,廃止予定事項とする。

722:デフォルトの名無しさん
19/07/24 10:30:48.21 sKxa8jzv0.net
>>719
こうなっているらしい
printf()のソースコードで、ソースコードリーディングのコツを身に付ける (2/3):main()関数の前には何があるのか(5) - @IT
URLリンク(www.atmarkit.co.jp)

723:デフォルトの名無しさん
19/07/24 10:35:17.11 q7vPBAFqa.net
ソースのコメントで変数毎に「16進整数」とか「10進整数」とか区別してるのあったけど意味わからんかった。
全部intなのに。

724:デフォルトの名無しさん
19/07/24 10:50:43.56 H/U9sRCS0.net
void f() {} //関数定義の一部である関数宣言子で識別子並びが空の場合,関数が仮引数をもたないことを指定する。
void g(); //関数定義の一部でない関数宣言子の識別子並びが空の場合,仮引数の個数及び型の情報がないことを指定する(124)。
int main()
{
f(1); //NG: 0個の仮引数に1個の実引数
g(1); //OK: 任意の仮引数に1個の実引数
}
void f(); //両方の関数型が“古い形式”の場合,仮引数の型は比較されない。
void g() {} //両方の関数型が“古い形式”の場合,仮引数の型は比較されない。
/*
D:\learn\c>cl 710.c /W4 /nologo /c
710.c
D:\learn\c>gcc 710.c -Wall -std=c18 -c
D:\learn\c>clang-cl 710.c /W4 /c
710.c(6,8): warning: too many arguments in call to 'f'
f(1); //NG: 0<8C><U+0082>?<BC><88><F8><90><94><82><C9>1<8C><U+0082>?<C0><88><F8><90><94>
~ ^
1 warning generated.
D:\learn\c>
*/

725:デフォルトの名無しさん
19/07/24 12:11:20.90 /HKiGEdd0.net
>>723
ひょっとして変数の接尾語に10進数や16進数を表す3文字以下のものを
付けるべきなのでは?
他のところの計算の時に間違えてしまう可能性が減ると思う

726:デフォルトの名無しさん
19/07/24 12:43:12.82 PgWkyPpkM.net
>>720
Z80やx86にはBCD関連の命令がありました。
最近のレジスタビット数の大きいプロセッサは知りませんので伺いました。
10で割った余りだと桁数nとしてO(n^2)の計算量になりますよね。
流石にそれはないかなと思っています。

727:デフォルトの名無しさん
19/07/24 12:53:46.86 iTtNhbrVM.net
URLリンク(days-of-programming.blogspot.com)

728:デフォルトの名無しさん
19/07/24 13:07:48.35 q7vPBAFqa.net
O(n)じゃないか?
x64はもう命令ないんだね

729:デフォルトの名無しさん
19/07/24 13:17:22.40 /roNvT5Ja.net
O(n)だね。
文字列変換時にBCDにするのではなく演算からBCDとして扱うプログラムを見たことある。
あまり効率が良いとは思えなかったが。

730:デフォルトの名無しさん
19/07/24 17:12:57.35 s/qhJVlP0.net
x64の場合、ALUでやる2ケタの加減乗除の方は廃止だが、FPUでやる18ケタの10進と2進の間の変換はまだ使える

731:デフォルトの名無しさん
19/07/24 17:15:31.56 rxR1MP+Fd.net
聞くのはここでいいのか微妙だけど質問です
abzのエンコーダで回転方向を検知したいんですがzパルスでリセットされるときに回転方向が正しく検知されなくなってしまうところの解決方法どなたか知ってますか

732:デフォルトの名無しさん
19/07/24 17:21:50.17 PgWkyPpkM.net
>>728
mod 10でO(n)、
それを桁数nに比例した分繰り返すからO(n^2)
と考えています。
O(n)で内部2進表現の整数→10進数の文字列に変換ができればいいのですけどね。
あるいはdecimal型を持つ言語がありますが、そのような型では内部でBCDで持ってたりするのでしょうか。

733:デフォルトの名無しさん
19/07/24 17:55:29.62 YVgDjaZ/M.net
1桁分のmod 10だけなら計算量は固定なのでO(1)
n桁分を繰り返すなら計算量はO(n)
すべての計算量のオーダーとしてはO(n)

734:デフォルトの名無しさん
19/07/24 18:22:37.58 +vIzXAhOd.net
>>733
わかりました。
剰余を固定命令数でできる桁数内であればO(n)でできるということですね。
現在、内部2進表現の整数を10進数の文字列に変換する方法としては、mod 10の繰り返しがメジャー(ベスト)ですか?
printfの%dもこの実装が主流でしょうか。

735:デフォルトの名無しさん
19/07/24 18:23:32.53 q7vPBAFqa.net
modの計算量が固定ってこともないんじゃ?
除数にかなり依存しそうな

736:
19/07/24 19:18:26.26 +4E3jW9F0.net
>>718
そうです、10進法変換は表示のときにはじめて実施します

737:
19/07/24 19:20:00.24 +4E3jW9F0.net
>>719
単純に 10 で割った余りを並べるだけですが、ただ >>717 で紹介したコードでは幾分かの最適化が追加されています

738:
19/07/24 19:21:21.51 +4E3jW9F0.net
>>726
いや、10 で割った余りそのものであり、他に方法はありません
ただ、最適化の余地はあり、それは >>717 に示しました

739:
19/07/24 19:22:41.56 +4E3jW9F0.net
>>729
BCD はインプリメントする側としてはやる気が起きないものだ、と思いますよ
足し算、引き算はいいとして、掛け算、割り算は BCD では実装できないのです

740:
19/07/24 19:23:34.46 +4E3jW9F0.net
>>734
>現在、内部2進表現の整数を10進数の文字列に変換する方法としては、mod 10の繰り返しがメジャー(ベスト)ですか?
他に方法はありません、ただし最適化する余地はあると思っています

741:デフォルトの名無しさん
19/07/24 21:42:02.70 H/U9sRCS0.net
>>739
は? 乗算と除算が実装できない??
俺らの脳には義務教育できっちり実装されているんだがw

742:
19/07/24 21:53:50.78 +4E3jW9F0.net
>>741
今の話題は BCD
BCD にて効率的に乗算・除算を実装している CPU はありますか?

743:デフォルトの名無しさん
19/07/24 23:16:58.12 VPRaWuN40.net
>>737
わかりました。
10進全桁を一旦BCDで全て求めなくても、
10進1桁ずつ求めることが出来るのですね。
>>738
単純に興味があるのでお聞きするのですが
「他に方法はありません」と断定する理由は何でしょうか。
効率を考えなければ、
単なる最適化ではない異なるアルゴリズムの他の方法が
容易に思いつきますが、例えば、
10で割る方法が原理的に最適であると証明できる
というようなことでしょうか。

744:デフォルトの名無しさん
19/07/24 23:55:14.64 gSIpsgHia.net
秘密はvoidにありそう

745:デフォルトの名無しさん
19/07/25 00:31:43.06 iiNbTbUN0.net
DIVやIDIVを上回る何かを見つけたとしたら大ごとですやん
除算器のない初期のRISCや貧ソな何かで無理矢理だとシフト使こた工夫もアリかもしれんけど
if (x<0) {x = !x; ...}
do {x = x>>4 +(v = t = (x&0xf), t>>=2, t &= (t>>1), v -= t*10, t);...}while (x)
みたいな?

746:デフォルトの名無しさん
19/07/25 00:55:04.35 iiNbTbUN0.net
あ、2 と 4 で or 取らなきゃダメか

747:デフォルトの名無しさん
19/07/25 01:12:42.13 AQEcWXoca.net
テーブル探す様な方法はないの?

748:
19/07/25 05:20:17.48 1pUY2R+h0.net
>>747
なるほど…そういう方向性はありえますね

749:デフォルトの名無しさん
19/07/25 06:55:37.49 PBP8yj9y0.net
>>742
そう、BCDの話だ
おまえさんはBCDでは乗算と除算が実装できないと言ったんだ
マイクロコードかどうかは関係ない

750:デフォルトの名無しさん
19/07/25 10:19:57.39 PDyUwndbM.net
>>747
あなんか昔はそういうHWがあったらしい

751:デフォルトの名無しさん
19/07/25 10:24:34.16 PLeF7EkO0.net
乗算部分はテーブル化しやすそう
除算は何処で軽くするのがいいのか皆目見当がつかねぇ

752:デフォルトの名無しさん
19/07/25 10:39:38.12 AQEcWXoca.net
10進表記に関しては、いきなり割り算するよりはまず9とか99とか999とか9999とかと引き算なり大小比較なりしてもよさそうだけども。

753:デフォルトの名無しさん
19/07/25 10:43:55.98 AQEcWXoca.net
まあ除算は昔からクソ遅いよな
floatで逆数かける感じの方が速そうだ

754:デフォルトの名無しさん
19/07/25 10:50:12.92 D8pzUtDE0.net
>>753
可能なら逆数を掛けたほうが早いなんてハックに効き覚えがある
(同じように2,4,8はシフト演算子で処理)

755:デフォルトの名無しさん
19/07/25 12:08:29.39 UzGMA6uu0.net
ビットリバーサルについて質問です
誰もがわかりやすく簡単にできる方法は
C言語でどうなるでしょうか?

756:デフォルトの名無しさん
19/07/25 12:33:12.38 IOfcNDqSM.net
>>753-754
初期のスーパーコンピューターCray-1はそういう構造
って結構有名な話
URLリンク(news.mynavi.jp)

757:デフォルトの名無しさん
19/07/25 12:35:03.65 /OuGEEZ00.net
整数定数除算は速度優先オプティマイズでアセンブラ出力見てみなよ

758:デフォルトの名無しさん
19/07/25 12:53:26.79 5Cp6xaylM.net
>>734
隣同士でひっくり返して、2こセットで隣同士でひっくり返して、4こセットで隣同士でひっくり返して…
ってやるらしい。賢いね
uint32_t reverse(uint32_t x) {
x = (((x & 0xaaaaaaaa) >> 1) | ((x & 0x55555555) << 1));
x = (((x & 0xcccccccc) >> 2) | ((x & 0x33333333) << 2));
x = (((x & 0xf0f0f0f0) >> 4) | ((x & 0x0f0f0f0f) << 4));
x = (((x & 0xff00ff00) >> 8) | ((x & 0x00ff00ff) << 8));
return ((x >> 16) | (x << 16));
}

759:デフォルトの名無しさん
19/07/25 12:55:25.80 5Cp6xaylM.net
おっと>>755の間違い

760:デフォルトの名無しさん
19/07/25 13:08:04.63 IOfcNDqSM.net
>>755
簡単でわかり易いと言うなら素直にビット毎に処理すればいいと思う
unsigned int x = …;
unsigned int y = 0;
for(size_t i = 0; i < 32; i++){
y <<= 1;
y |= x & 1;
x >>= 1;
}
てな感じ
高速化したいならテーブル引くなりすればいいかと

761:デフォルトの名無しさん
19/07/25 13:31:47.50 UzGMA6uu0.net
>>758
>>760
ありがとうございます
どちらともわかりやすいですね!

762:デフォルトの名無しさん
19/07/25 13:33:38.69 UzGMA6uu0.net
高速フーリエ変換でのビットリバーサルの書き方がどんなものがあるのか興味があったのでききました
ビットリバーサルでの処理では速度は余り変わらそうなのでわかりやすい
表記で書こうとおもいます

763:
19/07/25 19:25:45.50 1pUY2R+h0.net
>>749
では訂正しましょう
「BCD では『効率的な』乗算・除算は実装できない」、てへぺろ

764:
19/07/25 19:26:49.53 1pUY2R+h0.net
>>754
その逆数を実時間で効率的に求める方法はありますかね…あらかじめ求めておくというのは除いたとして

765:デフォルトの名無しさん
19/07/25 20:09:17.88 S7g95QIG0.net
BCDじゃなく10bitで10進3桁表すieee 754-2008のdecimal floating pointだと、回路的にそこまで無駄じゃないよね

766:デフォルトの名無しさん
19/07/25 20:28:09.79 AQEcWXoca.net
>>764
ニュートン法とか?

767:デフォルトの名無しさん
19/07/25 20:40:39.43 2UHg/Et4M.net
>>763
効率的とは?
ハードワイヤードでも組めるだろ?

768:デフォルトの名無しさん
19/07/25 20:56:17.18 UzGMA6uu0.net
加算 減算 乗算 除算 って回路的にどうやってるんだ?
マルチバイブレータ系の回路が基本になってるのはわかるけど
詳細部でどうやってるんだ?

769:デフォルトの名無しさん
19/07/25 21:14:22.23 mnPttr/b0.net
log通った後だと 乗算が加算に 除算が減算になるけど
log通して加減算した後に累乗で戻すほうが重いんじゃろな

770:デフォルトの名無しさん
19/07/25 21:23:45.17 zGmF5f4I0.net
>>768
加減算はXORそのもの。
乗除は知らん。

771:デフォルトの名無しさん
19/07/25 21:49:16.57 UzGMA6uu0.net
>>770
加減算のXORの場合 繰り上がりはどうやってるんだ?

772:デフォルトの名無しさん
19/07/25 22:44:02.09 nrEjL4Jo0.net
>>771
単なるANDだろ
URLリンク(ja.m.wikipedia.org)加算器

773:デフォルトの名無しさん
19/07/25 22:52:27.40 fhhE/m2Aa.net
繰り上がりはand
ただ実際は一気にがばっと先読みするので、すぐ下の桁だけに依存するわけではない

774:デフォルトの名無しさん
19/07/25 23:15:13.43 ulXo9PgcM.net
お前らコンピュータアーキテクチャの勉強もしたことないのか?

775:デフォルトの名無しさん
19/07/25 23:18:36.17 QJIil52G0.net
ビジコン嶋さんがアップをはじめました

776:デフォルトの名無しさん
19/07/26 00:14:46.69 jqp1LWPO0.net
>>772
URLリンク(ja.wikipedia.org)
半加算器と全加算器の組み合わせとかいろいろあるんやなw

777:デフォルトの名無しさん
19/07/26 00:22:06.93 jqp1LWPO0.net
キャリールックアヘッドアダー  っていう加算器の高速化手法もあるんかぁw

778:
19/07/26 08:11:37.04 PuJwVoXL0.net
>>777
実はリップルキャリーと回路は同じです
キャリールックアヘッドは、「多入力ゲートは2入力ゲートを組み合わせた分よりも速い」という仮定のもとに組まれたものです

779:デフォルトの名無しさん
19/07/26 08:36:36.41 MNOQNbTnM.net
またまたいい加減なことを。
2入力ゲートだけでCLA作れるし、2入力ゲートだけのRCAより速いよ。

780:デフォルトの名無しさん
19/07/26 09:14:13.64 93rRyCwBa.net
そりゃ多入力ゲートが2入力で模倣できるって言ってるだけでは

781:デフォルトの名無しさん
19/07/26 09:22:46.42 MNOQNbTnM.net
同じ入力数に制約しても速いって言ってんの

782:デフォルトの名無しさん
19/07/26 10:49:53.96 klJ/NeRW0.net
マルチエミッタって、スイッチング速いんだっけ?

783:デフォルトの名無しさん
19/07/26 13:02:58.65 BFOSMSUh0.net
スレチですみません
ここの人達は「プログラム」と聞いたときにどちらを思い浮かべますか?
* バイナリ
* コードが書かれたファイル
* コード

784:デフォルトの名無しさん
19/07/26 13:05:55.53 klJ/NeRW0.net
ROMにプログラム(書込)するのはバイナリ

785:デフォルトの名無しさん
19/07/26 13:08:13.51 BFOSMSUh0.net
>>784
やはりバイナリですよね
プログラム=バイナリという理解で合ってますよね

786:デフォルトの名無しさん
19/07/26 13:18:25.37 y8y8TCfK0.net
はい
あなたの考えは一切の曇り無く隅々まで正しいです
なのであなたの理解が最も正しいです
それについてわたくしどもは一切口出しすべきことはございません
あなたこそが正しいです

787:デフォルトの名無しさん
19/07/26 13:27:35.81 BFOSMSUh0.net
>>786
しかし辞書にはプログラムは問題解決の手順を特定の言語書いたものとあったので、
そう考えるとプログラムはバイナリを内包するという捉え方の方が正しいですよね
あと>>784さんはプログラムを動詞として使ってますが、それも使い方としては一般的なんですよね
プログラミングは10年以上やっているんですが、いまさらになってプログラムの意味を調べていて……
プログラムの意味をなんとなく理解してたのがわかって、こんな質問してしまってるんですが

788:デフォルトの名無しさん
19/07/26 13:36:27.21 IwSB/YRzx.net
>>787
どうやら貴方はプログラムより先に国語を勉強したほうが良いようだ。

789:デフォルトの名無しさん
19/07/26 13:37:37.41 y8y8TCfK0.net
ンなことカンケーなしに「俺はこう思ってる」「正解をくれ」を最初の>>783に書けばいいじゃん
なんでお前のお気持ちを察しなきゃいけないワケ
後出しジャンケンのコミュニケーション不全の物体だからマンセー要員しか求めてない
「どちらを思い浮かべますか?」と聞いてるんだから、
オレが思い浮かべるだけなら正解も不正解もない、
なのにいきなり「合ってる」とか言いだすとと値踏みされてるから不快だ
なんでお前なんかに正誤判定されなきゃいけないの
正解を求めている旨を最初>>783に書いてないからコミュニケーション不全だ
一見自由そうに見えるアンケートを取っておいて、それが合格か不合格かテメー独自のお気持ちで決めて人間を値踏みする、
その思考経路がアレすぎ

790:デフォルトの名無しさん
19/07/26 13:43:27.73 BFOSMSUh0.net
アンケート取ったのはどっちが一般的なのか知りたかったからですよ
そんなにカッカしないでください
一般的かどうかに私の主観は関係ないでしょ?

791:デフォルトの名無しさん
19/07/26 13:44:53.75 Tl4mZNhI0.net
一連の処理(命令)を書いたものがプログラムだろ
それを書く作業がプログラミングだろ
何が疑問なのかよくわからん

792:デフォルトの名無しさん
19/07/26 13:48:17.76 jd9kxs4Ca.net
>>783
テレビ番組表

793:デフォルトの名無しさん
19/07/26 13:59:21.82 BFOSMSUh0.net
>>791
そうなんですが、プログラムって言葉がけっこう色んな意味で使われていて、調べていると混乱するんですよね……

794:デフォルトの名無しさん
19/07/26 13:59:36.19 klJ/NeRW0.net
>>789
同感
辞書って言われて正直少しムッとした
ちなみに俺はその手の辞書サイトの間違いを指摘して訂正させたことがある

795:デフォルトの名無しさん
19/07/26 14:09:18.87 Tl4mZNhI0.net
>>793
ITの分野で>>791以外の意味で使われることある?

796:デフォルトの名無しさん
19/07/26 14:20:35.08 BFOSMSUh0.net
>>794
別にここの人達の知識を疑ってるわけじゃないです
あと試すようなこともしてるつもりはないです
>>795
たとえばバイナリを指してプログラムと言うじゃないですか
あとアプリのこともプログラムと言いますし
プログラミングのことをプログラムするとも言うし
バイナリもアプリも「一連の処理(命令)を書いたもの」とすることはできますが、
なんか混乱するんです

797:デフォルトの名無しさん
19/07/26 14:22:29.61 BFOSMSUh0.net
あとプログラムとコードの違いもよくわかりません
コードだって命令を書いたものじゃないですか
それだとプログラム=コードということになりませんか?

798:デフォルトの名無しさん
19/07/26 14:34:16.48 6botN/6Ha.net
>>796
voidに秘密がありそうですよ

799:デフォルトの名無しさん
19/07/26 14:39:22.98 BFOSMSUh0.net
>>798
「プログラミング=プログラムを作ること」なら、日本語の命令を書くことはプログラミングなのかという疑問が生まれませんか?
人間に与える日本語の命令を書いた場合、それはプログラミングと言えるのでしょうか?

800:デフォルトの名無しさん
19/07/26 14:41:27.15 Tl4mZNhI0.net
バイナリもアプリもソースコードもプログラムを内包するってことだろ

801:デフォルトの名無しさん
19/07/26 14:45:23.07 Tl4mZNhI0.net
IT分野の話じゃないならスレチもいいとこだな
そんなの辞書引けば分かるだろ

802:デフォルトの名無しさん
19/07/26 14:49:00.72 klJ/NeRW0.net
>>796
再びムッとしたぞ
人にものを尋ねておいて何だその態度は
失言ではなく性格のようだな

803:デフォルトの名無しさん
19/07/26 14:51:29.48 6botN/6Ha.net
verilogはなんとプログラミング言語ではない

804:デフォルトの名無しさん
19/07/26 14:59:57.10 jqp1LWPO0.net
>>778
単純なマルチバイブレータ連結のカウンタ回路考えたら
段数が多くなるほど速度が遅くなるのは当たり前だもんね!

805:デフォルトの名無しさん
19/07/26 15:15:37.98 qJvv7Eyl0.net
CPUの立場では、メモリ上に展開されている機械語のバイナリ列がプログラム
OSの立場では、実行ファイルがプログラム
C言語で記述する人にとっては、ソースファイル(郡)がプログラム
どのレイヤーの話かで意味が変わってくる可能性

806:デフォルトの名無しさん
19/07/26 15:15:43.78 ueBQXQ8Kd.net
ムッとしたってちょっと可愛い

807:デフォルトの名無しさん
19/07/26 15:18:34.64 jqp1LWPO0.net
機械にとっては機械語だけで充分なのに
人間の理解にとって高級言語は必要最低限
認識のちがいとか感受性 によって見方はかわるんかな?w

808:デフォルトの名無しさん
19/07/26 15:25:46.61 blDrgyi50.net
用語なんて初めて使われた時の意味、定義化された時の意味、実際に使われてる場面での意味、
全部違ってることなんてザラでしょ。

809:デフォルトの名無しさん
19/07/26 15:56:34.19 klJ/NeRW0.net
>>806
わざとやってるんだよ
別にケンカがしたいわけじゃないから

810:デフォルトの名無しさん
19/07/26 15:56:40.90 jqp1LWPO0.net
>>782
スイッチング特性ってどうなんだろ?
トランジスタのftに依存するんやない?
最近のトランジスタは1815なんかにくらべると桁がだいぶ違うw

811:デフォルトの名無しさん
19/07/26 17:11:28.14 /z54YWNEa.net
>>799
言える。これだもの。
プログラム(program)
[名](スル)
1 ある物事の進行状態についての計画や予定。予定表。「新人教育のプログラム」
2 演劇・映画・音楽会・テレビなどの演目・曲目・番組。また、出演者の紹介、解説などを印刷した小冊子や番組表。「雨天によりプログラムが一部変更された」
3 コンピューターへ指示する、計算や仕事の手順を特定の言語や形式で書いたもの。また、それを作ること。

812:デフォルトの名無しさん
19/07/26 17:16:39.70 /z54YWNEa.net
更に、日本語のコンピュータ用のプログラムというのもある。
昔々のピュータのBASICだとか、C言語でも関数名や変数名その他に漢字使えるのあったし、Javaとかでも識別子に漢字使えるし。

813:デフォルトの名無しさん
19/07/26 17:19:19.65 /z54YWNEa.net
あ、ピュータじゃなくてぴゅう太だな。
URLリンク(ja.m.wikipedia.org)

814:デフォルトの名無しさん
19/07/26 17:44:43.58 6botN/6Ha.net
utf8が普及して、今の方がむしろ普通に日本語使えるようになったと思うよ

815:デフォルトの名無しさん
19/07/26 18:04:58.65 /WSqmbNMM.net
だな、今時メジャーな環境で識別子に漢字とか使えない方が珍しい

816:デフォルトの名無しさん
19/07/26 18:20:14.54 4cv+0ZCY0.net
絵文字が普及して外人の作るプログラムがマルチバイト文字に完全に対応してきた
それまでは結構ダメダメだった

817:デフォルトの名無しさん
19/07/26 20:18:37.20 PsTZ+gqN0.net
識別子に漢字使えるのにスペースは全角だとコンパイルエラーなのがちょっと納得いかない

818:デフォルトの名無しさん
19/07/26 20:49:01.65 jqp1LWPO0.net
0xE38080がUTFのスペース
0x20 がアスキーコード
いまやってみたら全然ちがうやんかw  

819:デフォルトの名無しさん
19/07/26 20:51:55.69 XFvYTg6ka.net
>>797
言葉の意味は文脈で異なる。
ある言葉と別の言葉の関係は一致か不一致かだけでなく、包含したり一部のみ重複したりもする。

820:
19/07/26 21:21:44.32 PuJwVoXL0.net
>>779
>2入力ゲートだけでCLA作れるし
そんなことをしたら「素子数ばかり馬鹿みたいに食らって速度はリップルキャリーと同一の遅さ」で、なんのためのキャリールックアヘッドなのかわからない、という悲惨な結果になりませんか?

821:
19/07/26 21:22:53.46 PuJwVoXL0.net
>>781
ありえないですね、キャリールックアヘッドは多入力で速度を稼ぐやりかたですよ、2入力に制限したらリップルキャリーと全然かわらないじゃないですか?

822:デフォルトの名無しさん
19/07/26 21:24:29.66 jqp1LWPO0.net
キャッシュの容量とかパイプラインのちょうどいい区切りとか
まで考えてプログラミングなんてはっきり言ってやってませんw
手抜きでしょうか?

823:デフォルトの名無しさん
19/07/26 21:50:39.91 OWnIAxmG0.net
演算器の設計 - 加算器(Adder)
URLリンク(news.mynavi.jp)
演算器の設計 - キャリールックアヘッドアダー(1)
URLリンク(news.mynavi.jp)
演算器の設計 - キャリールックアヘッドアダー(2)
URLリンク(news.mynavi.jp)
パラレルプリフィックスアダー
URLリンク(news.mynavi.jp)
パラレルプリフィックスアダー(2)
URLリンク(news.mynavi.jp)
パラレルプリフィックスアダー(3)
URLリンク(news.mynavi.jp)
Lingアダー
URLリンク(news.mynavi.jp)
アダーの実装に関して
URLリンク(news.mynavi.jp)

824:デフォルトの名無しさん
19/07/26 22:01:03.66 rLMbRFKca.net
>>821
いや、文字通り先読みが本質だと思いますよ
ゲートはいくつあってもいい

825:
19/07/26 22:10:45.70 PuJwVoXL0.net
>>824
>文字通り先読みが本質だと思いますよ
薄っぺらい理解ですね
3 bit, 4 bit なりの アッダーを決めて、その MSB の和を作るのに必要な入力をじっと眺めて本質をつかんでください
単なる先読みではありませんよ
>ゲートはいくつあってもいい
速くなるならね
でも 2 入力論理演算だけで作ったキャリールックアヘッドは速くならない…

826:デフォルトの名無しさん
19/07/26 22:18:01.82 rLMbRFKca.net
>>825
そら、速い方がいいし回路もシンプルな方がいいですよ。
しかし、桁上がりを待ってるのと同じではないでしょうて。たとえ2入力ゲートを使ったとしても。

827:
19/07/26 22:19:49.76 PuJwVoXL0.net
>>826
ご発言の意味が掴みきれません

828:デフォルトの名無しさん
19/07/26 22:29:27.26 rLMbRFKca.net
>>827
そりゃもう、読んでないですからね

829:デフォルトの名無しさん
19/07/26 22:40:58.04 jqp1LWPO0.net
ディスクリートトランジスタでマルチバイブレータを組んでそれで
カウンタ組んだの思い出したw
動くと感動するよね!w

830:デフォルトの名無しさん
19/07/26 22:54:34.12 uEgiR7UH0.net
現在はキャリー選択アダーに集約された

831:デフォルトの名無しさん
19/07/26 22:58:11.64 rLMbRFKca.net
分岐予測みたいなの?

832:デフォルトの名無しさん
19/07/26 23:13:04.56 jqp1LWPO0.net
基本はマルチバイブレータでつくった順序回路w
なんだもんなぁw

833:デフォルトの名無しさん
19/07/26 23:28:36.00 PBeJ5BeU0.net
この言語は扱うものが多くて頭がオーバーフローします
たとえば正規表現は
int regcomp(regex_t *preg, const char *regex, int cflags)
int regexec(const regex_t *preg, const char *string, size_t nmatch, regmatch_t pmatch[], int eflags);
void regfree(regex_t *preg)
これを見る度に数がおおくて何書いているのか分からなくなる

834:デフォルトの名無しさん
19/07/26 23:35:15.29 jqp1LWPO0.net
コンパイラつくってるんか?

835:デフォルトの名無しさん
19/07/26 23:41:52.05 PBeJ5BeU0.net
いいえ
コマンドライン引数の場合訳に正規表現がつかえると嬉しいのです

836:デフォルトの名無しさん
19/07/26 23:48:25.73 jqp1LWPO0.net
>>835
たとえばどんな引数?

837:デフォルトの名無しさん
19/07/26 23:48:58.54 Tl4mZNhI0.net
JSのmatchみたいなラッパー書けばいいじゃん

838:デフォルトの名無しさん
19/07/27 00:05:22.95 1cAkezH+0.net
>>836
1~62の整数かt,today,n,nowかr,randomか無し
でした
perl ではこう書いてました
URLリンク(pastebin.com)

839:デフォルトの名無しさん
19/07/27 09:19:50.11 zJ973H0i0.net
>>821
お前まさか、16入力のANDを2入力ゲートで作れと言われたら、
縦に15個並べて順に接続するんじゃないだろうな。

840:デフォルトの名無しさん
19/07/27 09:22:21.76 S4xnN4vA0.net


841:
19/07/27 09:52:34.76 BeYdmmLD0.net
>>839
普通にトーナメント方式に15個ならべますよ

842:デフォルトの名無しさん
19/07/27 10:00:34.00 zJ973H0i0.net
>>841
じゃ、RCAは遅延がO(n)で、CLAはN入力ゲートがあるならO(1)、2入力ゲートに制限してもO(log n)って気づくだろ。

843:デフォルトの名無しさん
19/07/27 10:08:46.04 S4xnN4vA0.net
qzは話通じてなさそうだな

844:
19/07/27 10:24:42.39 BeYdmmLD0.net
>>842
そうか log n くらいには改善されるわけですね…てへぺろ

845:デフォルトの名無しさん
19/07/27 12:29:43.04 x/Y2IYID0.net
相変わらずの屑っぷり

846:デフォルトの名無しさん
19/07/27 22:29:55.84 7WTVPtxd0.net
ゲート容量分の時間誤差は絶対生まれるかんな(´・ω・`)

847:デフォルトの名無しさん
19/07/27 23:01:09.08 zJ973H0i0.net
意味のわからん時間誤差とかいう用語、未定義で使うな

848:デフォルトの名無しさん
19/07/27 23:32:10.40 AqzO7oC20.net
>>833
俺にはわかる。
慣れの問題では?
まあでも慣れるかどうかは個人差あるしこの言語で慣れねばならないなんてことはないので気にせず他の自分がわかりやすいと感じた言語使えばいい。

849:デフォルトの名無しさん
19/07/27 23:44:22.86 7WTVPtxd0.net
>>848
それって正規表現をどう変換する関数なの?

850:デフォルトの名無しさん
19/07/27 23:54:17.87 p4Dr/Hvv0.net
regexpをcompileするって概念はスクリプト言語ですら大抵存在するのに
NFAやらDFAやらだったり専用VMのバイトコードに落としたりと色々だろ

851:デフォルトの名無しさん
19/07/28 00:01:11.58 JTvgZUGV0.net
>>849
最初のはパターンのコンパイル。次のは文字列とコンパイル済みパターンとのパターンマッチングをさせる関数。
詳細はマニュアルページ見るなりググるなりして調べてくれ。

852:デフォルトの名無しさん
19/07/28 00:05:40.59 JTvgZUGV0.net
まあしかし>>838に書いてあるような内容なら正規表現使わないで単純な比較をするだけの方が速いしプログラムもわかりやすくなるような気がするなあ。

853:デフォルトの名無しさん
19/07/28 00:58:43.04 bTD+Zgyn0.net
>>851
行ごとに文字列を細分化して それで当てはめていくって感じかな?
正規表現関係はけっこう頭抱えるもんね!

854:デフォルトの名無しさん
19/07/28 01:00:17.13 bTD+Zgyn0.net
C言語のソースメモをオートインデントして整理しようとプログラムくんだけど
こういった関数つかって分岐かけていったほうが完璧なんかな?
でも時間すごい掛かりそうw

855:蟻人間
19/07/28 07:30:52.18 S9RT+Rd/d.net
>>854
そのプログラムを書く手間を自動化してみては?

856:デフォルトの名無しさん
19/07/28 07:43:00.67 OCkB7AjV0.net
unixのindentコマンドか
本末転倒を体現する変なやつ

857:デフォルトの名無しさん
19/07/28 16:13:19.81 kBOAQwNYa.net
>>818
てか、Unicodeのスペースって沢山あるよ。
Wikipediaで「スペース」で検索して見てみな。

858:デフォルトの名無しさん
19/07/28 16:21:28.48 QNzNEkbM0.net
たくさんあるとなると「空白」の検索めんどくない?

859:デフォルトの名無しさん
19/07/28 17:31:05.61 bTD+Zgyn0.net
>>856
何もオプションを付けないindentコマンドを実行すると
予想外のソースコードが出てくる可能性が高い とか書いてるひといるね!
インデントフォーマットって好みが人それぞれ違うから自分専用のもっててもええのかも?w

860:デフォルトの名無しさん
19/07/28 19:58:58.85 H3r8YGb9a.net
>>858
そう。面倒だよ。
ま、しかし、wchar_t型使えるならiswspace()とか色々判定する関数が使える。
URLリンク(www.c-tipsref.com)

861:デフォルトの名無しさん
19/07/29 21:48:56.61 CSar0obtd.net
URLリンク(i.imgur.com)

862:デフォルトの名無しさん
19/07/30 19:03:35.73 6XKWfMZ+a.net
>>861
グロ


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch