C言語なら俺に聞け 147at TECH
C言語なら俺に聞け 147 - 暇つぶし2ch521:デフォルトの名無しさん
18/08/27 08:24:49.48 4HBkx10J.net
自称、俺最強君()は、昔からしばしば見かけるけど。
小学生にも苦笑されそうなレスばかりで、相手をする気にならないんだよね。
URLリンク(hissi.org)
URLリンク(hissi.org)
勝手に勝利宣言して逃亡するまで放置しておくのが吉。

522:デフォルトの名無しさん
18/08/27 08:45:35.65 4ArgrBnx.net
半角さんはこの板の唯一の良心
この板は腐ってる

523:デフォルトの名無しさん
18/08/27 11:56:02.39 woJf6ZC9.net
>>413
if (条件) {
 …
 …
 ここで(ブロックから)抜けたい -(1)
 … -(2)
} else { … }
こういうこと? (1) はさらに if で条件付で分岐しないと意味がないけど…
※ (1)で分岐しないかぎり (2) 以降が無意味のコードになる
if の外側を do { } while(0) で外を囲って break; したら?

524:デフォルトの名無しさん
18/08/27 12:18:18.46 yF4/ft+h.net
>>515
これだな

525:デフォルトの名無しさん
18/08/27 12:18:56.82 yF4/ft+h.net
おまえらはすぐにどうでもいいことに流される

526:デフォルトの名無しさん
18/08/27 12:34:41.00 ywsjsNTA.net
>>516
それだったら2を実行するための何らかの条件がある筈なのでそのためのifブロックの中に2を入れればよい。
そつではなく無条件に2を実行したくないならばソースから削除するかコメントにでもすればよい。

527:デフォルトの名無しさん
18/08/27 12:36:44.69 ywsjsNTA.net
すまん。スマホでフリック入力しててタイプミスした。

528:デフォルトの名無しさん
18/08/27 12:42:48.65 woJf6ZC9.net
>>519 意図は伝わったぜー
確かにw
if (条件1) {
 …
 if (条件2) { … -(1) } else { … -(2) }

529:デフォルトの名無しさん
18/08/27 12:48:15.12 nj2QXsVo.net
>>519
そりゃ方法なんていくらでもあるよ
そういう方法をとりたくないってことだろ
理由はしらんが
たとえば(-2)が大きくてインデントを変えたくないとか

530:デフォルトの名無しさん
18/08/27 12:50:40.87 vY3QDx2y.net
だから何でdo while(0)なんて変態コードに固執するんだよ

531:デフォルトの名無しさん
18/08/27 12:51:47.69 YYT/vI56.net
>>522
>>521の方法を思い付かなかった、or 妥当な書き方であると知らない、だけだは?

532:デフォルトの名無しさん
18/08/27 12:54:54.13 woJf6ZC9.net
元質問者に聞くしかない 「goto は使いたくない」の条件で

533:デフォルトの名無しさん
18/08/27 12:59:44.74 ywsjsNTA.net
ブロックというものを中に入ったら出られないものと勘違いしているとか。
最初にforやwhileを覚えちゃって勘違いに繋がったとか。

534:デフォルトの名無しさん
18/08/27 13:22:18.19 vY3QDx2y.net
何人たりともforより先に関数のブロックを憶えるのにね
関数のブロックだけが何か特別なものと思い込んでるケースが多い

535:デフォルトの名無しさん
18/08/27 13:25:30.84 Q5lEKL35.net
goto 便利だけどなぁ。
break するがためのフラグ作って何ブロックも break するとか goto を避けるがためのいびつな if を連続させるとかよりよほど可読性が高い。
もちろん意味を的確に表したフラグやifの構造にできるに越したことはないけどさ。

536:デフォルトの名無しさん
18/08/27 13:28:07.17 aXwyVMA/.net
>>523
あえて固執して解決方法を編み出しておくと
ひょんなときに役立つことがあるしな
準備なんてのは9割無駄で当たり前だよね

537:デフォルトの名無しさん
18/08/27 13:31:18.13 vY3QDx2y.net
ジャクソン法やワーニエ法みたいに
データ構造とプログラム構造を一致させる構造化プログラミング()では
データが損傷していた場合にはプログラム構造を一致させることができない
よって構造化定理を諦めたアプローチをせざるを得ない
こういうのがgotoやlongjmpの出番

538:デフォルトの名無しさん
18/08/27 13:32:12.14 vY3QDx2y.net
>>529
その説明じゃ変態行為に固執する理由が説明できてないだろ
ええ加減にせんか、この変態!

539:デフォルトの名無しさん
18/08/27 13:35:23.06 ywsjsNTA.net
ま、Cの場合は適切にgoto使った方が良いだろうな。後から作られた言語では break でラベル指定できるだの例外処理できるだのしてるから使わなくて済むようになってるわけで、それのないCはそれの代わりにgoto利用しちゃった方が分かりやすく書ける。

540:デフォルトの名無しさん
18/08/27 13:41:42.47 vY3QDx2y.net
いやCのgotoは制限がキツすぎて
いざという時には役立たず
だからlongjmpがある

541:デフォルトの名無しさん
18/08/27 14:22:47.97 Q5lEKL35.net
そんな制限キツかったっけ?
longjump の方がキツいでしょ

542:デフォルトの名無しさん
18/08/27 14:23:38.81 vY3QDx2y.net
何がキツいって関数から出らんない

543:デフォルトの名無しさん
18/08/27 14:34:05.72 J1p6Vf0T.net
setjump/longjumpは簡易タスクディスパッチャーをC言語だけで実現するためだけにあるのかと思ってたよ。
それ以外の用途はあんまり思い浮かばないなぁ。

544:デフォルトの名無しさん
18/08/27 14:40:44.92 TsaU1TVW.net
自分で対処不能なエラーが起きたときに、初期化してやり直す時に使ったな
だもんで通常の処理の流れで使うものだとは思わなかった

545:デフォルトの名無しさん
18/08/27 16:09:02.07 vY3QDx2y.net
ディスパッチャとしてはダメダメじゃん
jmp_buf jb;
void sig(int n)
{
longjmp(jb, 1);
}
int main(void)
{
signal(SIGINT, sig);
if (setjmp(jb) == 0) for (;;) ;
else puts("ok");
return 0;
}
俺んとこではokが出ない
おまいらんとこではどんな結果になる?

546:デフォルトの名無しさん
18/08/27 16:16:45.47 J1p6Vf0T.net
確かsignalとlongjmpは相性悪かったような?
よく覚えてないけど。

547:デフォルトの名無しさん
18/08/27 16:27:43.33 VuJs8kRo.net
>>538
こちらは Linux (CentOS7)だが、出たよ。

548:デフォルトの名無しさん
18/08/27 16:29:13.02 VuJs8kRo.net
>>539
sigsetjmp(), siglongjmp() ってのがあるので、そっち使った方が良さそうではあるな。

549:デフォルトの名無しさん
18/08/27 16:33:51.80 J1p6Vf0T.net
Linuxとかならpthreadがあるのでわざわざ自分でディスパッチャ作ることはないと思うけど、組み込み用に簡易的に作ることはあるかもね。
俺は組み込みならprotothreadsのほうがシンプルで好き。

550:デフォルトの名無しさん
18/08/27 17:20:53.65 cJbIVPPr.net
#include <signal.h>
void (*signal(int signum, void (*sighandler)(int signum)))(int signum);
この宣言が読めない

551:デフォルトの名無しさん
18/08/27 17:30:35.88 vY3QDx2y.net
signal 関数名
signum 第1仮引数名
sighandler 第2仮引数名
sighandler ポインタ
*sighandler 関数
signum 第1仮引数名
signalの返却値はsighandlerと同じ型

552:デフォルトの名無しさん
18/08/27 18:31:36.73 C1HpzEi0.net
>>524
思い浮かばないってのがなかなか考えられない
ていうか、
for/while/do while 以外もbreakで抜けられたら良いと思ったことが私もある

>>525
なぜgotoは使いたく無い?
という質問の答えも聞いておかないと
コーディング規約なのか宗教なのか
gotoの使い方を知らないだけなのか

553:デフォルトの名無しさん
18/08/27 18:49:30.60 C1HpzEi0.net
>>536
OSのタスク切り替え処理
ブートローダーからアプリケーションへのジャンプ
リセット
例外処理

554:デフォルトの名無しさん
18/08/27 19:22:28.99 FN2jn8ES.net
>>546
全て別の方法で実現しちゃうので、俺的にはlongjmpの必要性を感じないかな?

555:デフォルトの名無しさん
18/08/27 19:30:11.24 m5aHtIH2.net
>>530
高度すぎてなに言ってるかわからん

556:デフォルトの名無しさん
18/08/27 19:46:09.70 nZJhjhuf.net
まあデータの損傷をいきなりデータ構造そのものの破綻に結びつけるのは些か強引な論理展開ではあるな

557:デフォルトの名無しさん
18/08/27 19:55:16.65 C1HpzEi0.net
>>547
関数ポインタ
アセンブラ
スタック書き換え
このどれか?

558:デフォルトの名無しさん
18/08/27 20:08:36.09 FN2jn8ES.net
>>550
こんな感じ。
OSのタスク切り替え処理
→普通にOSの機能を使う、カーネルなしで簡易ディスパッチャ実装はpthread
ブートローダーからアプリケーションへのジャンプ
→アドレス固定ならアドレスを関数ポインタにキャストしてジャンプ、またはインラインアセンブラ
リセット
→周辺機能やbssやdataセクションも初期化したいのでWDT等のCPUリセット機能を使う
例外処理
→密結合を避けるためオーソドックスに返り値で判定、最後にgoto使うかも?
そういや例外処理longjmpで思い出したけど、一昔以上前のCマガジンにマクロでC++と同じようなtry~catch構文実装方法の記事があったけど、確かにそのマクロ内ではsetjmp/longjmp使ってたわ。
マクロでカプセル化してれば例外処理で使うかも。

559:デフォルトの名無しさん
18/08/27 20:17:29.99 C1HpzEi0.net
カーネルなしでpthreadの意味がわからん

560:デフォルトの名無しさん
18/08/27 20:21:53.00 FN2jn8ES.net
>>552
あ、まちがえた。
pthreadじゃなくてprotothreadsね。

561:デフォルトの名無しさん
18/08/28 15:16:05.31 wM2MhSxp.net
URLリンク(techtipshoge.blogspot.com)
このサイトで、書いてることは正しいと思うしし、実際こうなるんだけど、俺の頭悪いせいでわからない。
駄目な例のsetStr(a)の a は、 &a[0] という”アドレス”を渡してる訳ではないんでしょうか?
なんで駄目な例だと上手くいかないのかという理屈がわからない・・・

562:デフォルトの名無しさん
18/08/28 15:16:57.00 wM2MhSxp.net
あ、レスして気づいたけどcoutがあるってことはc++なのかな?
まあこれはprintfってことにしといてくださいw 重複質問になりそうなのでこちらで処理したい。

563:さまよえる蟻人間
18/08/28 15:27:14.25 cEEOiaf2.net
newもC++のキーワードなんだけど。。
関数に実引数のポインタを渡すとその値が、対応する仮引数に代入(コピー)され、以後、仮引数は変数のように使える。
仮引数の値を変えてもコピーが書き換えられるだけで元の実引数の値には影響しない。
書き換えられるようにするには、書き換えたい場所のアドレスを渡して、*演算子か、[]演算子を使わないといけない。

564:デフォルトの名無しさん
18/08/28 15:27:46.08 10z9ufr/.net
駄目な例のa = new char [8];はmainのaの複製への代入なのでmainのaはNULLのまま
良い例の*a = new char [8];はmainのaそのものへの代入なので期待した結果が得られる

565:さまよえる蟻人間
18/08/28 15:37:02.95 cEEOiaf2.net
関数呼び出しのとき、実引数がどこにコピーされるかというと、「スタック」という積み上げ式のメモリーブロックか、一時的なCPUレジスタが使われる。
インラインではない関数呼び出しにおいては、関数の戻り先のアドレスと、仮引数のデータがスタックに積み上げられる。
積み上げ式だから、自分自身の関数を呼び出しても動作する。これを「再帰呼び出し」という。

566:さまよえる蟻人間
18/08/28 15:39:32.69 cEEOiaf2.net
スタックの積み上げには限度がある。限度を超えると、スタックサイズが拡張されたり、異常終了する。
スタックの積み上げが限度を超えて異常な状態になることを「スタックオーバーフロー」という。

567:デフォルトの名無しさん
18/08/28 15:52:37.71 wM2MhSxp.net
すません。私の質問が曖昧だったので追加で
void setStr(int *a) {
a[0] = 10;
}
int main() {
int a[10];

setStr(&a[0]);
     cout << a[0] << endl;
return 0;
}
例えば、この場合は、setStr(&a[0])として、その後、関数内でa[0]=10;と値を代入すればちゃんと 10 が出力されます。
前のHPの失敗例も同じくsetStr(a)としてアドレスを渡し、受け取りはポインタ変数なのに値は変わらない。
単に数値か文字列かの違いなんでしょうか?


568:デフォルトの名無しさん
18/08/28 16:00:50.42 Gzofmim2.net
とりあえず一度、配列とポインタに対する余計な先入観を捨てて素直に元サイトを読み込めば理解できると思うよ
一つの考え方に囚われ過ぎてると思う

569:デフォルトの名無しさん
18/08/28 16:05:47.55 10z9ufr/.net
void setStr(char **a) これを
void setStr(int *a) こう読み替え
char *a = NULL; setStr(&a); これを
int a = 0; setStr(&a); こう読み替えてみそ
つまり char* → int と読み替えるんだ
ポインタ変数とアドレスは違うという話は
整数変数と整数は違うという話と同じだ

570:デフォルトの名無しさん
18/08/28 16:17:43.85 LgBUyhOe.net
まあスタック使えとは規格に書いてないんだけどね

571:デフォルトの名無しさん
18/08/28 16:35:30.28 wM2MhSxp.net
ああ分かった!
俺は自分で勝手に「char型のポインタ=文字列だ」と思い込んでて、そのせいで混乱してただけでした。
思い込み怖い・・・
void setStr(char *a) {
a[0]='a';
}
int main() {
char a[] = "


572:test"; setStr(a); cout << a << endl; return 0; } これで「aest」と表示されたからピンときた。確かに失敗例はポインタ変数を渡しているだけだw ありがとうございました。



573:デフォルトの名無しさん
18/08/28 18:19:39.20 4ROMapnq.net
>>563
そりゃそうだよ、世の中にはスタックを持たないマシンもあるからな

574:デフォルトの名無しさん
18/08/28 18:33:43.92 oY+WdDFv.net
ハードウェアスタックを持たなくて再帰呼び出し出来ないうんこ環境があるね

575:デフォルトの名無しさん
18/08/28 18:38:07.52 h1lwFjom.net
そういうのは自分で値を積み上げるように作るしかないな

576:デフォルトの名無しさん
18/08/28 18:45:10.17 Gzofmim2.net
そういえばずいぶん昔に昔ながらのBASIC言語でクイックソートを実装したときに当然サブルーチンの再起呼び出しなど使えないので
自分で似たようなことをやったなあ
というか確か何かのプログラム認定試験の定番の出題テーマだった気がする
当時必死に勉強してたことを思い出した

577:デフォルトの名無しさん
18/08/28 18:45:55.20 Gzofmim2.net
再起ってなんだ再帰の誤変換

578:デフォルトの名無しさん
18/08/28 18:47:51.41 h1lwFjom.net
再帰 不能

579:デフォルトの名無しさん
18/08/28 19:51:12.99 zI7irPVs.net
ぴゅう太なんてレジスタがなかった

580:デフォルトの名無しさん
18/08/28 19:56:09.59 c8HqOUoV.net
>>571
そんなアホな…
うわ、ホントだ。汎用レジスタは全て外部RAMにマッピングされてたのね。

581:デフォルトの名無しさん
18/08/28 20:04:33.36 10z9ufr/.net
制御記憶を主記憶とシェアするアーキテクチャはそんなに珍しくない

582:デフォルトの名無しさん
18/08/28 20:09:30.18 c8HqOUoV.net
普通にR0とかのレジスタ名ついてるんだけど実体は内蔵RAMにマッピングされてるアーキテクチャならよく見るけど、外部RAMってのは初めて見たわ。
今もこういうアーキテクチャのCPUあるのかな?

583:デフォルトの名無しさん
18/08/28 20:15:00.09 Gymzh0gE.net
ない

584:デフォルトの名無しさん
18/08/28 20:25:08.96 10z9ufr/.net
ぴゅうたって内蔵RAMなんだっけ

585:デフォルトの名無しさん
18/08/28 20:28:21.23 c8HqOUoV.net
>>576
wikipediaによると
ROM 内蔵20Kバイト RAM CPU内蔵256バイト/TMS9918用16Kバイト
だそうだ。

586:デフォルトの名無しさん
18/08/28 20:53:39.14 UQgP5OTn.net
>>573
制御記憶ってマイクロコードを入れるところなんだが…
主記憶と共用してる奴なんてあったか?

587:デフォルトの名無しさん
18/08/28 20:58:39.83 10z9ufr/.net
>>578
必ずしもマイクロ【コード】を入れるところじゃないんだけどね
たとえばメインフレームではDIAGNOSE命令で制御記憶を目的外使用なんてのをやってたよ
それやってるときはTestインジケーターが点灯することになってて

588:デフォルトの名無しさん
18/08/28 21:38:04.13 UQgP5OTn.net
>>579
> たとえばメインフレームではDIAGNOSE命令で制御記憶を目的外使用なんてのをやってたよ
そんな特殊な例出されてもなぁ w
そりゃ記憶装置だから他の物を入れることはできるよ
だから何? って話だけどな
> それやってるときはTestインジケーターが点灯することになってて
で、主記憶と共用ってどこのアーキテクチャなんだ?

589:デフォルトの名無しさん
18/08/28 21:54:20.28 d5vKjLdu.net
>>580
やめたれ w

590:デフォルトの名無しさん
18/08/28 22:02:06.14 lp3F9A9k.net
それってセキュリティ上問題にならないのか?

591:デフォルトの名無しさん
18/08/28 22:15:00.65 d5vKjLdu.net
いまはやりのcore iのバグみたいな?

592:デフォルトの名無しさん
18/08/29 23:07:37.73 E6lvAa/y.net
メルトダウン事件移行もアップデートの度にどんどんコンパイルとか画像縮小なんかの処理が遅くなってる気がする
もう怖くて淫照は買えない

593:デフォルトの名無しさん
18/08/30 05:50:33.67 zs5ycFHj.net
ベンチマークしてる?

594:デフォルトの名無しさん
18/08/30 08:20:17.62 cD6Bz7+B.net
>>582
そりゃなるよ
命令の動作を書き換えるんだから何でもできちゃう
なのでDiag関連の命令はCE(カスタマーエンジニア)モードでしか使えないとかなってたはず
今時のCPUでもエラッタ対策としてマイクロコードの書換えするけどコード自体は暗号化されてる
この暗号化キーが漏れたらえらいことになると思う

595:デフォルトの名無しさん
18/08/30 10:16:53.98 zs5ycFHj.net
X'83は単に特権命令ってだけだぜ

596:デフォルトの名無しさん
18/08/30 12:25:33.09 cD6Bz7+B.net
マシンによって違うのか?
M-180HはCEモードでないと動作しなかったが

597:デフォルトの名無しさん
18/08/30 12:43:00.44 zs5ycFHj.net
そういうことだね
俺んとこではPWOFFするオウンコードとかできたし

598:デフォルトの名無しさん
18/08/30 20:09:52.14 cD6Bz7+B.net
それマイクロ関係ないだろ

599:デフォルトの名無しさん
18/08/31 06:31:31.30 QWemr4wG.net
すみません思い切り初心者の質問です。
printf("%s: abc", str);
↑こういう文が abcのみが変わる形で(str変数は変更されません)
沢山登場するプログラムを作っており コピペが面倒だしバグの温床になりそうなので
#defineマクロなどを使って引数にabcを指定すると上記の文がまるごと出力されるようにしたいと思いました。
そこで
#define PR_POS(_pos) printf("%s: _pos", str)
という定義を作ったのですが恐らく引用符の中身は変更されることはないので
#include <stdio.h>
#include <stdlib.h>
#define PR_POS(_pos) printf("%s: _pos\n", str)
int main(void) {
char str[256] = "text";
//printf("%s: abc\n", str);
PR_POS(abc);
exit(EXIT_SUCCESS);
}
というプログラムを作っても実際コンパイルしたものを実行すると
text: _pos
という望んでいない出力が返ってくるだけです
これを
text: abc
という出力にするにはどうすればいいでしょうか……。

600:デフォルトの名無しさん
18/08/31 06:43:34.91 jQ6ZKbRR.net
>>591
#define PR_POS(_pos) printf("%s: " #_pos "\n", str)
でいけるはず
詳しくは
プリプロセッサ 文字列化演算子
とかでぐぐれ

601:デフォルトの名無しさん
18/08/31 06:44:40.48 Df6BGOL7.net
#define PR_POS(_pos) printf("%s: " #_pos, str)

602:デフォルトの名無しさん
18/08/31 06:45:58.45 Df6BGOL7.net
かぶった
しかもまちがった
>>593は無視して

603:591
18/08/31 07:04:03.05 QWemr4wG.net
>>592
うわあああ! ありがとうございます。
正直 検索しても検索しても一向にそれらしき答えが見付からなかったんで
もう方法がないのかなとか思ってました……。
文字列化演算子なるものがあるのですね。用語まで教えていただいてほんとうに感謝しています。
しかもC99でも定められてるっぽい?
(gcc -std=c99 -Wall -Werror -pedanticで警告がなかった)
嬉しいです。これで随分すっきりしたソースコードになりそうです!
>>593さまもありがとうございます。

604:デフォルトの名無しさん
18/08/31 07:18:20.44 4o8e5lPA.net
#include <stdio.h>
#define DEBUG(fmt, ...) \
fprintf(stdout, "%s:%d #%s " fmt "\n", \
__FILE__, __LINE__, __func__, ##__VA_ARGS__);
初心者ならこのマクロを覚えておくと良いぞ。誰もが一度は使うはず。

605:デフォルトの名無しさん
18/08/31 07:26:18.95 jQ6ZKbRR.net
>>595
> しかもC99でも定められてるっぽい?
X 3010:2003 (ISO/IEC 9899:1999)
6.10.3.2 #演算子
制約
関数形式マクロの置換要素並びの中にある各#前処理字句の次の前処理字句は,仮引数でなければならない。
意味�


606:K則 置換要素並びの中で,仮引数の直前に#前処理字句がある場合,対応する実引数の前処理字句列のつづりを含んだ一つの単純文字列リテラル前処理字句によって,#前処理字句と仮引数を置き換える。(後略) http://kikakurui.com/x3/X3010-2003-01.html



607:デフォルトの名無しさん
18/08/31 07:48:00.90 QWemr4wG.net
>>596
すいません。初心者なのにめちゃめちゃ上から目線みたいになってしまうんですが
assert()を使わないのはなぜですかね。
POSIX C99でも定義されているので ほとんどどのコンパイラでも処理できると思うんです。

608:デフォルトの名無しさん
18/08/31 08:16:53.54 4o8e5lPA.net
>>598
マクロの紹介だけだから。
デバッグ方法としてならassertを多用したほうが良いぞ。

609:デフォルトの名無しさん
18/08/31 08:23:18.46 LcHwdHfr.net
フィールドのエラーログ用に>>596みたいなコードをリリースバイナリにも埋めることがあるけど
その場合はassertじゃ役に立たないんだよな。

610:デフォルトの名無しさん
18/08/31 08:31:20.23 uM5wy4o0.net
斜め読みだけど、abcが変わってstrが変更されないならabcの方を文字列変数にしてprintfすれば良いんじゃね?

611:デフォルトの名無しさん
18/08/31 08:33:49.15 CKe+Ima+.net
>>596
可変長引数マクロはgccだけって記憶があったけどC99規格で使えるんだね。
「可変部の実引数が0個の場合に……」のgcc拡張とゴッチャになってた模様。
>>598
警告を表示しても動作を止めたくない場合には重宝するよ。
デバッグ中に「ここまでは処理が通過した」と確認する時とか。

612:デフォルトの名無しさん
18/08/31 08:40:41.19 QWemr4wG.net
>>602
なるほど。
assert()関数だと引数の結果が0の場合問答無用で停止してしまいますもんね。

613:デフォルトの名無しさん
18/08/31 09:08:12.10 9zTxkh/J.net
本番のコードと差が出て邪魔なのでassertはあまり使いませんね。
どうせデバッガ使うというのもあるし。

614:デフォルトの名無しさん
18/08/31 09:17:03.63 QWemr4wG.net
>>604
本業の方の意見はほんとありがたいです。
コンパイルエラーと違ってassert(3)は実行時にエラーを吐くので同じ「実行するときに診断する」プログラムでassert(3)より高機能なデバッガ(GDBとか)を使うということですか?
---
>>591の処理ですが以下のように書き直したところ望み通りに動きました。
みなさまありがとうございます。感謝します。
#include <stdio.h>
#include <stdlib.h>
#define PR_POS(_pos) printf("%s:" #_pos "\n", str)
int main(void) {
char str[256] = "text";
//printf("%s: abc\n", str);
PR_POS(abc);
exit(EXIT_SUCCESS);
}

615:デフォルトの名無しさん
18/08/31 10:04:04.85 Qsv+Vg4k.net
assertの使い道って「ここでは必ずhogeになる!」という意志をコードに残すという意味はあるかな。
言ってるとおりで動かすときはgdb使うし、開発中は単体テストで同等以上の確認するしで、実用性は今はあまり無いと思いますね。

616:デフォルトの名無しさん
18/08/31 11:00:23.86 mNRFahys.net
assertはどっちかつーと単体テストでよく使う

617:デフォルトの名無しさん
18/08/31 12:32:32.62 QMdn6GpG.net
本番コードでもassert使うかな
ハードエラーみたいなのはカバーしきれない

618:デフォルトの名無しさん
18/08/31 12:51:53.38 jQ6ZKbRR.net
>>606
> assertの使い道って「ここでは必ずhogeになる!」という意志をコードに残すという意味はあるかな。
assertion の意味は主張だからむしろそれが正しいとも言えるな
> 実用性は今はあまり無いと思いますね。
最初作るときはそうでも改修時に全然触ってない所のassert()に引っかかることもあるから俺は基本入れてる

619:デフォルトの名無しさん
18/09/02 07:11:07.60 667Fbrpy.net
int a = 42;
a = a++;
↑これがコンパイルエラーになる理由って
「左辺aに対する代入と右辺aに対するインクリメントのどちらの演算を優先して処理するか不定である為」
で合ってますか? 不定じゃなくて未定義かも……。

620:デフォルトの名無しさん
18/09/02 07:29:52.76 fa3EYjvI.net
エラーになるか? 警告ではなく

621:デフォルトの名無しさん
18/09/02 09:00:51.15 667Fbrpy.net
>>611
-Werrorとかにしてました

622:611
18/09/02 09:07:14.14 667Fbrpy.net
>>611
あれ。すいません。よく分からなくなりました。
$ gcc -pedantic -std=c99 -Wall -Werror -O2
でコンパイルするとエラーになり停止しますが
$ icc -std=c99 -Wall -Werror -O2
でコンパイルするとあっさり通りますね……。

623:デフォルトの名無しさん
18/09/02 09:27:27.59 pzXMyV5h.net
>>610
未定義っす (>>1 C FAQ の 3 章を参照してください)
蛇足ながらシーケンスポイントの間でオブジェクトを変更できるのは高々1回だけとか、そんな感じのルール
>>613
gcc の -Werror オプションは警告をエラー扱いにするっす

624:デフォルトの名無しさん
18/09/02 09:59:41.19 GR8jnF/5.net
未定義だからコンパイラは何をしてもいい

625:デフォルトの名無しさん
18/09/02 10:00:57.15 667Fbrpy.net
>>614
ありがとうございます。
ちなみにicc (Intel(R) C/C++ Compiler)で-Wallおよび-Werrorオプションを設定したときは
警告もなにも出力されることなくコンパイルに成功してしまったんですが
理由とか分かりますかね。すいません。変な質問で……。

626:デフォルトの名無しさん
18/09/02 10:19:45.38 667Fbrpy.net
>>614
あと,おっしゃる通り(すくなくともC99では)未定義でした。ありがとうございます。
> 直前の副作用完了点から次の副作用完了点までの間に,
> 式の評価によって一つのオブジェクトに格納された値を変更する回数は,高々1回でなければならない。
> さらに,変更後の値の読取りは,格納される値を決定するためだけに行われなければならない。
(JIS X 3010:2003 p.48; 参考 URLリンク(dotup.org)

627:デフォルトの名無しさん
18/09/02 11:28:11.60 owKXNyzr.net
>>610
そういう文法的になことには今は拘らない方がいい。(これは他言語学習者の方が酷いが)
上達の妨げにしかならない。
プログラミング言語は、「正しく書いたときに正しく動作する」ようにしか設計されていない。
特にCはそうだ。
意味不明なことを書いたらだいたい全て「未定義」であり、
意味不明なことを書く奴が悪い、ということになっている。
そしてそれが「未定義」と覚えることも、実質的な意味はない。
そんなコードはすぐに修正され、存在しないからだ。
実際、 a = a++; なんてコードは、どのOSSにもないはずだ。
この意味で、Cは全くの素人の入門者用ではない。
例えばC#はそこら辺厳しい言語で、そういった意味不明な書き方は全てコンパイルエラーにされるはず。
(さすがにその例では知らんが、例えば「未初期化の変数を使用」とかがエラーになる)
というか、マジでそのレベルならC#やった方がいい。
文法エラーなんてサジェストが出てOK押したら自動的に修正してくれる。
お前がどんな環境でやってるのかは知らんが。
ただ、こういった無駄な遠回りをしなくて済むだけでも、君にとってC#は有効だと思うよ。
つか、初心者は全ての文法を押さえないといけないと勘違いするようだが、それは間違いだ。
自分が使うだけの文法を押さえ、さっさと使うべきだ。
お前だって日本語の全ての漢字が読めるわけでもないのに日本語を使ってるだろ。
プログラミング言語も同様で、手段でしかないのだから、文法を一通り確認したら、
さっさとゲーム等何でもいいから作れ。
ネタがないのならそれはそもそも今プログラミングを学ぶ必要がないとも言えるし、
それでもやりたいのならラズパイでも買ってきてLEDチカチカでも目指せ。
文法を学ぶことが目的になってはいけない。それは完全に空回りだ。

628:デフォルトの名無しさん
18/09/02 11:39:01.45 mdI4MGys.net
やりたいことはシンプルに書けよってことだな。
最終的に a にどうなってほしいのか、それってもっと端的に書けないの?ってこと。
Cオタクになるのが目的じゃなければな。

629:デフォルトの名無しさん
18/09/02 12:11:10.31 owKXNyzr.net
(ちなみに補足)>>610
初心者には理解不能だと思うが、
「文法で許されていることが全て許される」環境なんて実質的に存在しない。
だから文法のコーナーケースについてはそもそも覚える必要がない。
(とはいえ、肝心のK&Rがフリーダムすぎて…ってのはあるが)
これは小説→ラノベの流れと同じで、
美辞麗句の技巧に走る必要はなく、簡単な文を書き連ねて面白い筋を書け、ということ。
プログラミングにおいてはこれが徹底していて、
同じ物なら、簡単な方が『常に』いい、ということになっている。
ただ、どこからが複雑なのか?というのは議論になる。
例えば自然言語で韓国が漢字を廃止した際、
「停留所」を「ばすが とまる ところ」と書き換え、老人が「舐めとんのか!」と切れた。
実際、全員が読める漢字を「もっと簡単に」という理由で平仮名に書き換えられても困るだろ。
丁度これと同じ(だが方向は逆)で、
新しいプログラミング言語は比較的すんなり書ける文法が用意されており、
それを使うべきかどうかでは揉めたりしている。
ただ、Cは古いのでまどろっこしい文法しかなく、ベタな書き方しか出来ない。
だから比較的この論争に巻き込まれることはないはず。
(それ以前に文法セット自体が小さくて、え?これだけ?のはずだが)
>>619
天然と養殖では学びのベクトルが逆なんだよな。
天然: 1を足したい → a++ と書くのか
養殖: a++と書くと → 1が足されるのか
結果、要因側をenumすると文法一覧になるのが養殖で、これが間違いの元だ。
そしてそれを馬鹿正直に一つずつ潰すから文法エリートになっていく。
そうではなく、要因側のenum結果はやりたいこと一覧になって、全部揃えばゲームが作れる!が正しい。

630:デフォルトの名無しさん
18/09/02 12:24:17.27 667Fbrpy.net
>>620
ちょっと反論があります。正直Cどころかプログラミング初学者なのですが……。
要するに私は〝養殖〟であり,そのような学び方では成長しないと仰りたいわけですよね。
まあ確かに自分でも「規格厨」というか,衒学的な性格をなのは自覚してます
しかしプログラミング言語というのは自然言語とは違う面が多々あると思います。
そして「文法を網羅すべきか」という点においては特に違うと思います。
プログラミング言語は少なくとも概念においては文法に正確に従えば定められた動作を確実に行ないます。
日本語の文法を遵守して話しても考えが伝わらないのとは全く異るところです。
だから私はプログラミング言語においては先に(かなり厳密に)文法を学ぶべきであり,
「文法を学ぶ」ことのなかには未定義動作に関する諸々の知識を習得することも含まれていると考えます。
偉そうにすいませんでした。まあ上手くいかなければまた考えを改めるつもりではいます。

631:デフォルトの名無しさん
18/09/02 12:32:31.40 mdI4MGys.net
やりたいことを素直に書いたつもりで未定義な文法になってしまうなら、もっと論理を考えた方がいいかも。
やりたいことを行う手順を整理できてないってことだと思うよ。
a = a++; ということが結局どういう動作するのかを知ることより、何をしたくてそういう(矛盾をはらむ)書き方になったのかを自己分析した方がいい。
もちろん基本的な文法は勉強しておく前提はあるよ。
おれは養殖とか天然とかは分からんけど。

632:デフォルトの名無しさん
18/09/02 13:02:03.12 gypPfsRT.net
Cは文法的にはコードのデザインをほとんど規定しないからね。
そういう意味では頑張って覚えるほどでもない。まあ量も少ないので覚えてもいい。
でも古いコードとの互換性にこだわる様なおっさんにはならんでくれやという感じ。

633:デフォルトの名無しさん
18/09/02 13:06:08.54 nnaQ2akS.net
>>621
あなたの言うことにも一理ある。
でもこの板にいる人は1つの言語しか使えない人って少数派で、たいていは3、4つまたはそれ以上の言語を操るマルチリンガルな人が多いと思う。
んで、その人たちはどうやって新しい言語を使えるようになるかって言うと、1つの言語をマスターすると(Prologとか特殊な言語は除いて)他の言語も方言みたいなもので、書き方の問題だけなことが多いのね。
その際には特定言語の重箱の隅をつつくような知識が必要なわけではなく、むしろ最大公約数的な知識、もっと言うと言語に依存しない設計力のほうが大事になってくる。
なので、特定言語のあまり細かいルールにこだわり過ぎないほうが良い、という経験論での意見は間違ってはないと思うよ。

634:デフォルトの名無しさん
18/09/02 13:21:05.23 mdI4MGys.net
そうそう、しいて文法を覚えるなら適切に const を指定するクセを付けてほしいな(const に限った話ではないんだが)。
文字列を引数で受ける箇所全部が char* になってるコードを見るとクラクラするw

635:デフォルトの名無しさん
18/09/02 13:50:09.03 owKXNyzr.net
>>621
反論自体は自由にやればいいんだよ。それが匿名掲示板のメリットなのだから。
ただ、書かれている内容については吟味しないといけない。
その中には君にも峻別出来る内容もあるはずだから。
(というか、こっちが君にも分かる範囲で《客観的な範囲で》話せばいいのだが)
事実から言うと、C言語は『当初から』バリバリの実用言語であり、今も現役だ。
これは同世代の他言語とは全然違う。
だから、普通に書いてれば「未定義」なんてのに命中するはずがないんだよ。
そんな言語、使い物にならないだろ?
次に、歴史も長いのだから、何をどうやったら嵌るかのノウハウも溜まっている。
それの集大成がコーディングルールであり、例えば goto 禁止論だ。
これについても是非はあるが、これまでの経験をタダで享受する気なら、乗った方が得だ。
そしてそれに従っておけば大体全て「未定義」は回避出来る。
具体的に言えば、警告レベルを一番か二番目に厳しい状態で使って、警告についてはほぼ全部直し、
google等「コードを実際に書いている連中」のルールに従って書けば、そもそも未定義なんて踏まない。
それらはそのように整備されているから。
業務で「コーディングルール無し、警告も全部無視してよし」なんてのはあり得ないし、
仮に個人レベルでそうでもバグが取れなくて無駄に苦労するだけ。
だから結果的に「未定義」なんて気にする必要ないんだよ。
一般的な環境で普通に書いてれば命中しないし、知る必要もない。
一通りも書けない初心者なら特にそう。他にやることはいくらでもある。
君は休日にプログラミングをやろうとしているのだから、本来は「天然」なんだよ。
それを自分で「養殖」型のカリキュラムにして、無駄に上達しにくくなってる。
そこが勿体ない。
君が何の為にCを学ぶのかは知らないが、もっと直接的にその結果を目指すべきだ。
とりあえず学ぼう、では全く上達しないんだよ。
それは日本人の英語でもそうだろ。使わないと上達しないんだよ。

636:デフォルトの名無しさん
18/09/02 13:50:53.63 667Fbrpy.net
>>624
確かにそうですね。先に述べた通りプログラム全般に暗いのですが
JavaやPythonなども大まかな構造(サブルーチンとか演算体系とか)は
似ているかなと感じました(見当違いなこと言ってるかも)。
もっと抽象的な立場になったほうがいいですかね。
>>625
アドバイスありがとうございます。
ggってみたところconstはその重要性の割に実務で使われていない傾向にあるみたいですね。
しかし役割を考えると,特に保守の面で,積極的に使うべきだなと確信しました。
「ここは固定された値代入を想定している」という意図を明確にできるってことですよね?

637:デフォルトの名無しさん
18/09/02 14:03:37.00 667Fbrpy.net
>>626
そうですね。
動くプログラムを作っていたらa=a++;なんていう文は登場することはないですね。
お察しの通りプログラマーでもなんでもない独学状態なので,
そういう人間が犯しがちなミスを防ぎたい一心で規格や文法などを厳密に勉強すべきと思っておりました。
C#についてですが,こういう事を素人が言うのはまさに傲慢ですけど,
どうせ勉強するなら万人が使ってる/種々のソフトウェアを作っている標準言語を勉強したいな
と思ったのがきっかけなので,正直C#はあまり乗り気になれません。

638:デフォルトの名無しさん
18/09/02 15:19:58.46 mdI4MGys.net
>>627
const の役割はその通り、その値を書き換えないことを意思表示するためのもの。
strcpy の引数なんかを見ても分かると思うけど、このように使い分けするだけで関数の入出力もよくわかる。
ケアレスミスで入出力を逆に書いてもコンパイラが指摘してくれる確率が上がるし、コンパイラにとっても最適化のヒントになってる。
でも実際、const皆無のコードも珍しくない。
そんな所に自分だけ const 付けると、余所の関数を呼ぶために意味不明なキャストをするハメになってストレスMAXになる。
ただ厳密に考え出すと、値受けの引数 int x なんかは const int x であるべきでは?なんて思うけど、個人的にはそこまで強要はしなくてもいいかな… なんて思う。
でもポインタ受けの引数 char* p なんかは const char* p にすることを強要したい。
前者について緩いのは、その const はその関数の中の実装を縛るものであり、そんなことは関数の外の世界の人にとってあまり重要ではないから、というのが理由。

639:デフォルトの名無しさん
18/09/02 15:26:12.33 FVhWhkTR.net
>>628
C#にマイクロソフト性を強く見出しているのか知らんがJDKがゴタついていて.NET Coreが出てマルチプラットフォームで優位性があり、Unityでゲームも作れる
コンピュータを勉強したいならCでいいけどプログラミングを勉強したいならCと比較してもC#は十分万人が使っている標準言語としての地を持つよ

640:デフォルトの名無しさん
18/09/02 15:44:37.64 Q8aSECkx.net
組み込みなどの特殊な分野を除けばC言語の方こそ万人向けとは言い難いな
C言語はそれほど広範な分野で利用されるような言語ではないよ

641:デフォルトの名無しさん
18/09/02 16:20:10.20 d8qknsqq.net
C言語が使えない環境は少ないけど、かと言ってC言語を積極的に使う必要のある環境も少ない、かな?
でも全ての基本として、低レベルなCを理解しておくのは有意だと思う。

642:デフォルトの名無しさん
18/09/02 16:34:34.65 mdI4MGys.net
C の前にアセンブラやってみるのも悪くないと思うよ。
今はお手軽なワンチップマイコンも多いし。
欲を言えば昔の 8bitパソコンくらいがメモリもそこそこあってちょうどいいし、16bit くらいになるとスタックフレームも使いやすくていいんだけど、今そういうので丁度いいのはあまり無いのが残念なところだけど。

643:デフォルトの名無しさん
18/09/02 16:48:06.49 owKXNyzr.net
>>628
君が思っているほど言語間の差異はないよ。
とはいえ、本気でコンピューターについて学ぶのならCは外せない。
最初からやる必要があるとは思わないが、それも含めて自由にすればいい。
最初はスクリプト言語(Ruby/Python/JavaScript)の方が上達は速いとは思うが。
>>627
> ggってみたところconstはその重要性の割に実務で使われていない傾向にあるみたいですね。
constもある意味宗教だからね。
使われてない理由は、単に、苦労に見合う結果を得られないからだよ。
Cに関してはconstを積極的に付ける理由もないからね。
C++は参照を導入したからconstを付けないと変更されるかどうかが分かりにくくなった。
Cだとポインタなら変更される(可能性がある)、そうでないなら変更されないと文法的に確定している。
だからgoogleは参照はconst以外禁止、というルールでC相当にしている。
C#では明示的にoutと書いて分かりやすくしている。
constを付けたことによるメリットは、constに対して代入したときにコンパイルエラーになることだが、
そもそもこれがないんだよ。constなんて間違う場所に使うものではない。
(ただし俺はCでストリング操作を積極的にやったことはないので、char*に関しては分からん。
>>629が引っかかっているのもそこだろうし。
とはいえ、世の中はstringはimmutableということでほぼ確定してしまったし、
今更mutableなstringの作法について学ぶ必要もないはずだが)

644:デフォルトの名無しさん
18/09/02 17:06:32.38 4Jf6YH6e.net
>>633
まず、エミュレータを作ります。

645:
18/09/02 17:48:53.86 oSO4LvdH.net
>>626
>君が何の為にCを学ぶのかは知らないが、もっと直接的にその結果を目指すべきだ。
>とりあえず学ぼう、では全く上達しないんだよ。
うーん、これは非常にいい指摘ですね
私は、これに気が付くのにずいぶんと遅くなってしまいました

646:デフォルトの名無しさん
18/09/02 18:34:07.99 5WqNet32.net
素人は技術もないのに、登山で直線的に、絶壁を登ろうとするから失敗する。
勉強のプロは、斜めに進んでいくから、登れる
素人がすぐに思いつくような、直線的な方法をやってもダメ。
全員が失敗してる。
C の授業を受けた、ほとんどの大学生が、こんな授業は無駄・役に立たないと言ってるw
彼らはなぜ、そう言うのか、理由を考えたらよい
C のようなポインタのある言語を、1年勉強しても、
ポインタを追っかけるだけで時間がつぶれるから、何も作れない
その時間で、Ruby/Python/JavaScript の3つの動的言語をやれば、ツールを作れる
まず素人は、動的言語・静的言語・ポインタのある言語の、
位置付けや難易度をわかっていない

647:デフォルトの名無しさん
18/09/02 18:36:32.73 xLyKs+8r.net
ポインタってそんなに難しいか?

648:
18/09/02 18:46:30.43 oSO4LvdH.net
>>638
難しいと思います
C++ に移ってからも、T ** を T *& に書き直すとかする段階で、自分のポインタ概念の認識が浅かったことを実感させられたりしたものです

649:デフォルトの名無しさん
18/09/02 19:00:28.56 zPdaUXCQ.net
Cのポインタはシンプルだからわかりやすいと思います
ビット演算のほうが難しいと思います
m = (m & 052525) + ((m & 0125252) >> 1);
m = (m & 031463) + ((m & 0146314) >> 2);
m = (m & 007417) + ((m & 0170360) >> 4);
m = (m & 000377) + ((m & 0177400) >> 8);

650:デフォルトの名無しさん
18/09/02 19:30:02.62 nnaQ2akS.net
>>640
8進数表記って滅多に使わないから、たまに良かれと思って桁合わせでゼロパディングすると意図せず8進数になって悩むよな。

651:デフォルトの名無しさん
18/09/02 19:43:35.59 4Jf6YH6e.net
>>641
あ、それ、30年ぐらい前にハマった。
幸い8や9を使っている所でコンパイルエラーになったからよかったが(それでも当初はなんでエラーになるのかと悩んだがw)、もし使ってなかったらROMに焼いてからターゲットマシンで変な動きになって悩み続けた事だろう。

652:デフォルトの名無しさん
18/09/02 22:38:57.74 u9h+2eE3.net
Cが全盛だった時代


653:、否が応でもプログラミングの勉強はCから始めた。 昔の人は理解できて今の人には難しいと考えるのは傲慢ではなかろうか。 ところでアンサイクロペディアのC言語の項が18禁になってるのは全部椋田のせいだな。



654:デフォルトの名無しさん
18/09/02 23:21:32.95 owKXNyzr.net
>>643
> 昔の人は理解できて今の人には難しいと考えるのは傲慢ではなかろうか。
いや事実だ。理由は単純で、つまりは裾野が広がっているだけなのだが、以下。
1. C言語の難易度自体は昔と同じだが、C言語の問題点を修正したより簡単な言語が開発された。
2. 昔プログラミングをしてたのは理系の大学生/大卒だけだった。
 今は文系も含め、しかも中高生から始めようとしている。
 数学で培われる論理/抽象思考能力はプログラミングに不可欠なのだが、
 これらがまだ整っていない状態の中高生や文系にプログラミングを教えるってのがそもそもの間違い。
どのみち今の状況で計算機科学専攻ならCは必修だろうし、そういう連中には問題ない。
ただ、そうじゃない連中がCをやる必要はないってこと。
Pythonだけで済む世界ならそれもありだ。

655:デフォルトの名無しさん
18/09/03 00:24:24.13 gEsVL0BV.net
昔も中高生の頃からプログラミングは始めていたけどな
いわゆるベーマガ世代の年齢層がBASIC やアセンブラからC言語に流入してたので平均的レベルは比較的高かったように思う

656:デフォルトの名無しさん
18/09/03 00:32:54.22 4uYLlRfz.net
処理目的の抽象度が上がっているという現実もあるからなぁ

657:デフォルトの名無しさん
18/09/03 00:35:18.97 wBpew+1c.net
プログラミングの学習は、最初電卓でやってた
ニーモニックが16進表示みたいなやつだったな
それで、ループや分岐、サブルーチンを覚えた
その後は、Z80のアセンブラに移ったっけ
高級言語やりたかったけど、
8ビットのプアなPCしか持ってなかったし
漢字モア使えないPCで漢字ROM買って取付け
漢字非対応のドットインパクトプリンタに
機械語プログラム使って漢字出力してた

658:デフォルトの名無しさん
18/09/03 01:05:18.32 co6OAOoM.net
>>645
ベーマガやってた連中はごく一部なのだから一般化するのは無理がある。
そしてそれに対応する連中は、今はもっと増えている。
家にPCがあるのが当たり前の時代だし、IDEも無料、
インターネットでOSSのソース見放題、質問も出来る。
昔の大学生も、大学で初めてプログラミングした連中はCで撃沈してた。
今は昔と比べてIDE等の環境が断然良くなっているが、
大学生の割合が増えた分、大学生の平均的頭は悪くなっている。
(昔は上位1/4が大学生だったが、今は上位1/2で、東京に至っては2/3じゃなかったっけ?
昔だと当然高卒だった連中が大学に行ってるのだから、Fランでは授業が成立しないのも当然)
だから今の「平均的大学生」が大学でプログラミングを始めても、当然Cでは撃沈する。
今の「上位半分の大学=国公立+有名どころ」(=昔の上位1/4の頃の大学生相当)の理系で、
昔の大学生と同様にCで撃沈するはず。
それを文系含めて全員プログラミングをやらせようってのだからかなり無理がある。
とはいえ、個人差の方が大きいし、やるのは自由だ。
ただ、もっといい言語(改良された言語)は沢山あるのだから、無理してCに拘る必要はない。
情報/計算機系はどうしても速度勝負になるから、どのみちCは外せないが。

659:デフォルトの名無しさん
18/09/03 01:20:48.33 kJOKS5+S.net
今の平均的な大学生のレベル低下はゆとり教育の弊害だと思うが

660:デフォルトの名無しさん
18/09/03 01:38:17.54 y7r/YW4w.net
URLリンク(ja.m.wikipedia.org)
ゆとり教育(ゆとりきょういく)とは、日本において、1980年度(狭義では2002年度以降)から2010年代初期まで実施されていたゆとりある学校を目指した教育のことである。
1980年度から2010年代初期
1980年度から2010年代初期
1980年度から2010年代初期
1980年度から2010年代初期
1980年度から2010年代初期

661:デフォルトの名無しさん
18/09/03 01:45:48.17 dM1zEtwp.net
アセンブラ(マシン語)からやったほうが
イメージしやすいと思うんだけどな。ポインタ周りとか
現代はPythonやC#が潰しが利くから昔でいうCの位置かな
URLリンク(cpplover.blogspot.com)

662:デフォルトの名無しさん
18/09/03 02:48:03.81 WkDP4f9E.net
みなさんほんとうに色々な助言ありがとうございます。
目的はなにかといいますと,ゲームを作りたいのではなく,むしろ計算機の仕組みなどを学びたいと思っています。
やっぱり始めはPythonのほうがいいんですかね……。
(ちなみにガッツりゆとり世代です。中学あたりで土曜日通学が復活したかな?)

663:デフォルトの名無しさん
18/09/03 05:37:12.02 WkDP4f9E.net
調べただけですがRustもよさげですね。私が学びたいと思っている計算機の基礎的な部分に触れられると同時に
C99では非常に複雑で非本質的な努力を要求される,安全なメモリ管理やUnicodeに対応した文字列操作が
簡単に実現できるというのは魅力的です。また,Mozilla社が主導しているというのも好印象です。
難点は,かなり新規の言語なので,Cほど開発手法が洗練されておらず,
またコンパイラの実装が一つしかないことですかね。
しかし開発版ながらRust製のOSもあるようですし,私がCを通じて得たいなと思っていた知見や概念を
Cほど紆余曲折を経ずに取得できそうです。(学問に王道なしとは言いますがね……)
これ以上は(というか既に大分)スレチになってしまうので書き込むのはやめます
青二才に貴重な時間を割いて様々な助言を頂いたこと,ほんとうに感謝しています。

664:デフォルトの名無しさん
18/09/03 07:47:15.40 Sux6qqaT.net
別にCでいいと思うよ。
ただ何使うにしても、画面表示とかができないとモチベーション上がらないかもね。
GUIとまではいかなくてもコンソール上にテキストで簡易グラフィックくらいやらないと、動いてる様を眺める楽しみが半減だ。
エスケープシーケンスとかを一緒に勉強するといいかもな。
とりあえずライフゲームでも作って眺めてみたら。

665:デフォルトの名無しさん
18/09/03 08:01:08.87 gEsVL0BV.net
まあ手っ取り早くプログラミング全般を眺めるならマルチパラダイムの言語を最初に学ぶのも悪くはないと思うよ
手続き型、オブジェクト指向、関数型のマルチパラダイムなら、他にはC#やJavaScriptなどが環境が充実してるので手軽ではあるけどね

666:デフォルトの名無しさん
18/09/03 08:20:45.29 /AUwjj56.net
計算機の仕組み、つまりコンピュータの動作原理を学ぶならアセンブラだろうけど、普通のOSのAPIはCなので、やっぱりC言語を勉強するのはベストプラクティスだろうね。
PythonだったりC#だったりはプログラミングは習得できても動作原理は深く学べない。
果たしてC#等の高級言語しか使えない人の何割が割り込みやCPU動作モードやSFRについて正確に理解してるのやら。

667:デフォルトの名無しさん
18/09/03 08:30:03.31 4uYLlRfz.net
>>653
Rustの方が細かなノウハウでコケずにコンパイラが指摘してくれるというのはあるが今の目的ならCの方が素直でいいと思う
実機の動きを追える上に色々な機能が付いていて嬉しいという言語なので覚える事が滅茶苦茶多いよ

668:デフォルトの名無しさん
18/09/03 09:18:58.58 co6OAOoM.net
>>652
中高生なら学校の勉強しとけ。結果的にそっちの方が近道だから。
プログラミングは抽象思考が出来て自分でサイクルを回せる奴しか上達しない。
具体的に言うと、「○○→△△って事は●●→▲▲ってことだろ。
ならここをこう改造すればこうなるはず…ビンゴだぜ!俺って頭イー」
を『自分だけ』で勝手に繰り返せる奴だ。(β)
学校の教科でこれに最も近いのは物理で、次点で数学だ。
だからこのタイプの奴は物理と数学は『本人は特に努力した覚えが無くとも』無双出来る。
逆に言えば、そうなっていない奴は本質的にプログラミングに向いてない。
その場合は、そもそもプログラミングをやるべきではないと俺は思っているが、
それでもやるのなら、まず物理と数学の『勉強の仕方』を変えて『抽象思考』を身につけるべきだ。
(単に勉強するだけなら『暗記』でも一定まではカバー出来てしまうが、それでは意味がない)
プログラミングを始める前に、プログラミングが上達する基礎能力としての抽象思考を身につけないといけない。
次に、既にこれが出来ていたとすると、
教科自体の内容はプログラミングには直接は関係ないから、中高生でも出来るのは事実だ。
(ここら辺のことをわきまえず、『中高生でも出来る』とだけ見て全員に教えようとしてるから問題がある。
とはいえ、主導している馬鹿共はプログラミングが出来ない連中だから、話が通じないのも当然だが)
仮に君がここまでは到達しているとして、話を進めると、以下になる。
> むしろ計算機の仕組みなどを学びたい
現状、C以外に選択肢はない。
> Rust
止めとけ。今のRustはプログラミング初心者用には出来てない。C以上に確実に撃沈する。
> Python
海外では「関数呼び出し、ループ、条件分岐」等の基礎の基礎を学ぶのなら一番早いと言われている。
現実的にはAWK/Perl/Ruby/JavaScript等いわゆるスクリプト言語全般は全てこれに当てはまるが。
ただ、上記の「プログラミングが上達出来る奴」ならこの部分は数日~数週間で通過してしまう為、
言うほど関係ない。「初心者ならどの言語でも同じ」とよく言われているのはこれ。

669:デフォルトの名無しさん
18/09/03 09:19:38.61 co6OAOoM.net
例えば体育、運動神経のいい奴は何をやってもそこそこ上手いし、一瞬で上達するだろ。
あれと同じで、「プログラミング神経」のいい奴はどの言語でも上手く行くし、すぐ上達するんだよ。
だから言語自体よりは「プログラミング神経」としての『抽象思考』能力の方が重要なんだよ。
そしてそれがない奴が頑張ってみたところで、
ちょっと運動神経のいいやつが遊びでやってるのを見たらスゲー上手くて萎える、みたいなことになる。
だから本当は基礎能力としての抽象思考を鍛えることが重要で、プログラミングの上達はその結果にすぎない。
そこを「プログラミングを『教えれば』上達する」と勘違いしている馬鹿が色々やろうとしてるからおかしなことになってる。
『教えれば』上達するのは暗記科目であって、
上達する状況を整えた上で『勝手にやらせる』と自然と上達するのが非暗記科目だ。
で、言っちゃ悪いが君は多分「抽象思考」型ではなく、「暗記」型だ。enumして全潰しというのがそれ。
君は本質的にプログラミングに向いてないタイプだと思うぞ。
教科の延長でプログラミングを学びたいと思ってるのなら止めとけ。
上記(β)タイプは主に一点突破で、むしろ勝手に突っ込んでいって自爆するのが多い。
最近出てきたのはGateboxだが、いい感じに突き抜けてるだろ。
URLリンク(gatebox.ai)
URLリンク(www.itmedia.co.jp)
こういうことを平気で出来る奴じゃないと上達しない。
君にはその臭いを感じない。

670:デフォルトの名無しさん
18/09/03 09:45:55.75 XmaAZlOW.net
URLリンク(ja.m.wikipedia.org)
ゆとり世代
ゆとり世代(ゆとりせだい)とは、ゆとり教育(ゆとりきょういく)を受けた世代のこと。
定義・範囲
ゆとり世代については明確な定義、範囲はなく諸説ある。
・小中学校において2002年度施行(高等学校は2003年度)の学習指導要領による教育を受けた世代(1987年4月2日 - 2004年4月1日生まれ)。
・小中学校において1980年度以降(高等学校は1982年度以降)の学習指導要領による教育を受けた世代。1966年度生まれ以降。

671:デフォルトの名無しさん
18/09/03 09:58:26.53 udP6IpNT.net
やっぱりプログラミングより数学の勉強の方が全然大事だと思うわ
無駄な時間を過ごしたおっさんの後悔からの発言だけど
若者は線形代数と物理いっぱいやった方がいいよ

672:デフォルトの名無しさん
18/09/03 11:14:17.43 sjKCXLyo.net
BIOSの割り込みサービスで画面に文字表示するやつよんだらどうなりますか?

673:デフォルトの名無しさん
18/09/03 11:36:38.73 CjQwreEv.net
>>653
これでも買っとけ
70年代のTRPGの生の感触がばりばり伝わってくるAD&Dの本
コンパイラ―原理・技法・ツール (Information & Computing) | A.V. エイホ, R. セシィ, J.D. ウルマン, M.S. ラム, Alfred V. Aho, Jeffery D. Ullman, Ravi Sethi, Monica S. Lam, 原田 賢一 |本 | 通販 | Amazon
URLリンク(www.amazon.co.jp)

674:デフォルトの名無しさん
18/09/03 13:23:16.40 G6xL0gpW.net
これは表紙買いしてしまう

675:デフォルトの名無しさん
18/09/03 17:00:11.86 fBv9u5Bm.net
>>618
> そういう文法的になことには今は拘らない方がいい。
臭い物に蓋してんじゃねえ
無理に気になる必要はなくても
気になったのに誤魔化せって最低なアドバイスだ
学問そのものを全否定する暴論だ

676:デフォルトの名無しさん
18/09/03 17:42:03.71 kgEYN356.net
そんなに気になるならコンパイラを読めば良い
コンパイラを読まずにああだこうだと言ってそれを学問と言い張るのは今更ニーチェを読んで学問と言い張っているのと似ている

677:デフォルトの名無しさん
18/09/03 18:03:25.66 bm6csMD2.net
ゲームブックの訳本かしら

678:デフォルトの名無しさん
18/09/03 18:07:52.25 fBv9u5Bm.net
しどろもどろの典型だな

679:デフォルトの名無しさん
18/09/03 18:26:17.33 ttVcJTrG.net
組込み開発者におくるMISRA‐C:2004―C言語利用の高信頼化ガイド、MISRA‐C研究会、2006
この本は、日本の大企業から、C の専門家が数十人集まって作った。
この100ルールまで行かないと、教えられない
汎整数拡張・副作用完了点・短絡評価・bool とか、各概念が難しい。
とても初心者に教えられない
特に学生なんて、現実を知らないから、文法があっていれば正しいと思う、
固定概念があるから成長できない
現実には、MISRA-C、100ルールに従わないと話にならない。
学生にはそういう事はわからないから、アホみたいなコードを書く
コードは、正しい文法で書いても、ダメだから。
可読性・保守性・バグを起こさない、Ruby みたいなコーディングが大切
だから、Rubyでプログラミング学ぶのが大切。
学ぶのは文法規則じゃない!
システムを作る・保守するためのプログラミング!

680:669
18/09/03 18:34:29.69 ttVcJTrG.net
Ruby の女神・女優の池澤あやかも、同じことを言ってる。
慶応大学卒だけど、大学で、C の授業は無意味だって
山陰地方のRuby合宿へ行って、webアプリが作れるようになった
Cの開発時間の大半が、ポインタ・バグでつぶれるから、プログラミングを学べない。
文法がわかるだけで、ものを作れないから楽しくない
だから、Cの授業の評判が悪い。
無意味な授業だよなって
だから初心者は、Rubyから初めて、まず動くものを作る

681:デフォルトの名無しさん
18/09/03 18:58:25.85 LFbByM25.net
最初の質問者は計算機の仕組みを知りたいのであってWebアプリを作りたいわけでもMISRA Cルールを知りたいわけでもない件

682:デフォルトの名無しさん
18/09/03 20:30:15.22 E2St7m4+.net
典型的な超頭悪そうなヤツラが
ひたすら長文連投してる

683:デフォルトの名無しさん
18/09/03 20:31:53.98 zLYH5Np3.net
>>670
またrubyガイジかよ。Cスレにまで出張ってくるななよ

684:デフォルトの名無しさん
18/09/03 20:35:14.84 i7qE7EE1.net
>>672
そのまんまお前の事だ

685:デフォルトの名無しさん
18/09/03 21:07:08.36 e7RcTinN.net
>>674
???

686:デフォルトの名無しさん
18/09/03 21:32:03.32 i7qE7EE1.net
半角バカを知らないのか

687:デフォルトの名無しさん
18/09/03 23:39:43.07 e7RcTinN.net
あいつか

688:デフォルトの名無しさん
18/09/04 00:25:08.00 Ilbb7rlr.net
とりあえずPCCでも読んでみることにします。

689:デフォルトの名無しさん
18/09/04 00:45:19.60 LzYZ2uc7.net
Cのスレに不毛な喧嘩売ってくるのは大体Cで挫折して、
劣等感を何とか慰めようとするカーミング行動だから気にするな

690:デフォルトの名無しさん
18/09/04 00:47:45.68 oF8LgJEj.net
>>669的にはコンピュータのしくみはどうでもいいってこと?

691:デフォルトの名無しさん
18/09/04 06:21:50.26 4a01gUXa.net
>>663 にある本の紹介文なのか宣伝コピーなのか、
「70年代のTRPGの生の感触がばりばり伝わってくるAD&Dの本」て部分を
どう解釈したら良いのか分からないのだ。
Cや「ドラゴン・ブック」、TRPG, AD&D って言葉くらいは知ってる者に
解題してくれないか。
ひどく野暮な質問かも知れないけど、聞くは一時の恥とか言うし、敢えて頼む。

692:デフォルトの名無しさん
18/09/04 08:45:47.28 HIB3dDVe.net
>むしろ計算機の仕組みなどを学びたいと思っています。
それなら情報処理の基礎なんかをやった方が良い様な気がする
今は基本情報処理とか言うんだっけか?
資格とかのやつよ

693:デフォルトの名無しさん
18/09/04 14:29:38.61 Ilbb7rlr.net
向いてないっすか……。正直物理や数学は得意なほうなんですがね……。

694:デフォルトの名無しさん
18/09/04 14:48:39.41 0ItemGYT.net
>>683
高齢者はマウンティングする病にかかりがちなので気にすんなよ

695:デフォルトの名無しさん
18/09/04 15:15:50.63 FJBPHmlL.net
>>653
武内覚さんのLinuxの仕組み片手にCやるのがおすすめ
ファイルIOとかなら、システムコール、VFS、FS、Raid、デバドラ、スケジューラー、SCSiまでユーザーランドからデバイスまで一貫して、かつお手軽に触れる

696:デフォルトの名無しさん
18/09/04 16:39:04.23 gZnu4stV.net
cの文法で書けるだけの
無能を自覚できてない低学歴知恵遅れの高齢底辺ITどかたに多い

697:デフォルトの名無しさん
18/09/04 17:30:33.56 DgdW8Zal.net
お。半角文字の入ってない書き込みを久しぶりに見たような気がする。

698:デフォルトの名無しさん
18/09/04 17:53:50.88 gZnu4stV.net
底辺ITドカタさんたちは
今日みたいな台風の日も自宅待機ではなく
出勤でしたか
大変でしたね

699:デフォルトの名無しさん
18/09/04 18:52:18.48 Yl2cIsi8.net
台風で東海道線や環状線が止まるのはまあ想定内だったが阪急や京阪まで止まるのは想定外だったわ

700:デフォルトの名無しさん
18/09/04 20:17:15.30 tpLBdVu4.net
>>683
数学が得意なら諦めるのはまだ早い

701:デフォルトの名無しさん
18/09/04 20:22:39.67 GSpvNdv5.net
やっぱワンチップマイコンでアセンブラがいいよ。
クリスマスに向けてLEDチカチカさせてジングルベルでも鳴らしてみるとかどうよ。

702:デフォルトの名無しさん
18/09/04 20:27:34.18 bz6n3SY3.net
ジングルベルはJasracフリーだな、心配ない

703:デフォルトの名無しさん
18/09/04 21:12:38.21 nrC4An0b.net
ロジアナがあればベストだが無ければせめてオシロは欲しいな

704:デフォルトの名無しさん
18/09/04 21:54:25.98 Uy+TuYSZ.net
>>683
向いていないね。それは臭いから分かる。お前は本当の「天然」ではない。
以下参考だが、結局中身は同じだ。
> 一撃必殺!急にマンガ家だの声優だの絵師だのになりたいと言い出した子どもや大人を止める、オススメの方法
> URLリンク(togetter.com)
今はプログラミングなんて本当に簡単に始められる。そのレベルでグダグダ質問している時点で向いてない。
本当の「天然」なら、もう既にとりあえず何かしらのコードを書いてる。
お前は勉強しないと何も出来ないと考えている「いい子ちゃん」タイプだ。
そういう奴は自分でサイクルを回せず(=暴走出来ない)、上手くなれない。
無理してプログラマになっても、後輩に簡単に抜かれ、馬鹿にされる、悲惨な人生になるぞ。止めとけ。
(ここ見るだけでも老害を馬鹿にしたがっている奴はいくらでもいるのが分かるだろ)
ベーマガ世代だって理解してやっていたわけではない。やりたくてやってただけだ。
先に数学をやった方が効率が良かったはずだが、そんな事は考えてもいない。
お前は、サッカーをやる前に、筋トレして体幹も作り上げ、万全の状態にしようとしている。
勿論そういうのもありだが、それはやはり「養殖」なんだよ。
「天然」はそうじゃない。サッカーをしながら、もっと上手くなりたいから筋トレして体幹も作っていく。
好きだから続けられるし、環境が多少酷くても我慢出来る。(これがIT産業がブラック化しやすい遠因にもなってる)
そういう「天然」向け仕様の環境で、「養殖」では悲惨なことになる。
(勿論、プログラミングをやってみてから好きになる、というのもありだが、それはかなり少数派だと思う)
向いてる/向いてないで言えば、
ちょっとコードを書けるようになって調子に乗ってここで俺ツエーしている馬鹿共の方が向いてると言える。

705:デフォルトの名無しさん
18/09/04 21:55:26.59 Uy+TuYSZ.net
今はプログラミングの裾野が広がって、絶対的な人数が全く足りてない。
だから文系をSEとして大量投入してみたものの、いい結果がでたとは言いがたい状況だ。
それで次は「小学生からプログラミングを教える」「国民全員がプログラミング出来るように」
みたいなアホなことをやろうとしているのだが、これは完全に愚策だ。
プログラミング出来ない/したこと無い奴らが仕切ってるからおかしなことになってる。
それにお前がつき合う必要はない。
教育改革ってのは取り返しが付かない人体実験になるから、性急にやっては駄目なんだ。
この認識すらなくゆとり教育を導入した文化省の連中は、
今からでも全員死刑に処すべきだと俺は思っている。
(それくらい罪深いし、社会に対して悪影響を及ぼしている。日本はミスリードに甘すぎだ)
今の「小学生からプログラミング」についてはどうやらお遊び程度だからまあいい。
やるにしても当初はこの程度で様子見しながら拡大するか取りやめるか試すべきなのさ。
(俺は意味無いから止めろと思っているが)
今時PCもスマホもない家なんて珍しいだろ。
なら初心者用のプログラミング環境はすぐに整えられるし、勝手に始められる。
だからそのレベルでこんな所に質問してる時点で間違ってる。
天然:何故プログラミングをするのか?そこにPCがあるからだ (単にいじくり回したいだけ)
幼稚園児:ケーキ屋さんになりたい!(だってケーキ大好きだしもっと食べたいから)
お前には幼稚園児が「ケーキ屋さんになりたい!だってお金儲かるし!」
みたいな事を言っている違和感がある。
初心者の癖に計画しすぎだ。必要があって否応なしに始めるわけでも無し、意味不明すぎる。
そういう奴も中にはいるのかもしれないけどさ。
ただ、確実に言えるのは、プログラミング界隈は良くも悪くも全般的にギーク向けに出来上がってる。
お前がギークになりきれないのなら、ずっとアウェイのままだ。
それは幸せなことではないと思うよ。

706:デフォルトの名無しさん
18/09/04 22:38:39.94 l07xjkBV.net
おいら頭悪いから長い文章よめねんだ

707:デフォルトの名無しさん
18/09/04 22:49:40.55 CWUYudxX.net
今北産業

708:デフォルトの名無しさん
18/09/04 23:00:09.15 8Afhx4Yo.net
>>696
周りに迷惑かけない分、頭の悪い長文書く奴より立派だから安心しよう

709:デフォルトの名無しさん
18/09/04 23:14:17.99 gZnu4stV.net
オレみたいに的確に要点をまとめてる長文なら読める
低学歴知恵遅れの長文は読めるシロモノじゃないからな
文章だけで低学歴知恵遅れかどうかは
簡単に判別できる
このスレに連投されてる長文の駄文は
低学歴知恵遅れが記述したと推認することに疑いの余地がない

710:デフォルトの名無しさん
18/09/04 23:17:12.74 Yl2cIsi8.net
必要なら数学の知識などなくても感覚で覚えるからな
座標計算の必要があれば三角関数など知らない小中学生でもsinやcosくらいは使う

711:
18/09/04 23:26:47.20 lJV/Mb/R.net
>>700
小中学生に三角関数は無理でしょう…まず相似の概念を習うのが中学2~3年くらいなのでは?

712:デフォルトの名無しさん
18/09/04 23:31:24.63 dqoEXQdt.net
数学は教科書で勉強しないとあかんよ
経験で得た知識なんてただの思いこみ

713:デフォルトの名無しさん
18/09/04 23:46:19.73 Yl2cIsi8.net
思い込みでも何でも使っているうちに覚える
自分の場合は30年以上前中学生の頃に画像処理のプログラミングしている間に三角関数(といってもX座標はcos、Y座標はsinといった程度)や
論理演算(RGBの合成はOR、反転はXORなど)を覚えた
その後になって高校の頃に教科書でまともに学んだ覚えがある

714:デフォルトの名無しさん
18/09/05 00:03:44.17 ElSUubWJ.net
>>701
三角関数が何なのかは分からなくても、sin と cos を使うだけなら小学生でも定型文的に覚えちゃうんじゃね(おれは中学の頃だったが)。
円を描くところから始まり、直径を変化させると渦巻きにできたり位相や周期を変えて橢円やらリサージュになることに気付いたりで、
パラメータをやみくもに変えて手探りで欲しい結果にたどり着くようになる。
もちろん円的な動きの元ネタは必要で、ベーマガみたいなののコードをパクって出発だな。
小学生の頃はファミリーベーシックだったので三角関数には行き着かず、中学生でMSXになって三角関数に出会ったが、小学生の頃にMSXがあれば手を出してたと思う。

715:デフォルトの名無しさん
18/09/05 00:11:58.72 ElSUubWJ.net
そういや小学生のころはスーパーマリオが出たころで、ファイアバーをどうしても再現したくてファミリーベーシックで頑張ってたわ。
三角関数に行きついてないから、角度の範囲毎の動きを個別に書いたな。
でも長さが伸び縮みしたり軌跡がカクカクで、結局将来の夢に据えてお仕舞いにしたw

716:デフォルトの名無しさん
18/09/05 00:29:02.76 TND9Xsam.net
ニュー速で話題にしていた、CLA Fortran プログラムですが、
C言語への移植が終わりました。
公開方法について、検討しています。
↓ここを使おう蚊と考えています。
URLリンク(ideone.com)
C言語へ書き換えたソースと、入力用データとパラメータの3つですが
入力用データとパラメータについては、サンプルに掲載したものと同一
なので公開は必要ないかも知れません。
ただし実行するには必要になります。どうしましょうか?
テキストファイル形式で単独でアップロードするか、
ソースの一番下にコメントとして載せるかどの方法が良いでしょうか?
あと、オリジナルFortranソースもアップロードした方が良いですか?
これは以前PDFを見つけてくれた方がソースに起こして頂いたものです。

717:デフォルトの名無しさん
18/09/05 00:29:27.46 TND9Xsam.net
間違えました、済みません。

718:デフォルトの名無しさん
18/09/05 00:56:31.50 8BhrS90z.net
>>694
>>695
よくわからんのだが、お前が相手をしてるそいつはなぜプログラミングを初めたいと思ってると思ってる?
よくわからんのだが、ギークとかなんやらの最初とそいつの最初の具体的な差がよく分からん

719:デフォルトの名無しさん
18/09/05 07:35:22.74 p5l66rRv.net
C言語ポインタ完全制覇っていう書籍が気になってるんだけどこれはどの程度の知識がある人を対象にしてるの?

720:デフォルトの名無しさん
18/09/05 08:20:43.64 2JdbfNpR.net
どの程度っても難しいなw
簡単なポインタは分かるけど、二重ポインタとか配列が絡むと混乱しちゃう程度の知識の人向け?
初心者なら悪い本じゃないから買っちゃえ。

721:デフォルトの名無しさん
18/09/05 10:04:35.05 TsbO/g0i.net
>>701
円を書く時に使えると聞いて確かに書けるので使っていて、後で高校生向けのやたらやさしく書いてある図と絵が満載の参考書を見てどういうことか詳細がわかった。俺が中2の時の話。
で、今思うに、これぐらいならちゃんと教えれば小学生でもわかるんじゃないか?俺としては単に教えてないからできないだけのような気がしてならないぞ。
しかし後々高校に入ってから数学の授業で「これ割るこれがsin」などと教師が言ってるのを見て、こんな説明だけでわかるやつはいないだろうとも思った。
ちゃんと教えられる人があまり居ない事もわからないやつを続出させる原因なのかもなと。

722:デフォルトの名無しさん
18/09/05 10:24:41.46 mkiFi/5o.net
あの説明はひどいよな
だから何?がずーっと消えない

723:デフォルトの名無しさん
18/09/05 10:29:11.29 jTYdKpzW.net
sin,cos,tanそのものはアホな小学生でない限り余裕で理解できる。
ただ、それに付随した加法定理やらいろんな公式をセットにして教えたいし、それより先に教えることがたくさんあるので>>711の言っている通り教えてないだけだと思う。

724:デフォルトの名無しさん
18/09/05 10:29:52.26 TP9d0IJd.net
せんせい
「同じ授業を受けていい点数を取る生徒ももいるんだから、悪いのはIQの低い君達」
「分かる奴は塾に行ってる?じゃあ悪いのは君達の努力不足だ」

725:デフォルトの名無しさん
18/09/05 10:36:57.83 2JdbfNpR.net
論破やな・・・w

726:デフォルトの名無しさん
18/09/05 12:34:15.95 TWmx8fnR.net
>>709-710
初心者には、この本もよい
詳説 Cポインタ、2013、オライリー・ジャパン

727:デフォルトの名無しさん
18/09/05 12:40:26.88 BcgqOcGx.net
>>711
普通は円を書くのに三角関数を使わない
普通は

728:デフォルトの名無しさん
18/09/05 12:41:23.62 vNhhiwgZ.net
絵が円形に動くときは?

729:デフォルトの名無しさん
18/09/05 12:43:57.25 BcgqOcGx.net
絵が円形に動くとき
は普通に円を書く時ではない

730:デフォルトの名無しさん
18/09/05 12:45:48.51 vNhhiwgZ.net
え、
>>711ってarcとか使わないで円を書くって言ってるの?

731:デフォルトの名無しさん
18/09/05 12:54:42.87 usOBe9qe.net
アスペっすわ

732:デフォルトの名無しさん
18/09/05 12:59:20.81 TsbO/g0i.net
三角関数の説明に三角形だけの図を描いてこれ割るこれとか言って済まそうってのは手抜きな感じがする。やはり円も描かねば。
ま、しかし、sin. cos 使って円が書けるのがわかったのは良いが、当時のマイコンは貧弱で浮動小数点演算なんかやらせてたら遅くて仕方がなかった。
しかしBASICでグラフィックに円を描かせると妙に速い。正数計算して描いてるからだが、どうするとそんなことができるのかを延々と探り続けてようやっとわかったのが高校生になってからだったかな。
今はもうほとんど覚えてないが二乗して足してってオーバーしたら引いてみたいな計算したと思った。

733:デフォルトの名無しさん
18/09/05 13:00:45.01 TsbO/g0i.net
>>717>>720
まあ40年ぐらい昔の話だからね。

734:デフォルトの名無しさん
18/09/05 13:01:32.32 9Ih296dz.net
>>722
で?

735:デフォルトの名無しさん
18/09/05 13:07:48.81 D3bYtmsn.net
ポインタ限定でそんなに語ることがあるのか

736:デフォルトの名無しさん
18/09/05 13:15:30.75 Lw38WY1e.net
>>722
それってブレゼンハムやミッチェナーのDDAアルゴリズムを利用した直線や円周の高速描画だろ
懐かしいな

737:デフォルトの名無しさん
18/09/05 13:22:45.26 TsbO/g0i.net
>>726
何て言うのかは知らなかった。何かのプログラム解析してわかったんだったかな。その辺は忘れた。
直線も足してってオーバーしたら引くみたいなやり方だよね。今ではハードウェアで組み込まれてるんだろうな。

738:デフォルトの名無しさん
18/09/05 13:24:01.11 ElSUubWJ.net
>>725
ポインタが指す先が const の場合とかポインタそのものが const の場合とかさらに volatile が組合わさったりさらにそういうののポインタだったり配列だったり関数ポインタまで入り


739:込んだりした場合に、 正確に型宣言したり読んだりするには結構修行が必要だからいろいろややこしいことが書いてあるんじゃないか



740:デフォルトの名無しさん
18/09/05 13:27:13.74 TND9Xsam.net
>>722
>当時のマイコンは貧弱で浮動小数点演算なんかやらせてたら遅くて仕方がなかった。
この辺は工夫次第
8bitPCが全盛だった頃、動く3Dオブジェクトを表示するのに機械語で演算処理組んでいた
全部整数化し、SIN関数値は全部テーブルで持たせていたな
試して見れば分かるが実際に必要なテーブル範囲は90度もいらない

741:デフォルトの名無しさん
18/09/05 13:37:21.57 7JsiFjUt.net
敵の弾が自分めがけて飛んでくる
ってたったそれだけでも中学の頃は大変だったな・・・
なつかしい

742:デフォルトの名無しさん
18/09/05 13:47:10.12 ElSUubWJ.net
>>730
大変だった


743: どんな式を立てたかは忘れたが、角度によって弾の速さが変わっちゃったりして試行錯誤してたな



744:デフォルトの名無しさん
18/09/05 13:51:42.60 mkiFi/5o.net
1フレームごとに最短距離で追尾してくる最も厄介なミサイルが実は一番簡単

745:デフォルトの名無しさん
18/09/05 14:58:15.54 jTYdKpzW.net
もうすでにC言語なんか関係なく回顧厨になっとるな。
俺も乗っかろう。
昔はBASIC標準のライン描画やらペイントルーチンが遅いので、いかに高速なアルゴリズムを作るかパソコン雑誌の特集になってたりしたな。
超高速中間色対応ペイントルーチン!みたいな。
ある意味、良い時代だった。

746:デフォルトの名無しさん
18/09/05 16:27:30.41 GAiajT5F.net
中間色とか20年以上聞いてない

747:デフォルトの名無しさん
18/09/05 19:06:16.01 83kKikU4.net
中間管理色

748:デフォルトの名無しさん
18/09/05 20:11:02.62 oFUMlVxX.net
タイルパターン

749:デフォルトの名無しさん
18/09/05 20:19:51.65 dRudxIH1.net
ランダムディザ

750:デフォルトの名無しさん
18/09/05 20:20:14.55 TND9Xsam.net
液晶上にある発光体の色は3種類
マゼマゼする原理は同じ

751:デフォルトの名無しさん
18/09/05 21:50:01.40 PklssQfn.net
>>734
CoolType/CelarTypeがそれに近いけどな

752:デフォルトの名無しさん
18/09/05 21:50:31.53 YeNc+rPy.net
R成分100%にB成分100%をビット演算で重ねる、みたいな話か。

753:デフォルトの名無しさん
18/09/05 22:58:16.11 Lw38WY1e.net
重ねるというよりも隣接するドットを違う色で決まったパターンで表示することで
擬似的に色調表現するテクニック
基本的に8色しか使えなかった頃に多色表現するために開発された手法
複数ドットでひとつの点を表現するためにいかに自然に見せるかといかに高速化するかが
プログラム的に腕の見せ所だった

754:デフォルトの名無しさん
18/09/05 23:26:42.92 ElSUubWJ.net
cleartype はそういうのじゃなく、三原色の並びを利用して擬似的に横方向の解像度を上げる方法でしょ。
1画素内に三原色が RGB と並んでた場合、それを2画素並べると以下のように画素の分解能を超えた位置に白点を表示できる。
RGB___ 白黒 … 座標 0 に白点
_GBR__ シアン赤 … 座標 1/3 に白点
__BRG_ 青黄 … 座標 2/3 に白点
___RGB 黒白 … 座標 1 に白点

755:デフォルトの名無しさん
18/09/05 23:39:34.25 PklssQfn.net
>>742
知ってるぞ。
ClearTypeはsubpixel技術で、中間色はsubcolor技術だ。
まあ2)GrayScaleAAの方が近いといえばそうだが。
> 2) Grayscale anti-aliasing
> URLリンク(en.wikipedia.org)

756:デフォルトの名無しさん
18/09/06 00:30:08.44 RM3Caylz.net
文字表示から離れればという気もするが

757:740
18/09/06 05:55:34.60 UQb09hzL.net
すまん、投稿が受け入れられたタイミングがマズくて
>>739 に対する反応みたいに並んでしもうた。
>>740>>739 の「マゼマゼする原理は同じ」に乗っかったネタ文だ。
R成分100%とB成分100%をマゼマゼして、HTMLの16進表記で#FF00FFの色を作ったら、
「そりゃ“マゼンタ”だよ、バカだねぇお前さんは」という想定(しかし破綻)。

758:740 == 745
18/09/06 06:16:09.23 UQb09hzL.net
もちろん「マゼマゼ」は >>738 だよ、引用アンカーを間違えるとは。
マゼマゼでダメダメ。再び「バカだねぇお前さんは」

759:デフォルトの名無しさん
18/09/06 09:31:52.28 /8o/0CpY.net
>>745
ん?俺は別に煽られたとは捉えてないし問題ないぞ。
そもそも話が通じないのは「抽象思考」が出来てないからだ。
三角関数で → 円も描ける、であって、(演繹)
円を描く為には → 三角関数、ではない。(暗記)
とはいえ適用する場合は大体お約束的だし、
大学入試なんて解けるように作ってあるのだから、「暗記」タイプでも努力すれば数学の点も上げられる。
しかしそれでは駄目なんだよ。意味がない。
そして小学生に三角関数を教えても「暗記」にしかならないから、その時点で教えるのはやはり間違っている。
> これ割るこれがsin (>>711)
これも、結局の所これ以外にどう表現しろと?という話だからね。
これが嫌だったのなら教育関係に就職して改革すべきだが、
実際ゆとり教育を先導した戦犯役人はこのタイプだった(はずな)ので救えない。
理解出来なかった奴が「俺が理解出来なかったから」という理由で主導するからおかしな事になる。
今現在の「プログラミング教育導入」もこれに近く、
そもそもプログラミングできない/やったこと無い奴らが主導してるから暴走してる。
三角関数なんて、円以外で適用される場合の方が多い。
それを過度に円に結びつけるのは数学としては間違っている。
単振動なんて、本来は円運動とは関係ないだろ。あれはma=kxの解がsinxだって話であって。
内積が|a||b|cosθになるのだって、円なんて全く関係ないし。
三角関数は、「偶々そういう関数を定義したら、何か知らんけど色々使える」であって、その見方だと
> これ割るこれがsin
になってしまう。これ以外に表現しようがない。
逆に、「宇宙の全ては円で出来ている」(なぜなら三角関数が適用出来る場合が多いから)
という捉え方も出来なくはないが、こっちの方がカルトだろ。
おそらく、数学の発達過程で他にも色々関数が定義されて、でも使えない物は淘汰されて、
結果的に今の三角関数だけが残ったのだと思うぜ。

760:デフォルトの名無しさん
18/09/06 09:33:21.82 /8o/0CpY.net
中間色/CoolType./AAも、俺にとっては「隣接するピクセルを用いて中間値を表現すること」で同じだ。
お前らはそれを
・フォントの場合
・色/ピクセルの場合
と別々に覚えてるから別物に見える。それはお前らの脳内が「暗記」ベースだからだよ。
暗記ベースでプログラミングの上達を目指すのは「デザインパターン」だ。
しかしこれも必要以上に細分化し、しかもJava文法が足りない点を必死で補っていたりで、
はっきり言ってポシャったろ。あれでは無理があるのさ。
勿論、「暗記」しかできない奴はいまだにそれにすがり続けているようだが。
ただ、実際の所、プログラミングは当然実装出来ると分かっている範囲で為されることが圧倒的に多いので、
「暗記」ベースの手法でもほぼ全ケースで何かしらの適用が出来、対応出来る。
だからそんなに問題にはならず、ある意味Javaプログラマが一定レベルまで順当に成長するのはこれがある。
ただ、「暗記」ベースだと、知らない事は発想出来ない。別物扱いだから。
中間色を「抽象思考」で捉えているのなら、
方向を変えて適用した結果がCoolTypeでありAAでしかなく、これらは自然に連結する。
この点がずいぶん違う。

761:デフォルトの名無しさん
18/09/06 09:34:16.38 /8o/0CpY.net
この点に於いて、「暗記」ベースの奴は文法リッチな言語、JavaやC++の方がいい。
というかな、プログラミングが上達する奴と全く上達しない奴が居て、
別段人間的に問題がある(全く努力をしてない)訳ではないのが不思議だったのだが、
今のところの俺の結論はこれだ。
「暗記」ベースの奴はCやJavaScript等の文法がスカスカな言語では上達しにくい。(上達出来ない)
文法リッチな言語だと、「この文法はこのときに使う」というやり方で、
「プログラミングパターン」を「暗記」で積み上げることが出来る。
(これは本来「デザインパターン」と呼ばれるべき物だが、
この用語は継承をこねくり回したゴミの呼称となってしまっているので、敢えて別に命名する)
だから、文法を一通り押さえれば、知識としてのプログラミングパターンを一定量積み上げることが出来、
結果、一定までは確実に上達するというわけだ。
Javaはこの手法で平均レベルのプログラマを大量確保出来ている。
ただし逆に、文法等の暗記事項に計上されてないと、彼等は上達出来ないので、過度に暗記にすがる。
これが今の「デザインパターン」の状態だ。必要以上に細分化し、また、無駄に増やし続けている。
彼等にとっては新規パターンの登録と暗記がすなわち上達であり、それ以外に方法がないからだ。
したがって、今後ともこの暴走は続く。
C++erで言えば、彼等は shared_ptr/unique_ptr/weak_ptr の使い方にはご執心だが、そこまでしか見えていない。
次に導入されようとしている observer_ptr については必要性も使い方も分かっておらず、理解も出来ない。
なぜなら、「暗記」出来るのはそれらが定義されて以降であり、
「暗記」では現在未定義の物を演繹的に作り出すことが出来ないからだ。
良くも悪くも、C++が文法リッチになる過程で、CerとC++erが自然発生的に分かれてきたのはこの辺だと思う。
Linusから見ると、C++の文法もデザインパターンと同様のゴミの山に見えているはず。
(JavaScriptなんて、たったあれだけの文法で、C++で表現出来る範囲を越えるのだから笑える)

762:デフォルトの名無しさん
18/09/06 09:35:06.90 /8o/0CpY.net
Cの場合には文法がスカスカだから、
ポインタで → 何でも出来る、とならないと上達しにくい。(演繹)
この場合は → shared_ptr、では無理だ。暴走出来ない。(暗記)
だから「暗記」ベースな奴は文法リッチな言語を選んだ方がいい。
(ただしポインタがあまりに汎用性がありすぎて最適化等に問題があり、
結果、他言語では色々制限を付けられてきたのはご存じの通り)
逆に「たったこれだけの文法で全て表現出来るなんてステキ」と思える奴は
CやJavaScript等の文法スカスカ言語の方が向いてる。
JavaScriptがゴミゴミ言われながらもここまで残っているのもこの点が大きい。
あれは使える奴が使ったら凄く使える言語だ。
ただ、今のJavaScriptプログラマの大半がゴミなのも事実だが。
Cの授業が全く無駄だ、という話も出所はここだ。
プログラミングなんて、結局、「代入、条件分岐、関数呼び出し、ループ」でしかなく、
ループですら代入と条件分岐で実装出来るのだから冗長だ。
一応チューリング完全であるbrainfuckは関数呼び出しすらないので、これも冗長とも言える。
そしてCの授業で行われるのはまさに「代入、条件分岐、関数呼び出し、ループ」だけであり、
これでどうやって初音ミクが歌って踊るのだ?と初心者には思えるだろう。
最終的にはGPUを介してVRAM上に代入(ラスタライズ)しているだけだとしても、
それが初心者に見えるはずもない。
(もっとも、今の3Dベースの2D《テクスチャとして貼ってるだけ》だと
ラスタライズ結果をVRAMに戻しているかも怪しいが)
ただ、MITがSICPを止めたのと同様、今時初心者がCをやる必要はない。
DrawLineで線が描ける、HTML出力したら絵が出る、で済む連中がCやるのが間違ってる。
逆に、デバイスドライバ等を書いたり、
計算機自体の専門家(HighPerformanceComputing)等を目指すならCは必修になる。

763:デフォルトの名無しさん
18/09/06 09:42:07.42 MYy5/YOc.net
量子化誤差の拡散!

764:デフォルトの名無しさん
18/09/06 09:50:36.43 2H4On29+.net
コードもだらだら書いてるんだろうなぁ

765:デフォルトの名無しさん
18/09/06 10:01:03.49 BRF//rri.net
メモリーリークについて質問です
プログラム終了時に残ってしまったものに関してはOSが解放してくれるから対処しなくていいと聞きました
今までデバッグしてメモリーリークが出ると無くなるまで結構あれこれやってたんですが全部無駄だったんでしょうか

766:デフォルトの名無しさん
18/09/06 10:10:29.24 2H4On29+.net
>>753
終了時には解放してもらえるけど、メモリリークしたままだと動き続けられないじゃん。
たまに再起動してもらうの?

767:デフォルトの名無しさん
18/09/06 10:21:17.68 BRF//rri.net
あーいや想定してるのはちょっとした処理を行って出力して落ちるだけのプログラムなんです
ループの中で何回もmallocしてメモリを食いつぶすとかそんなことも無くて、ただ終了時まで動的確保した変数が解放されてないみたいな
そういう状況でお願いします

768:デフォルトの名無しさん
18/09/06 10:37:52.78 2H4On29+.net
>>755
そういう限定的な条件では解放は省略するって方針もあるかもね。
終了パターンがいろいろあると解放するだけでも一苦労だったりするし。
ただせっかく作ったそのコードは制約が多く他には転用しづらかったりと資産としての価値は低いと思う。
そもそもデバッグでメモリリークを発見とか言ってるとなると、メモリの管理はしっかりしてて解放を省略していることも設計に入ってる、という状況ではないんじゃないの?
それはメモリを管理できてないってことじゃないのかな。
そんな場当たり的なことやってると大きなコード書けないよ。
メモリリークを潰させるのは、メモリを解放すること自体が目的というよりメモリを管理させる教育的な目的じゃないかね。

769:デフォルトの名無しさん
18/09/06 11:35:05.98 BRF//rri.net
いや教育というか、上司が作ったAPIを利用して機能作れって指示が出ててですね
そのAPIが上で説明したように変数解放しないままプログラム終了してたって状況です
んでこれいいんですかこうすれば治りますがみたいなこと言ったらいいんだ勝手に解放されるかと
ともあれそういう方針が有りだということは分かりました。どうもです


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