[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 11/19 19:41 / Filesize : 280 KB / Number-of Response : 1014
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C言語なら俺に聞け 157



1 名前:デフォルトの名無しさん [2021/06/28(月) 11:22:51.50 ID:so+vl3vs0.net]
!extend:checked:vvvvv:1000:512
(新スレ立ての際上記コマンドを2行書き込んでください)
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
codepad.org/

C11
www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf

C99
www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
kikakurui.com/x3/X3010-2003-01.html

C FAQ 日本語訳
www.kouno.jp/home/c_faq/

JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/

※前スレ
C言語なら俺に聞け 156
https://mevius.5ch.net/test/read.cgi/tech/1601271690/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured

488 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 22:47:56.20 ID:3kbeL8sr0.net]
愛すぞ

489 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 23:16:53.36 ID:fvnuyojga.net]
推すぞ

490 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 23:51:09.87 ID:5LgeY8Yf0.net]
スッゾオラー!

491 名前:デフォルトの名無しさん [2021/08/28(土) 00:56:23.65 ID:TAUITiELM.net]
>>479
諭すぞ

492 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 01:07:55.46 ID:ArBPUbYg0.net]
宿題のことも思い出してやって

493 名前:デフォルトの名無しさん [2021/08/28(土) 02:24:48.25 ID:Kasf1Z4n0.net]
>>358
レターは文字の集合。キャラクターとしたのは文字として認識していない記号等を含めたため。

494 名前:デフォルトの名無しさん [2021/08/28(土) 14:36:23.66 ID:0ROz2KLh0.net]
>>486
なるほど

495 名前:デフォルトの名無しさん [2021/08/28(土) 19:25:44.91 ID:Kasf1Z4n0.net]
>>487
制御文字を含めたのも理由かな

496 名前:デフォルトの名無しさん [2021/08/28(土) 19:26:13.75 ID:0ROz2KLh0.net]
>>488
なるほど



497 名前:デフォルトの名無しさん [2021/08/28(土) 19:38:40.56 ID:Kasf1Z4n0.net]
文字のことをキャラクターと呼び始めたのはC言語じゃねえよ。

13年前にできたCOBOLですらキャラクターと呼んでんだぜ?

498 名前:デフォルトの名無しさん [2021/08/28(土) 19:51:11.77 ID:foB6MXRR0.net]
俺に聞けって言われてもな
なに聞いたらいいかわからん
変に言語のマニアックな知識つけるより、アルゴリズム沢山知ってた方がいいと思うから言語や開発環境についてはvalgrindとかcmakeとか基本的なことを身に付いてればそれで十分だと思ってるわ
だからすまんけど聞きたいことはない

499 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 19:58:54.24 ID:J7/U097I0.net]
>>490
> 13年前にできたCOBOL

?

500 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 20:03:04.96 ID:ArBPUbYg0.net]
C言語が1972年、COBOLが1959年
こういうことを言いたいのでは無いか?

501 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 20:08:53.74 ID:GTTRCLIA0.net]
子供の英会話聞いてるとletter aとか頻出するが、まだキャラクターは出てこないな。

502 名前:デフォルトの名無しさん [2021/08/28(土) 21:27:40.38 ID:Kasf1Z4n0.net]
キャラクターの本来の意味は文字じゃないんだぜ?
あたりまえなんだぜえ?

503 名前:デフォルトの名無しさん [2021/08/29(日) 01:18:09.40 ID:TPHdi4yb0.net]
>言いたいのでは無いか?

ここの「無い」に漢字を使うことに違和感感じるのは漏れだけ?

504 名前:デフォルトの名無しさん [2021/08/29(日) 01:49:09.89 ID:HDdtcjYC0.net]
「〇〇ではないのか。」の「ない」は形容詞。

ただし、これは形容詞を代用した言い回しなので、「無い」とはっきり形容とわかる使い方以外の場合は、日本語のおかしさが出てしまうので違和感がある。

そもそもわざわざ「ない」を「無い」と書く必要がない。戦後教育では漢字で書かなくてもわかることは仮名で書くと決めて、学校では漢字で書かないよう指導しているのに、漢字で書くやつはそれをすっかり忘れているだけだ。

505 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 01:52:08.61 ID:5p1Kcso30.net]
割とどうでもいい話だな
国語教育スレにでもうつってそこで続けてくれ

506 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 02:38:33.54 ID:7/doTy/i0.net]
> 違和感感じる

に違和感覚えるのは漏れだけ?



507 名前:デフォルトの名無しさん [2021/08/29(日) 02:48:49.23 ID:HDdtcjYC0.net]
>>499
それもネチネチ30年以上も言われたが、単に字面が醜いという話で終わった。

覚えるも感じるも同じ意味で使っている。日本語は同じ漢字が続くときれいに見えないので変えたくなる。

508 名前:デフォルトの名無しさん [2021/08/29(日) 04:28:31.20 ID:Lt7wAmk40.net]
無いと言えばこの前ドイツ語の映画で Nein って言ってる時に日本語字幕に「無い」と出ていて一致していて笑った。

509 名前:デフォルトの名無しさん [2021/08/29(日) 05:28:11.66 ID:HDdtcjYC0.net]
>>501
否定の言葉の発音がNで始まるのは人類共通

510 名前:デフォルトの名無しさん [2021/08/29(日) 05:30:35.87 ID:HDdtcjYC0.net]
人類が言葉を話す前の拒否を表す叫びが言葉になったのだろう。

511 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 08:16:38.59 ID:0FIWs/PL0.net]
いやだ!
やめろ!
はNじゃないけど

512 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 08:19:11.41 ID:z+CvjRY2a.net]
スモモモモモモモモ

513 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 08:43:55.40 ID:kXE2QuW0K.net]
>>501
「無いん」ならもっと良かったw

>>502
韓国語だと、YESがネーでNOがアーニョ

514 名前:デフォルトの名無しさん [2021/08/29(日) 08:46:40.86 ID:XBz6dM210.net]
離散データを連続データのように見せかけるフィルターを作りたい。
アルゴリズム名を教えてください。

515 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 08:51:04.40 ID:s3BI9dN30.net]
不是

Nで始まるどころか含まれてもいない

516 名前:デフォルトの名無しさん [2021/08/29(日) 09:56:38.96 ID:Qq6uUubw0.net]
_countof を使うべきですか?
https://docs.microsoft.com/ja-jp/cpp/c-runtime-library/reference/countof-macro?view=msvc-160
もっと良い計数方法ありますか?



517 名前:デフォルトの名無しさん [2021/08/29(日) 10:01:34.24 ID:Qq6uUubw0.net]
>>502
フランス語には何故 pas があるの?

518 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 10:14:57.45 ID:LcGcn6bDF.net]
>>509
https://marycore.jp/prog/c-lang/countof-array-and-sentinel-value/

519 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 16:11:09.82 ID:bszwbM+aH.net]
>>510
https://dictionary.sanseido-publ.co.jp/column/ghf23

520 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 16:24:27.16 ID:Gww7yuPw0.net]
>>510
neの発音が小さくて聞き取れないから付けることになった

521 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 17:57:42.29 ID:Lt7wAmk40.net]
nulぽ

522 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 18:16:18.76 ID:jyQ+I+xW0.net]
   ( ・∀・)   | | ガッ
  と    )    | |
    Y /ノ    人
     / )    <  >__Λ∩
   _/し' //. V`Д´)/ ←>>514
  (_フ彡        /

523 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 18:44:57.73 ID:5p1Kcso30.net]
日本語だとにゃー、英語だとmew

524 名前:507 mailto:sage [2021/08/29(日) 19:19:21.76 ID:XBz6dM210.net]
投稿するスレッドを間違えてしまったかもしれません。>>507
それ以後、いろいろ調べつづけましたが、
どうやら内挿法とか補間法とか呼ばれていることが分かりました。
そのためのアルゴリズムを探してみます。
ありがとうございました。

525 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 19:26:53.70 ID:5p1Kcso30.net]
宿題スレやお題スレなら、反応があるかも知れん

526 名前:507 mailto:sage [2021/08/29(日) 19:40:59.03 ID:XBz6dM210.net]
離散的なデータのプロットから滑らかな曲線を得たいのですが、
ベジェ曲線を使う必要があるため、それも計算する必要があります。
ではこの辺でさようなら。



527 名前:デフォルトの名無しさん [2021/08/30(月) 14:56:32.12 ID:a7szkEqkF.net]
FFT

528 名前:デフォルトの名無しさん mailto:sage [2021/08/30(月) 17:40:48.45 ID:7tjRHlOya.net]
Final Fantasy XII

529 名前:デフォルトの名無しさん mailto:sage [2021/08/30(月) 22:24:16.28 ID:u8tdK0uP0.net]
与えられた離散的な点を必ず通る曲線なのか適度に近いとろこを通す曲線なのか

530 名前:デフォルトの名無しさん mailto:sage [2021/08/31(火) 20:16:31.77 ID:5EZjygd6a.net]
Fire Fox TV

531 名前:507 mailto:sage [2021/09/01(水) 07:07:18.21 ID:idZ7WXfL0.net]
>>522
必ず通るようにしたいです。最小二乗法のようなものじゃないです。

532 名前:デフォルトの名無しさん mailto:sage [2021/09/01(水) 09:37:56.74 ID:BXH5CjID0.net]
スプライン補間
https://github.com/okumuralab/algo-c/blob/master/src/spline.c

533 名前:507 mailto:sage [2021/09/02(木) 18:15:48.70 ID:E4GAaWam0.net]
>>525
サンキュー、サー!

534 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 14:53:10.23 ID:H4dj0oy10.net]
代入時など左辺に&をつけない理由って、元々左辺の変数はその変数のアドレスを示しているんですか?

535 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 17:29:15.71 ID:fnRem4gD0.net]
左辺にアドレス値を書いても、そのアドレスに格納してくれるわけではない

536 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 19:49:04.18 ID:UoYK8G+w0.net]
変数は(多くの場合)メモリ上に置かれる
a=bの式をコンパイラは「bのアドレスのメモリにある値をaのアドレスのメモリにコピーする」と解釈する

でもそれをソースコード上で&a=&bと書かせてもお得なことはないよね
言語上では「a, bは(抽象化された)変数」で、その変数への代入は「a=b」でいいよね



537 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 20:30:31.76 ID:IpYcp5mx0.net]
>>527
C++だと参照型が近いけど、あれはあれで窮屈ながらも、便利っちゃ便利かもな。
でもポインタ幅きかせてるCであえて拡張したい記法かといえば微妙よね。
void func(char &c) { c *= 2; }
みたいなのね。

538 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 22:33:45.82 ID:H4dj0oy10.net]
皆さんありがとう
scanfで変数に&を付ける理由はいろんなとこに書いてあるんだけど、
それならなんで普通の代入の時に&を付けないんだ?
って疑問に思ってました

539 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 23:06:30.86 ID:LC2TQyRsa.net]
void f(int *p)
{ *p = 1; }

….
int i;
i = 0;
printf("%d\n"); // 0
f(&i);
printf("%d\n"); // 1

540 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 00:21:46.80 ID:F+ZN0nvA0.net]
scanfに限らず、関数に変数を渡すと、その関数は、
渡された変数の値を受け取れるだけで、
変数の値の書き換えは出来ません
書き換えて欲しいときは、書き換える場所を関数に教えます

普通の代入の時は、その変数を直接操作できるので
あえてアドレス表記する必要が無いです

541 名前:デフォルトの名無しさん [2021/09/12(日) 02:58:55.75 ID:zHKafq1A0.net]
memcpy(&a, &b, sizeof(a));

なんてことを、昔々構造体の変数の代入が出来ないCのサブセットのコンパイラでやったことがあったような気がするが、もはや記憶も曖昧になるぐらいの大昔。時の経つのは早いものぢゃ。

542 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 10:12:20.10 ID:BvG4P5vd0.net]
サブセットつーか、そもそもK&R Cは構造体代入できないね

543 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 14:36:50.48 ID:Yq9DVfRn0.net]
>>531
int c;に対して&c = 100という記述はだめなのって疑問かな?
代入演算子は左辺に変数を置いて値を書き込む特別な演算子だけど、
それをその変数の型を含むアドレス値を左辺に置いてそのアドレスに
書き込むという定義とするわけだ。

定義自体がややこしいし、
アドレス全面押しにする理由がない(むしろ遮蔽したい)、
頻繁に用いる演算子ゆえタイプ数が増えたりするのは好まない、
などメリットがないのだろうね。

=と==を=にまとめてしまって、代入時は&付けるという方向は
あるかも知れませんが、コード中代入のが多いでしょうから、
代入をシンプルにしたのではと。

544 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 14:42:45.51 ID:BvG4P5vd0.net]
FORTRANの代入を真似ただけだろ

545 名前:デフォルトの名無しさん [2021/09/13(月) 01:06:14.49 ID:MTzB4xqO0.net]
>>535
あ。そうだったっけ。忘れてた。

546 名前:デフォルトの名無しさん [2021/09/13(月) 01:13:16.73 ID:MTzB4xqO0.net]
int c;
*(&c) = 1;
ていうのなら出来る。
コンパイラは何の警告も出さずにコンパイルするかも知れないが、結局 c = 1; をやっているのと同じコードが出力されると思う。



547 名前:はちみつ餃子 mailto:sage [2021/09/13(月) 01:28:42.84 ID:b2LY5t5P0.net]
代入演算子の左辺に現れることが出来るのは変更可能な左辺値 (modifiable lvalue) で、
>>539 の例はその条件を満たす。

>>527
たとえば
int c = 1;
a = 2;
というのは C では有効なコードだけれど、変数を評価すると格納されている値になるというルールを
そのまま適用すると
1 = 2;
になってしまっておかしい、左辺は「場所」でないといけないという感覚はとても良い感性なのだけれど、
左辺がアドレスということにしたとしてもアドレスはポインタ型の「値」でしかないのでそれはそれで
なんだか変なことになる。
結局は特別な規則を導入必要はあって、 C においてはそれが lvalue という概念というわけ。

548 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 07:34:08.89 ID:wBWjVwq/M.net]
わざとやってるのか知らんけどコードくらいまともに書けよ

549 名前:デフォルトの名無しさん [2021/09/13(月) 09:12:44.29 ID:BLplThEad.net]
>>531
C++は面倒なことになったな
#include <iostream>

using namespace std;

int main(int ac, char **av)
{
int a = 3;
int &b = a;
cout << a << b << endl;
return 0;
}

550 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 09:47:47.66 ID:B8QV0Pmm0.net]
ここはCスレ

551 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 13:35:49.31 ID:lh01OzgJa.net]
>>532
誤>printf("%d\n"); // 0

正>printf("%d\n", i); // 0

いまさらですが、第2引数が欠落していました
失礼しました

552 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 16:53:30.27 ID:XjglcLZY0.net]
副作用をポインタを経由して呼び出し元に伝播する ポインタ渡し
引数変数への代入がそのまま呼び出し元の変数に反映される 参照渡し(C言語には無い)

553 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 16:57:08.25 ID:XjglcLZY0.net]
関数の壁(呼び出し元と 呼び出された関数内の記述)を超えるときに & を使って壁を越える工夫をする
同じコード内の変数への代入ならば不要

554 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 17:04:06.19 ID:JA2CmiO7M.net]
&使わないと釣り銭をもらえない

555 名前:はちみつ餃子 mailto:sage [2021/09/13(月) 17:52:01.78 ID:b2LY5t5P0.net]
C の仕様では引数は一貫して値渡しで、その値の型がポインタ型のこともあるという理屈になってる。
(仕様の理屈はともかくポインタの活用の仕方としてポインタ渡しと呼ぶことを否定するわけではない。)

556 名前:デフォルトの名無しさん [2021/09/13(月) 17:58:15.13 ID:+BvkCNRX0.net]
C言語は昔からアドレス渡しと言っているけどな。



557 名前:デフォルトの名無しさん [2021/09/13(月) 18:00:26.00 ID:+BvkCNRX0.net]
ポインタ渡しだとポインタ変数限定みたいに捉えてしまいそうだなw

558 名前:デフォルトの名無しさん [2021/09/13(月) 20:02:35.33 ID:LTFifztG0.net]
「アドレス渡し」の方がアセンブラに近い
ただしポインタ型のサイズで加減するアドレッシング機能付き
「ポインタ渡し」はPASCAL由来やろ

あと配列のサイズも一緒に渡す機能は付いてたらよかったのになーともたまに思う

559 名前:デフォルトの名無しさん [2021/09/13(月) 21:18:13.15 ID:+BvkCNRX0.net]
OSを作るために作られたのに

560 名前:デフォルトの名無しさん mailto:sage [2021/09/14(火) 01:01:51.69 ID:cEQHQvCwa.net]
ポインタには型があるから、オブジェクトの大きさも、structへのポインタなら、各メンバへのオフセットや大きさやら…

561 名前:デフォルトの名無しさん [2021/09/14(火) 06:05:05.77 ID:48wIBTET0.net]
>>553
型はあってないようなもの

562 名前:デフォルトの名無しさん mailto:sage [2021/09/14(火) 07:07:50.62 ID:TY9EyEr50.net]
カーニハンは辛辣なPascal批判の論文書いてるね

563 名前:デフォルトの名無しさん mailto:sage [2021/09/14(火) 07:08:21.19 ID:TY9EyEr50.net]
これ
www.lysator.liu.se/c/bwk-on-pascal.html

564 名前:デフォルトの名無しさん mailto:sage [2021/09/14(火) 07:16:50.67 ID:0vgLnSzd0.net]
>>556
論文って開いてみたら、タイトルクソワロタ。

565 名前:デフォルトの名無しさん mailto:sage [2021/09/14(火) 07:26:42.56 ID:TY9EyEr50.net]
よかったね

566 名前:デフォルトの名無しさん mailto:sage [2021/09/14(火) 09:36:35.35 ID:Hja/bGISM.net]
卒論のテーマはこれで決まりだな



567 名前:デフォルトの名無しさん mailto:sage [2021/09/14(火) 10:50:21.10 ID:5Y/jembp0.net]
アドレス私って、
b = a;
c = a;
とかやってて、a=0にすると、bもcも0になるってこと?

568 名前:デフォルトの名無しさん mailto:sage [2021/09/14(火) 11:31:36.84 ID:TY9EyEr50.net]
それは参照だ
C++のな

Cでやるなら
#define b a
#define c a

569 名前:デフォルトの名無しさん [2021/09/14(火) 13:58:37.43 ID:eQ96wDaCF.net]
>>557
Matz の論文は I hate C++ だぞω

570 名前:デフォルトの名無しさん [2021/09/14(火) 15:48:56.00 ID:48wIBTET0.net]
>>556
性能重視の部分は考え方の違いだな。UNIXを作るにあたって不要な部分を取り除いた結果がC。

571 名前:デフォルトの名無しさん [2021/09/14(火) 15:51:55.83 ID:48wIBTET0.net]
>>560
メモリのアドレスを直接、渡すから、呼び出し元の領域をそういうふうに直接、触ることになる。

572 名前:ハノン mailto:sage [2021/09/14(火) 17:38:29.69 .net]
私は pascal は好きなんですけど‥‥

573 名前:デフォルトの名無しさん [2021/09/14(火) 23:42:22.10 ID:/drSXHoF0.net]
Delphiは昔使ってたな。拡張しまくったPascalというかなんというか。

574 名前:デフォルトの名無しさん [2021/09/15(水) 00:41:20.00 ID:h1CB84tY0.net]
アセンブラのようなことができた方がいいというのが出発点だからなあ

575 名前:はちみつ餃子 mailto:sage [2021/09/15(水) 01:36:14.40 ID:/JHaU2Oz0.net]
今でこそ C は低レイヤ寄りと見做されるけど「高級言語で OS を書きたい」というモチベーションから作られている。
おそらく当時の感覚からすればむしろアセンブラ的な世界からの脱却だったんじゃないかな。
歴史的経緯はある程度は記録を辿れるけど時代を背景にした「感覚」というのは現代人からはなかなか掴みづらくてあくまでも想像だけど。

576 名前:デフォルトの名無しさん [2021/09/15(水) 05:11:14.87 ID:h1CB84tY0.net]
おおざっぱに言うとアセンブラの見た目を変更したのがC



577 名前:デフォルトの名無しさん mailto:sage [2021/09/15(水) 07:08:27.66 ID:+suq2kti0.net]
アセンブラの無駄のなさと、高級言語の移植性の、両取りを狙う試みだね

578 名前:ハノン mailto:sage [2021/09/15(水) 14:05:30.69 .net]
それはどうでしょうか‥
turbo c の asm 文抜きのいきなりインラインはよく使っていましたが、そんな turbo c でもキャリーフラグを直接使えなかった気がします、そんな記憶がふつふつと

579 名前:デフォルトの名無しさん mailto:sage [2021/09/15(水) 14:16:20.72 ID:+suq2kti0.net]
ローテート命令はキャリーありの9bit循環とキャリーなしの8bit循環があるから
そこまで言語では面倒見きれなかったってだけ
ステータスレジスタを陽に記述すると移植性なくなるが
そんなことしなくても当時のUNIXの95%を記述できたしな

580 名前:デフォルトの名無しさん mailto:sage [2021/09/15(水) 15:25:36.81 ID:23VOu0KJM.net]
#ifdef flagresister取得可能(ならば)
専用式
#elseif
~

581 名前:デフォルトの名無しさん mailto:sage [2021/09/15(水) 15:31:31.69 ID:23VOu0KJM.net]
みたいな専用式を言語仕様に含めたやり方も出来たかもしれん
当時の演算能力内でwrite once,RA かつアカデミック感目指してomit しちゃったんかな

582 名前:デフォルトの名無しさん mailto:sage [2021/09/15(水) 16:26:01.26 ID:1Mo2XUv5M.net]
Keep the language small and simple.

583 名前:デフォルトの名無しさん mailto:sage [2021/09/15(水) 17:05:05.53 ID:dV7Qc7xZM.net]
>>571
そもそも世の中にはキャリーフラグなんてないプロセッサもあるから
俺の知る限りキャリーフラグを扱える高級言語はTL/1しかない

584 名前:ハノン mailto:sage [2021/09/15(水) 17:16:31.92 .net]
>>576
そうなんですね、なんちゃって多倍長をやっていて、ここでローテート&キャリーが使えればなぁぁぁ、とつくづく

585 名前:はちみつ餃子 mailto:sage [2021/09/15(水) 17:52:22.20 ID:/JHaU2Oz0.net]
>>576-577
TL/1 はあくまでも演算子がキャリー/ボロー付き演算の命令にそのままコンパイルされるってだけなんで、
配列アクセスなどのときに勝手にアドレス計算でフラグが設定されてしまうといった意図しない影響があって
あまり使い勝手は良くない。

あまり詳しくないけど LLVM はキャリーフラグを扱う方法があって
かつレキシカルな伝播として記述できたはずなんで、
たぶん LLVM IR でならなんとか記述できるんじゃないかな。
LLVM IR を高級といえるかどうかはたいへん微妙な話だが……。

586 名前:デフォルトの名無しさん [2021/09/17(金) 10:00:39.91 ID:oDWWsmOUa.net]
>576
https://www.zukeran.org/shin/d/2015/04/10/kumajiri-compiler/



587 名前:デフォルトの名無しさん mailto:sage [2021/09/17(金) 10:32:07.44 ID:+c0nDJY5M.net]
>>578
例えばこんなを高級言語って言う?
define i32 @main(i32 %argc, i8** %argv) #0 {
%1 = alloca i32, align 4
%2 = alloca i32, align 4
%3 = alloca i8**, align 8
store i32 0, i32* %1
store i32 %argc, i32* %2, align 4
store i8** %argv, i8*** %3, align 8
%4 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([15 x i8]* @.str, i32 0, i32 0))
ret i32 2
}

>>579
ごめん、意味分からん
単なるVTL (Very Tiny Language) の話にしか見えない

588 名前:デフォルトの名無しさん mailto:sage [2021/09/17(金) 14:21:22.00 ID:g2c8KLlcM.net]
>>580
rustよりは高級に見えるな

589 名前:はちみつ餃子 mailto:sage [2021/09/17(金) 14:42:13.05 ID:hv2MZm4l0.net]
>>580
そこから様々なターゲットの機械語を生成しうるという意味では
ハードウェアにベッタリと紐付いているわけではなくて
LLVM IR を低水準言語と呼ぶのはなんか違うなって思うけど、
だからといって日常的に人間が直接書くことを前提においてるわけでもない
という点では高級とも言いにくいかな……という意味で「微妙」と評した。

590 名前:デフォルトの名無しさん [2021/09/17(金) 16:26:05.73 ID:J/w/zJeW0.net]
シリコンバレーで働いて気付いた「技術力向上」だけに固執するエンジニアのダメさ【Sansan CTO 藤倉成太】
https://type.jp/et/feature/9402/
DeNA×メルカリ×サイバーエージェント人事担当が面接で必ずする質問とは?「技術力だけアピールしても内定は出ない」
https://type.jp/et/feature/10236/
DeNA・メルカリ・CA人事が証言! スキルはあるのに“面接で落ちる”エンジニアに足りないもの
https://type.jp/et/feature/10402/

591 名前:デフォルトの名無しさん mailto:sage [2021/09/17(金) 20:48:41.30 ID:M17TGSOPM.net]
>>582
> そこから様々なターゲットの機械語を生成しうるという意味では
> ハードウェアにベッタリと紐付いているわけではなくて
Javaのバイトコードを高級言語って言うの?

592 名前:はちみつ餃子 mailto:sage [2021/09/17(金) 20:59:27.14 ID:hv2MZm4l0.net]
>>584
JVM のバイトコードは言語ではないと思うから高級言語とは言わないけど、低水準でもないでしょ。

593 名前:デフォルトの名無しさん mailto:sage [2021/09/17(金) 21:50:22.49 ID:/PAMmlQoM.net]
低水準の話はしてないから
> 高級言語とは言わない
でFAやね

594 名前:はちみつ餃子 mailto:sage [2021/09/17(金) 22:00:48.37 ID:hv2MZm4l0.net]
そうか。

595 名前:デフォルトの名無しさん mailto:sage [2021/09/17(金) 22:31:46.08 ID:C7S/bCm80.net]
C言語だってコンパイルすればバイナリ

596 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 04:33:04.80 ID:iNoegsL20.net]
倍也



597 名前:デフォルトの名無しさん [2021/09/18(土) 08:52:55.38 ID:bA/qQPAiF.net]
バイトコードをいい加減に扱い過ぎ

598 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 09:19:07.92 ID:1ehO0L4U0.net]
>>580
特定CPUのアーキテクチャに言及してないな

599 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 18:56:12.62 ID:RjbxwxKL0.net]
宣言と定義についてなんですが

int a; // 宣言
int b = 1; // 定義

宣言と定義ではどちらもメモリ(スタック)は確保されているという理解であってますか?

600 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 19:10:22.14 ID:bsPUoCV00.net]
はい

601 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 19:28:32.87 ID:I+biH5jK0.net]
はいじゃないが

602 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 19:42:16.97 ID:jTQBMDyZ0.net]
>>592
変数宣言のうちメモリを確保するのもが定義。
その2つは両方とも宣言であり定義でもある。

603 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 19:43:03.59 ID:XFa1Ksn/0.net]
コンパイラと最適化オプション次第

604 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 19:48:26.79 ID:RjbxwxKL0.net]
>>595
定義は宣言の下位概念ってことですか?

605 名前:ハノン mailto:sage [2021/09/18(土) 19:55:00.96 ID:/DXMasS60.net]
>>592
いいえ
定義では格納場所を確保しますが、宣言では存在のみ指示しても格納場所は確保されません、私は気が向けば宣言には extern をつけるようにしないわけではない、という感じかな
なおその例は少し変で、代入を伴えば定義というわけでも、代入がなければ宣言というわけでもない、というのが個人的感覚です、詳しい人の解説を希望します

例外は、リンカが頑張って格納場所を作ってくれる例の何とかとかいうキーワードがあったのですがおもいだせません、今日モデルナを射った後転んで頭を打ってしまった、結果、いっそう馬鹿になってしまいました‥‥

606 名前:ハノン mailto:sage [2021/09/18(土) 20:04:32.98 ID:/DXMasS60.net]
>>592
宣言か定義か、という問題は、単一モジュールでプログラムを構成している段階ではあまり気にしなくてもいいと思います
複数の c ソースを分割コンパイルし、最後に得られたオブジェクトをライブラリともあわせて結合する、という作法に進めば自然に理解できるようになりますのでご心配なさらなくともいいでしょう

私も昔は「extern は要らない子!」とか馬鹿をいっていましたが、これは撤回します、extern がどうしても必要な場面に遭遇したのです
まあそういうわけで一度にいっぺんに賢くなるのは私には難しいことのようです



607 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 20:41:39.21 ID:RjbxwxKL0.net]
>>598
たとえば

int a;
printf("%d\n", a);

なんですが、この場合のaは定義されているということですか?
代入式があるのが定義だと思ってました
宣言と定義の文脈はコードによって変わるということなんですかね

608 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 21:25:06.90 ID:JTl7f6jwM.net]
簡単に言えば宣言はその名前をコンパイラに伝えるもの
定義はその実体を確保するためのもの
>>592の例は両方共に宣言であり定義でもある
C言語では定義のみすると言うのはできないと思う
宣言のみはexternとか前方参照のためのstruct xxx;とかで使われる

609 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 21:44:48.00 ID:YluaRA/40.net]
>>596
屁理屈こねんなやボケが

610 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 22:06:39.93 ID:jTQBMDyZ0.net]
..>>597
「下位概念」という言葉をあてるのは不自然な気がするけど、C言語において定義は宣言のサブセットだよ。

>>600
その2行がコンパイルできる文脈に置かれているなら、 a は定義されている。
(初期化されていない自動変数になるので後続の printf での読み取りは未定義動作になるけど。)
「宣言と定義の文脈はコードによって変わる」は意味が分からないので否定も肯定もできない。
同じ int a; といった記述が宣言か定義か文脈によって変わる、ということならありえる。(構造体メンバの宣言とか。)

611 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 22:22:54.90 ID:RjbxwxKL0.net]
>>601
>>603
メモリが確保されているかどうか?という点で定義か宣言か判断すればいいということですね
printf()で参照している場合はaはメモリが確保されているのでaは定義されている状態
printf()で参照しない場合はaはただの宣言になると

612 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 22:32:01.92 ID:vqHZXwmna.net]
>>604
レスの後半はいらないよ
参照されるか否かは関係ないよ

int a;
で定義は完結してるから

613 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 22:36:06.58 ID:/Dm63BCIM.net]
>>604
> printf()で参照しない場合はaはただの宣言になると
違う、参照の有無に関わらず領域は確保される
最適化とか鼻から悪魔のコードだから確保を端折るとかはあるけどそれはまた別な話

614 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 22:53:55.61 ID:RjbxwxKL0.net]
>>605
>>606

理解しました!

int main(void) {
int a;
return 0;
}

↑のaは定義されていてメモリが確保されている状態ってことですね
また定義は宣言のサブセットだから、この状態を宣言と呼んでもいいということですね

615 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 23:32:59.41 ID:vqHZXwmna.net]
aは定義されている、でよいと思います
ちなみに、自分は宣言とか定義とか「言葉」は意識しないです
ただ、ここにオブジェクトが実在するのか、他のどこかにあるオブジェクトを使うのかは明確に意識しなければなりません

int main(void) {
int a;
extern int x:
return 0;
}

ここで xは、関数外のどこかで定義された int型のオブジェクを参照します、という宣言

616 名前:ハノン mailto:sage [2021/09/18(土) 23:37:35.98 ID:/DXMasS60.net]
>>607
そうですね
それに、そのコードは関数 int main(void) も宣言かつ定義していますね
関数の場合は、関数の中身が書いておれば宣言かつ定義、関数の呼び出され方だけしか書いていなければ宣言、とすぐにわかるので、キーワード extern は省かれる傾向にありますね

詳しい人に解説いただき私も感謝します



617 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 23:38:56.69 ID:bsPUoCV00.net]
質問
externを関数内で宣言したとき、有効範囲は次のどれになりますか?
1.宣言した関数のスコープ内で有効
2.宣言したソースの後続行で有効
3.宣言を書いたソースの全体で有効

618 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 23:43:44.98 ID:vqHZXwmna.net]
A.1

619 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 23:45:59.85 ID:vqHZXwmna.net]
通常の変数と同様に、ブロック {} で括られるかと

620 名前:はちみつ餃子 mailto:sage [2021/09/19(日) 00:58:34.79 ID:aMl1OG4b0.net]
JISX3010:2003 の 6.7 から抜粋

> 宣言は、幾つかの識別子の解釈及び属性を指定する。
> 識別子の定義 (definition) とは、宣言のうち次のものをいう。
> ・オブジェクトに対しては、そのオブジェクトの記憶域を確保する宣言
> ・関数に対しては、関数本体を含む宣言
> ・列挙定数又は型定義名に対しては、その識別子の(唯一の)宣言

621 名前:デフォルトの名無しさん [2021/09/19(日) 12:56:33.95 ID:/yxUr6Cya.net]
関数の中とか{}ブロックの中とかで
#include とか #define 出来れば良いのにと思うことはある
(いや出来ることは出来るけど)

622 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 14:00:14.49 ID:k97hf5Wx0.net]
>614
その辺は古い仕様の限界だから……

623 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 14:08:34.86 ID:dcXPbcRy0.net]
>>614
便利だよね
CSV埋め込みとか

624 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 15:49:36.39 ID:1EdICjsOK.net]
>>610
>>611
2だったような
1の方が合理的だが

625 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 16:19:30.05 ID:gqeRua+ma.net]
// foo.c
#include <stdio.h>

int f(void)
{
extern int glob:
return glob + 1;
}

int main()
{
printf("%d\n", f()); // 124(次行がないとき)
printf("%d\n", glob); // エラー
return 0:
}

// bar.c
int glob = 123;

でした
勘違いだったらごめんなさい

626 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 16:24:53.88 ID:gqeRua+ma.net]
int f(void)
{
__{
____extern int glob:
__}
__return glob + 1; // glob undeclared
}



627 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 18:52:30.28 ID:AMdE/BCe0.net]
extern の変数をスコープ内に書きたい場面ってあまり思いつかない。
ヘッダファイルに書くのサボりたい時くらいしかそんな書き方しないな〜

628 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 19:48:44.86 ID:gqeRua+ma.net]
>>620
>>608だけど、(関数スコープ内の)宣言のうまい例を思いつきませんでした
自分でもこのような記述はしたことがないです

>>614
ブロック内でも、#includeや#defineは使えるには使えるのでは
使ったことはないけど
ただし、#defineは同じスコープ内で #undefで閉じておかべきだけど
リーダブルコードという本で、define〜undefの例を見たような

629 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 19:52:36.17 ID:tWZRSjBtM.net]
>>620
俺はそのスコープでしか使わないなら普通にスコープ内に書くけど?

630 名前:621 mailto:sage [2021/09/19(日) 20:02:10.63 ID:gqeRua+ma.net]
>>614
「できるにはできるけど」と、ちゃんと書いてありますね
大変失礼しました、ごめんなさい!!

631 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 20:34:55.88 ID:qdWHvjUr0.net]
ひょっとして、#define も関数内で記述すると
そのスコープ内で有効になるのかな?

632 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 20:40:54.81 ID:AMdE/BCe0.net]
>>624
流石にそれはない。

633 名前:621 mailto:sage [2021/09/19(日) 20:42:46.70 ID:gqeRua+ma.net]
#includeとか #defineとか、プリプロセッサが処理する時点では、スコープとか、C言語の文法すら関知しないかも
トークンの
識別くらいで

634 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 21:23:46.86 ID:AMdE/BCe0.net]
こんな #define 見たくないけど・・・

---------------------------------------
void func() {
 #define A 100
}
int main() {
 int i = A;
}
---------------------------------------

gcc -E prepro.c
---------------------------------------
# 1 "prepro.c"
# 1 "<built-in>" 1
# 1 "<built-in>" 3
# 384 "<built-in>" 3
# 1 "<command line>" 1
# 1 "<built-in>" 2
# 1 "prepro.c" 2
void func() {

}
int main() {
 int i = 100;
}
---------------------------------------

635 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 10:14:32.45 ID:rmuhdvcF0.net]
Cにnamespaceが無いのが逝けない娘

636 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 15:37:40.46 ID:ql5RJosy0.net]
いらねぇだろネームスペースなんか



637 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 16:28:35.49 ID:WSYscKBB0.net]
namespaceが欲しいのにC++を使わないのが逝けない娘

太古の昔、Cにクラスが無いのが逝けない娘だと思った人とは行動力が違いすぎるな

638 名前:デフォルトの名無しさん [2021/09/20(月) 17:39:30.67 ID:WNFThOB/0.net]
CはCのままで良い。他の言語で実現出来ているんだし。その機能を使いたいならそちらの言語を使えば良い。
それでは何かが足りないというのなら新言語作れば良い。
自分では作る技術力がなくても仕様を考えてネットで公開しておけばやがて暇と技術力のある誰かが作ってくれるだろう。

639 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 18:06:11.00 ID:xT0MCUkn0.net]
>622
型を間違えてもエラーにならないから全くお勧めしない

640 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 19:39:36.63 ID:QS4OJe2QM.net]
>>632
はあ?
何言ってんの?
頭大丈夫?

641 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 19:50:34.34 ID:vvw4JppL0.net]
ミスする可能性が上がるから各コードでexternせずに必要ならヘッダに書いてもらえってことじゃね?

そもそもexternなんてextern "C"以外滅多に使わないけどな

642 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 19:57:31.48 ID:LO5PkHvF0.net]
>>633
前スレより

975 デフォルトの名無しさん (ワッチョイ b363-19dE) sage 2021/06/21(月) 23:06:35.04 ID:jHz8GYW10
// b.c
int b[] = {123, 456};

// a.c
#include <stdio.h>

int a[] = {123, 456};
int main()
{
  extern int *b;
  printf("val b\n");
  printf("%d\n", *(b + 1));

// printf("val a\n");
// printf("%d\n", *(a + 1));

 return 0;
}

こういう分割ソースをコンパイル、リンクして実行すると、何も表示無しで終了する
デバッガー使って実行してみると、SEGVになってる

643 名前:ハノン mailto:sage [2021/09/20(月) 20:10:17.55 ID:+hQanlE40.net]
>>634
>ミスする可能性が上がるから各コードでexternせずに必要ならヘッダに書いてもらえってことじゃね?
そうそう、extern による宣言と定義とが食い違うとエラーがでますから、そのためのヘッダの分離ということですね

>そもそもexternなんてextern "C"以外滅多に使わないけどな
関数の宣言は extern 省略可能ですし、ライブラリ側で共用のメモリを確保することは滅多にないです私は

644 名前:621 mailto:sage [2021/09/20(月) 23:40:17.11 ID:y5y6BCAna.net]
>>635
これは関数のスコープに書かなくても(ファイルスコープでも)同じじゃない?

645 名前:621 mailto:sage [2021/09/21(火) 00:23:33.65 ID:7n0ZYlgRa.net]
>>635
これってリンク時にエラーにする方法はないのかね….
あればとっくにやってるんだろうけど…

646 名前:デフォルトの名無しさん mailto:sage [2021/09/21(火) 00:26:56.39 ID:aEoN/PBD0.net]
>>637
同じですね

そもそもexternを明示的に書く必要がある状況って、
あるソースで定義されているグローバル変数を他のソースに公開して使えるようにするために、
ヘッダにextern int a;のように書いておいて、他のソースにはそれを#includeさせる
(すると他のソースでは余計な領域が確保されない)
のパターンが基本だと思っています

だからそもそもブロックスコープでexternするのってなんで? 覗き魔? って思ってしまう



647 名前:デフォルトの名無しさん mailto:sage [2021/09/21(火) 03:22:03.74 ID:rkkhSUpi0.net]
ブロックスコープ内でexternはK&R C時代の名残で今は完全に無意味

648 名前:デフォルトの名無しさん mailto:sage [2021/09/21(火) 03:23:48.34 ID:rkkhSUpi0.net]
関数原型でのexternは単項プラスみたいなもん
staticじゃないよと強調する反対語

649 名前:ハノン mailto:sage [2021/09/21(火) 03:36:19.96 ID:9i80hc760.net]
>>639
>ヘッダにextern int a;のように書いておいて、他のソースにはそれを#includeさせる
「他のソース」でないソースも、そのヘッダを #include しておけばダチェックにもなるし

650 名前:デフォルトの名無しさん mailto:sage [2021/09/21(火) 19:14:32.01 ID:8eqDWQ5I0.net]
>>639
ヘッダに実体がある糞コードで
でも直すなって言われて仕方なくexternすることはあった

651 名前:621 mailto:sage [2021/09/21(火) 22:41:16.78 ID:rS8f3YVDa.net]
// b.c
char a[] = { 0, 1 };

// a.c
int main()
{
__extern int *a;
__printf("%d\n", a[1]):
__return 0;
}

不勉強でした
上のコードは警告もなしにコンパイルが通りますね
実行すると segmentation fault ですが

リンク時はデータ型はチェックされず、名前だけで参照を解決してるのですかね……

古い仕様で、今さら変更はできないんでしょうね、チェックができたとしても

652 名前:デフォルトの名無しさん mailto:sage [2021/09/21(火) 22:46:25.12 ID:rkkhSUpi0.net]
型システムを持たずラベルの綴りのみを手がかりに参照解決するリンカを操るツールの1つだからねCは
リンカにあれもこれもと機能を持たせるのはメインフレームのファイルシステムにあれもこれも持たせようとしたVSAMの再来だ
インフラ的なものにアプリの都合を無闇に押しつけるべきではないことを歴史から学ぶべきだぞ

653 名前:はちみつ餃子 mailto:sage [2021/09/21(火) 23:19:06.05 ID:tYtQqya30.net]
C には「プロトタイプ (関数原型) を持たない関数宣言」があって、
関数の型が曖昧なまま関数が存在することだけを宣言できる。

プロトタイプ (プロトタイプ宣言) がある場合にはその関数を呼出すにあたって実引数と仮引数の間では代入と同じ規則
で (可能な場合には) 暗黙の型変換が適用されるが、プロトタイプがない場合には
既定の実引数拡張 (可変長引数に実引数を渡すときと同じ規則) が適用されて実引数と仮引数の辻褄が
あってないときは未定義という扱いになる。

更には C89 は暗黙の関数宣言という規則があって (C99 では廃止されている)
関数を呼出そうとした時点で関数が宣言されていない場合には実引数の型から一定の規則に基づいて
関数の型を推測し、関数が宣言されたかのように振る舞うことになっている。
なので関数宣言が存在しなくても二度以上の関数呼出しの型に矛盾があれば検出はされる。
もちろん関数定義の実体と辻褄があってなかったらそれは未定義だけど。

このあたりのクソみたいな規則は「C++ では採用しなかった仕様」として D&E でちょっと触れられてる。

654 名前:デフォルトの名無しさん mailto:sage [2021/09/21(火) 23:25:07.21 ID:rkkhSUpi0.net]
> 実引数の型から一定の規則に基づいて

655 名前:関数の型を推測し

func(1);

int func();

func("string");

int func();

こうなるだけで推測なんて気の利いたことはしないよ
[]
[ここ壊れてます]

656 名前:621 mailto:sage [2021/09/21(火) 23:27:49.11 ID:rS8f3YVDa.net]
プロトタイプ宣言は C++からの逆輸入だからな….
その昔の Cったら



657 名前:はちみつ餃子 mailto:sage [2021/09/21(火) 23:34:12.47 ID:tYtQqya30.net]
>>647
あ、ほんまやな。
仕様上のルールは「extern int func(); が書かれていたものとみなす」というだけで、
具体的なチェックをどこまでするかは処理系次第 (たぶんあまり真面目にやってなかったと思うけど) だな。

658 名前:デフォルトの名無しさん mailto:sage [2021/09/22(水) 05:28:22.60 ID:iWoXuoBc0.net]
>>648
> プロトタイプ宣言は C++からの逆輸入

そうなの?

659 名前:デフォルトの名無しさん [2021/09/22(水) 14:25:23.40 ID:Te29kBsr0.net]
どうだったっけなあ?

660 名前:はちみつ餃子 mailto:sage [2021/09/22(水) 14:32:16.52 ID:1hd+XsHu0.net]
The C programming language (いわゆる K&R 第一版) の
APPENDIX A 8.3 Declarators を見る限りでは
引数リストが空の形式しかないように見える。
関数であるということは宣言できるが型チェックはガバガバっぽい。

D&E の 2.6 静的タイプチェック の項では

> C with Classes のシンタクスとルールはその後 ANSI C の規格にも採用されたが
> C with Classes の最初の実装の時点ですでに完全な形をしていた。

という一文があるので C の型チェックは C++ (の前身である C with Classes)
からの影響ということで間違いないと思う。

661 名前:デフォルトの名無しさん [2021/09/22(水) 14:42:52.46 ID:KzVGjGnLF.net]
初耳だわ
はちみつは何歳?

662 名前:デフォルトの名無しさん mailto:sage [2021/09/22(水) 15:34:35.81 ID:p7uTNZa70.net]
47歳くらいだと思う

663 名前:ハノン mailto:sage [2021/09/22(水) 17:51:09.10 ID:z5uxQYPx0.net]
>>644
そのコード、仮に a.c で
extern int *a;
ではなくて
extern char *a;
であってもセグフォが出ると思います、試してませんけど‥‥

なにか二重に勘違いしてませんか?それとも私が二重に勘違いしているのか?

664 名前:はちみつ餃子 mailto:sage [2021/09/22(水) 18:02:31.76 ID:1hd+XsHu0.net]
>>655
配列として定義したものをポインタとして宣言するのは間違いだな。

665 名前:はちみつ餃子 mailto:sage [2021/09/22(水) 18:04:06.47 ID:1hd+XsHu0.net]
FAQ に書いてあったわ。
www.c-faq.com/aryptr/aryptr1.html

666 名前:デフォルトの名無しさん mailto:sage [2021/09/22(水) 18:35:41.60 ID:Il91zgnyM.net]
47歳
研究部門に所属
趣味は手芸



667 名前:621 mailto:sage [2021/09/22(水) 19:31:52.27 ID:u8cZI69ma.net]
>>655
ありがとうございます

はい、char と char でもダメですね
データ型がことなれば、リンケージできないのではと思い実験してみました

定義側でメモリに配置されているのは値で、extern宣言で参照する側が期待するのはポインタが配置されていることなのでうまくいきませんね(違うかな)

668 名前:621 mailto:sage [2021/09/22(水) 19:34:04.23 ID:u8cZI69ma.net]
>>656
こちらで先に指摘がありましたね

669 名前:デフォルトの名無しさん mailto:sage [2021/09/23(木) 08:15:49.41 ID:0q4HMCJB0.net]
>>638
変数に対しても型情報付加したマングリングするぐらいかねぇ?

670 名前:ハノン mailto:sage [2021/09/23(木) 10:00:32.79 ID:HaJtCNmP0.net]
>>661
アセンブラがリンクできなくなるからヤダ

671 名前:ハノン mailto:sage [2021/09/23(木) 10:02:57.46 ID:HaJtCNmP0.net]
>>657
thx a lot !
日本語訳は太古の昔から有名どころ、ただし C89 の話だったかも www.kouno.jp/home/c_faq/c6.html#0

672 名前:ハノン mailto:sage [2021/09/23(木) 13:38:03.01 ID:HaJtCNmP0.net]
>>658
ほとんどプロの人‥‥完璧なアマは私くらいですか

673 名前:はちみつ餃子 mailto:sage [2021/09/23(木) 16:56:05.29 ID:pKS1sRJG0.net]
COFF フォーマットを見てるんだが、
関数が返す値の型を格納するところは有っても引数の型

674 名前:ノついては無いみたいだ。
http://delorie.com/djgpp/doc/coff/symtab.html
ヘッダファイルで型情報をやりとりする前提なんだな。

ELF だとたぶん詳細な型も入れられそうな雰囲気があるんだけど複雑でようわからん……。
[]
[ここ壊れてます]

675 名前:デフォルトの名無しさん [2021/09/24(金) 19:26:12.39 ID:bEXGgTP60.net]
もしかしてc言語って新たにブロック文つくったら構造体の二重定義って可能になるんですか?
試しに
{
struct a{};
{
struct a{};
}
}
ってcompiler explorerで打ち込んだらcompile通りました。
こんなの初耳です。
ちなみに同じブロック文で二重定義したらcompile errorが起こりました。

676 名前:ハノン mailto:sage [2021/09/24(金) 20:31:56.55 ID:B0dAhYuN0.net]
>>659
今回の例でもわかるように、無節操にバンバン extern 宣言を複数の C ソースファイルのあちこちに混入させるのは非常にマズイので、
普通はサブモジュールの extern 宣言だけを別のファイルにまとめておいて、そのサブモジュールを使用するソースで #include するのが標準的です
この extern 宣言だけをまとめたファイルを特にヘッダファイルと呼びます
https://ideone.com/rdbae2
実体を定義したサブモジュールもヘッダを #include するようにしておけば、ヘッダの誤りも検出することができます

なにかこういう基本文法を終えた後に位置するべき基本的な作法集をまとめたアドバンス教科書、みたいなものはないものでしょうか?



677 名前:621 mailto:sage [2021/09/24(金) 20:48:31.47 ID:PKobCCv1a.net]
>>667
ありがとうございます
>>659 == >>621 です

621にもあるとおり、僕もこのような extern宣言を使用したことがありません
他に変数の宣言の例が思いつきませんでした…

678 名前:ハノン mailto:sage [2021/09/24(金) 20:54:31.27 ID:B0dAhYuN0.net]
>>666
使い道はわからないけれどもできるようですね‥‥無名構造体・異ネスト同一識別子で試してみました
https://ideone.com/eXiadC

679 名前:デフォルトの名無しさん [2021/09/24(金) 22:23:44.15 ID:bEXGgTP60.net]
>>669
レスありがとうございます
確認してみましたが
この例でなされてるのはdeclarator中の構文要素であるidentifierの例であって、>>666でなされているようなstructトークンとleft-braceトークンの間にあるidentifierを同じのを二度使っている例にはなっていないとおもいます。
僕は後者の仕様は、同じ変数名が複数ソース上にあるとき現在の位置から見て最も内側のブロックで宣言されたものの方で解決するという当たり前の規則だと認識してます
僕にとって謎だと感じるのは前者の仕様です。cの規格のどこからきているのか気になります

680 名前:デフォルトの名無しさん [2021/09/24(金) 22:25:13.81 ID:bEXGgTP60.net]
>>670
すみません。
このレスの前者は後者に、後者は前者に読み替えてください
間違えました

681 名前:ハノン mailto:sage [2021/09/25(土) 06:49:29.05 ID:YrZFQiAF0.net]
>>670
https://ideone.com/ORzF28

もう、結論はお出しになっているかと‥‥考えます
規格の話は苦手なのでごめんなさい

682 名前:デフォルトの名無しさん mailto:sage [2021/09/25(土) 11:02:06.77 ID:dAtBdpVF0.net]
>>670
> 同じ変数名が複数ソース上にあるとき現在の位置から見て最も内側のブロックで宣言されたものの方で解決するという当たり前の規則だと認識してます

その「当たり前」の規則は変数名に限ったものじゃくて構造体タグ名についても同じ規則が適用される。
www.open-std.org/jtc1/sc22/wg14/www/docs/n2596.pdf
6.2.1 Scopes of identifiers
> A label name is the only kind of identifier that has function scope. ...
>
> Every other identifier has scope determined by the placement of its declaration (in a declarator or
> type specifier). ...
> ...
> ... the scope of one entity (the inner scope) will end strictly before the scope of the other
> entity (the outer scope). Within the inner scope, the identifier designates the entity declared in the
> inner scope; the entity declared in the outer scope is hidden (and not visible) within the inner scope.

ただし変数名とタグ名とでは名前空間 (name space) が異なる。

683 名前:デフォルトの名無しさん [2021/09/25(土) 11:05:50.70 ID:lBxoEpbFF.net]
{
int a;
{
int a;
}
}
とやってることは同じ

684 名前:デフォルトの名無しさん mailto:sage [2021/09/25(土) 16:07:19.71 ID:Uwq7lnPV0.net]
>>666
二重定義じゃなくて、入れ子構造の中での定義にすぎないからでは?
イメージとしては、コンパイラとしては、外側の構造体は
struct XX_a {}
内側の構造体は
struct X_a_a{}
みたいな感じで管理してコード展開してるだけ。

685 名前:デフォルトの名無しさん [2021/09/25(土) 16:37:10.46 ID:g8iabg1P0.net]
>>673
出典出してくださってありがとうございます
declarator内かtype specifier内かどっちかで現れたかにも関わらず識別子には同じような規則が適用されるのですね
この知見を趣味のコンパイラづくりに役立てたいと思います
ありがとうございました

686 名前:デフォルトの名無しさん [2021/10/04(月) 14:36:02.21 ID:ly3pkK+7F.net]
int a = -4 % 3; // -1
int b = -3 % 3; // 0
int c = -2 % 3; // -2
int d = -1 % 3; // -1
int e = (-4) % 3; // -1
int f = (-3) % 3; // 0
int g = (-2) % 3; // -2
int h = (-1) % 3; // -1

これは仕様ですか?環境依存ですか?



687 名前:デフォルトの名無しさん mailto:sage [2021/10/04(月) 14:53:49.95 ID:DbNnxaRn0.net]
C90は実装による
C99は被除数と同じ符号 ((ISO/IEC 9899:1999) の 6.5.5 見ろ)ってwiki に書いてあったけど

6節の (a/b) * b + a % b === a と
整数化に際しての丸めの方向から結果的にそう解釈すればいいってことなのかな

688 名前:デフォルトの名無しさん mailto:sage [2021/10/06(水) 19:35:08.68 ID:7g8s0ol20.net]
まあ環境依存だと割と困ってたので
C99でIntelの実装にあわせただけなんですけどね

689 名前:はちみつ餃子 mailto:sage [2021/10/07(木) 15:44:53.27 ID:UkaMQ5gY0.net]
>>677-678
C89 で符号が確定して欲しいときには div 関数があるよ。
これの符号は C89 のときから C99 以降の / や % の挙動と同じ。

690 名前:デフォルトの名無しさん mailto:sage [2021/10/12(火) 19:07:27.42 ID:4loHRlApd.net]
配列から数個おきに取得するとき、なにかアルゴリズムとかライブラリ関数みたいなものってありませんか?
↓みたいなコードです。nが大きく、物凄い時間掛かっていて...

for(i=0; i<n; i++) a[i] = b[i*3];

691 名前:デフォルトの名無しさん mailto:sage [2021/10/12(火) 19:16:28.78 ID:bbG44xQB0.net]
boostとvalarrayによる方法がみつかった
https://stackoverflow.com/questions/8404822/create-a-subvector-from-regularly-spaced-elements-of-another-vector
https://en.cppreference.com/w/cpp/numeric/valarray/slice

692 名前:デフォルトの名無しさん mailto:sage [2021/10/12(火) 19:22:19.41 ID:xFkpIt2+0.net]
>nが大きく、物凄い時間掛かっていて..

オンメモリーで扱えていなさそう

693 名前:デフォルトの名無しさん mailto:sage [2021/10/12(火) 20:33:05.08 ID:1lOq7tfe0.net]
a書とb読で互いにページ追い出されてスラッシングみたいになってんのかねえ

694 名前:デフォルトの名無しさん mailto:sage [2021/10/12(火) 20:59:19.20 ID:UHyGo8Qe0.net]
それ、3個おきという意味?

695 名前:デフォルトの名無しさん mailto:sage [2021/10/12(火) 21:57:57.62 ID:TH86hbHp0.net]
皆様ありがとうございます、Cだとなかなか難しそうですね...
データは数百MBくらいの画像で、mallocで確保した領域にあります。

RGBRGBRGB・・・からRだけを取り出す、みたいな処理で、
頻出しそうだし何かうまい方法あるんじゃないかと思ったんですが。

696 名前:デフォルトの名無しさん mailto:sage [2021/10/13(水) 00:46:23.98 ID:5Y743A290.net]
>>686
ちょっと試してみた
a[] 100MB, b[] 300MB の配列確保して、
配列bを適当に初期化したあと
a[i] = b[i*3]; を実行してみた
それしかしていないが処理は1秒程度だった

64bit環境でメモリ16GB、i7 6700k skylake 4GHz
手持ちのコンパイラは Microsoft(R) 32-bit C/C++
Optimizing Compiler Version 16.00.40219.01 for 80x86

参考になるかな



697 名前:デフォルトの名無しさん mailto:sage [2021/10/13(水) 00:54:53.24 ID:MLaNN2iaa.net]
8ビット無駄になるけど、RGBを 32ビットの整数として、>> と & では?

698 名前:デフォルトの名無しさん mailto:sage [2021/10/13(水) 00:55:52.69 ID:MLaNN2iaa.net]
バイト境界より速いかも

699 名前:デフォルトの名無しさん mailto:sage [2021/10/13(水) 01:22:15.55 ID:l1MPihFP0.net]
単純な方法でもいうほど遅くなるわけない
最速を目指すならSIMDでやれ

700 名前:デフォルトの名無しさん mailto:sage [2021/10/13(水) 02:10:45.46 ID:5Y743A290.net]
>>686 の説明文で触れてない重たい処理があるのかもしれん

701 名前:デフォルトの名無しさん mailto:sage [2021/10/13(水) 12:24:48.28 ID:89OLuObV0.net]
ループ内で他の事をすると格段に遅くなったので(コンパイラの最適化の関係でしょうか?)
他の処理はすべて外に出して、書いた処理だけにしてる状況です。

ちょっとした実験に使いたいコードで、装置からの出力がだいたいGByte/sくらいなので、それに追い付く処理速度が理想なんですが...
並列化勉強しないと無理ですかね...

>>687
テストまでありがとうございます、こちらでもそれくらいのオーダーでした。
環境のせいではなさそうで安心しました。

702 名前:デフォルトの名無しさん mailto:sage [2021/10/13(水) 20:54:31.47 ID:B1aurOR80.net]
他の事したらキャッシュの効率落ちるわな
GByte/sってSATA3の速度超えてる
リアルタイムに加工するのはまだまだ無理なんじゃ

703 名前:デフォルトの名無しさん mailto:sage [2021/10/14(木) 07:22:07.33 ID:IjEclFwpd.net]
FPGAの出番だな

704 名前:デフォルトの名無しさん [2021/10/14(木) 08:48:28.90 ID:RLbfxynZM.net]
サイズが全然違って参考にならないかもしれないけど、以前テスト用の音声データのサンプリングレート落とす時に似たような事やった時は、a[i] b[j]でi++,j+=3みたいにやった方が早かった記憶。

705 名前:デフォルトの名無しさん [2021/10/14(木) 16:42:28.33 ID:1iGiane/0.net]
>>692
コード見てないからなんとも言えないけど、本当にそのループだけで1秒ってのは時間かかりすぎじゃないかな。
このコードでgcc 最適化オプションなしでも0.3秒、-O2なら0.000002秒。
5年くらい前のCore i7 3.3GHz メモリ16GB

勘違いしてないか心配だけどコード。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(){
int count = 100*1024*1024;

unsigned char *a = (unsigned char*)malloc(count * sizeof(unsigned char));
unsigned char *b = (unsigned char*)malloc(3 * count * sizeof(unsigned char));

clock_t t = clock();
for(int i = 0;i<count;i++){
a[i] = b[i*3];
}
t = clock() - t;
printf("%f\n",(double)t/CLOCKS_PER_SEC);
return 0;
}

706 名前:デフォルトの名無しさん mailto:sage [2021/10/14(木) 17:04:51.16 ID:LTwSvEh70.net]
>>687 だが、正確に測定したわけではない

>物凄い時間掛かっていて...

こういう質問だったので、そんなにかからないよという程度の返事
ものすごい時間が掛かると言う処理の内容が分からないとこれ以上は・・・



707 名前:デフォルトの名無しさん mailto:sage [2021/10/14(木) 18:27:12.03 ID:ciTZIm8Y6.net]
それは最適化で消えただけだ

708 名前:デフォルトの名無しさん [2021/10/14(木) 18:45:28.00 ID:1iGiane/0.net]
>>698
ですよねw -O2

709 名前:ナ0.18秒。 []
[ここ壊れてます]

710 名前:デフォルトの名無しさん mailto:sage [2021/10/14(木) 19:22:12.25 ID:B0s+ugv/0.net]
もしやコードとかアルゴリズムの話じゃなくて、ミリ秒単位を長いと感じるかどうかってことなのか

711 名前:デフォルトの名無しさん mailto:sage [2021/10/14(木) 20:39:33.49 ID:60mfbtKJM.net]
Gbps出したいんだから当然そうでしょ

712 名前:デフォルトの名無しさん mailto:sage [2021/10/14(木) 22:30:42.31 ID:oXMWcY6Na.net]
>>698
すでに書かれてたか

713 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 00:03:27.81 ID:XHojpqKh0.net]
>>699
volatileつけてM1macで-O0で0.25秒、-O2で0.05秒位だな。普通に間に合いそう。

714 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 01:46:57.39 ID:vumwfiEZa.net]
まったく自信がないのにチャチャ入れるようで申し訳ないのだけど、volatile を書く位置によっても結果がことなるかなと

おそらく a の * の左側に記述したのだと思うけど、動的に確保したメモリに対して有効なのかな…

誰か詳しい人いませんか?

715 名前:はちみつ餃子 mailto:sage [2021/10/15(金) 02:01:35.27 ID:2ebxtk1m0.net]
・ volatile で修飾された変数 (メモリ領域) は初期系にとって未知の方法で更新されうるというプログラマから処理系に対するヒント
・ (未知の方法で更新されていても) 言語仕様で定めるところの抽象計算機の動作に厳密に従わなければならない

という規則なので volatile の修飾先が変数 a であってもポインタ a が指す先であってもこの場合は結果的に最適化は抑制されると思う。

716 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 02:05:14.85 ID:vumwfiEZa.net]
ありがとうございます
おっしゃる通りのような気がします



717 名前:デフォルトの名無しさん [2021/10/15(金) 07:55:14.31 ID:Svg6ZUXsM.net]
>>686
画像だけならopenCVにsplitというのがあってrgb に分割された配列を返してくれるんだけど、後のレスから察するにどんどん流し込まれて来るみたいだからそのまま使えるかわからないです。
そのsplitではインデックスの計算にOpenCLを使っていますが、もちろん他の処理にも使えるから、ソース読んでみて損は無いと思います。

718 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 08:19:09.19 ID:WeKxZ2Hf0.net]
工夫するにしてもマルチスレッドで分割するぐらいしか思い浮かばん
領域を n分割し nスレッドパラに走らせて複製

719 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 09:12:03.80 ID:+uEUiKf90.net]
>>705-706
volatile の修飾先によってどこの最適化が抑制されるかが異なるので結果も異なるだろう。

720 名前:デフォルトの名無しさん [2021/10/15(金) 09:44:49.60 ID:FX8yed990.net]
すみません、マジの初心者で申し訳ないんですけど、
今サンプルコードを写したりしながら勉強しているんですが、
毎回#includeとかint main(void)とかって書かなくて済む方法
ってありますか?
visual studio 2019を使ってます。
良ければ誰か教えてください。

721 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 09:58:43.65 ID:5/Pqp5xeM.net]
今後数千行、数万行のプログラムを書いていくことになるんで、int mainを自動入力させたいなんて気持ちはそのうち自動的に消えるので安心してください

722 名前:デフォルトの名無しさん [2021/10/15(金) 10:13:57.88 ID:Sjupi756F.net]
>>710
https://ideone.com
https://codepad.org

723 名前:デフォルトの名無しさん [2021/10/15(金) 10:23:34.05 ID:FX8yed990.net]
>>712

ありがとうございます!
元々それらを使っていたのですが、今使っているサンプルコードが書かれている本が
コマンドプロンプトで実行することを想定して作られているのか、
よく途中でscanfを使って入力の読み取りをするのですが、オンライン上だとそれができないのです。
visual studio 2019で、テンプレを自分で作っておいてそれを
読み込むような技があれば教えてほしいです。

724 名前:デフォルトの名無しさん [2021/10/15(金) 10:53:31.08 ID:FX8yed990.net]
自力で調べて解決できました。
ありがとうございました。

725 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 12:55:13.67 ID:/xIATXuH0.net]
どういたしまして。 お役に立ててなによりです。

726 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 13:51:30.67 ID:0CjYy/Ai0.net]
C言語初学者です
for文を使って1からnまでの総和を求め、
さらに答えを例えばn==3なら
1+2+3=6と表示したいのですが、この表示の仕方がわかりません
ご教授お願い致します



727 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 14:26:17.75 ID:W6fuAKpz0.net]
int i.n,x;
n=3;
x=0;
for(i=1;i<=n;i++){
x+=i;
printf("%d",i);
if(i!=n)printf("+");
}
printf("=%d¥r¥n",x);

728 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 14:38:37.10 ID:0CjYy/Ai0.net]
>>717
できました
ありがとうございます!

729 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 16:54:36.35 ID:r+1DV466M.net]
>>717
最終行の ¥r って要るの?

730 名前:はちみつ餃子 mailto:sage [2021/10/16(土) 17:51:52.16 ID:E+4r+lYs0.net]
>>719
基本的には不要。
 ・ 改行を表すものは (C の規格の範囲内では) 文字であるかのように扱う
 ・ テキストモードでの入出力ではホスト環境の都合に合わせて変換してよい
ということになっていて、改行を2バイトの符号で扱うホスト環境では \n という一文字を
その2バイトに変換するのは入出力関数の仕事。

ただし、標準出力をバイナリモードで開き直している場合だとか、
改行を1バイトの符号で表すホスト環境で2バイトの符号で表す環境のために出力したい
といった事情で改行を \r\n と書くことが無いとは言い切れない。

731 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 22:25:40.97 ID:0CjYy/Ai0.net]
質問です
入力された文字列と文字数を表示するプログラムで
Enterキーのみが入力されるまでループして入力要求をするようにしたいのですが
1〜4文字の入力はループするのですが5文字入力するとループが終わってしまいます
どうなおせばいいでしょうか?
よろしくお願いします
/*************************************/
#include <stdio.h>
#include <string.h>
int main(void){
char str[] = "Hello";
fgets(str,sizeof(str),stdin);
while (str[0] !='\n'){
if (str[0] != '\n'){
printf("文字列%s\n",str);
printf("文字数%d\n",strlen(str));
fgets(str,sizeof(str),stdin);
}else{
break;
}
}
}
/*************************************/

732 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 22:28:04.06 ID:j08Y/8ma0.net]
よく出来たクイズですね

733 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 22:33:18.38 ID:N8k1BZc20.net]
AOJかなんかですか

734 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 22:39:04.82 ID:j08Y/8ma0.net]
>>721
>1〜4文字の入力はループするのですが5文字入力するとループが終わってしまいます

設問として、何文字までの入力を受け付けるようにし、
それを越える文字数入力された場合はどうすると指示されてます?

735 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 22:43:54.01 ID:0CjYy/Ai0.net]
>>724
言葉足らずですいません
5文字までの入力で6文字以上の入力は考慮しないとなっています
>>723
大学の課題です

736 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 22:50:23.50 ID:j08Y/8ma0.net]
>>725
5文字までの入力を保証するには、配列サイズがたりません
入力最後のエンターキーまで含めるなら、7文字は必要じゃ無いかな?



737 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 22:59:47.56 ID:g8LyFw1O0.net]
・str配列を大きくする
・fgetsした結果のstrに改行文字が含まれてない場合は次の改行文字までstdinを読み飛ばす


738 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 23:00:22.34 ID:0CjYy/Ai0.net]
>>726
配列の箱増やしたらループするようになりました
ありがとうございます
あと1つ問題が残っていて文字列表示のあとに改行が無駄に1つ入ってしまいます
どうにかできないでしょうか?
現状
abcde
です
したい表示
abcdeです

739 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 23:00:54.46 ID:iHqDmbcU0.net]
>char str[] = "Hello";
とにかくここが気持ち悪い・・・

740 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 23:02:15.17 ID:j08Y/8ma0.net]
>>728
入力の最後に改行がある前提で表示を行うか、
文字列最後に改行がある場合は切り詰めるか、
どちらかで処理すると良いです

741 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 23:02:51.64 ID:hXa8blxW0.net]
>>729
それは別に普通では?

742 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 23:08:52.93 ID:j08Y/8ma0.net]
>>728
切り詰め方はこんな感じで

 if (str[strlen(str) - 1] == '\n')
  str[strlen(str) - 1] = 0;

↑全角空白は適当に置き換えて

743 名前:デフォルトの名無しさん [2021/10/16(土) 23:13:30.42 ID:D7GMWgGE0.net]
Hello!って!付ければいいよ。元気が足りない。
さらにこれfgetsの動作の理解を問う良問なんだから、無駄な改行なんぞ気にする余裕があるならfretsのドキュメント読んだ方がいいぞ。

744 名前:デフォルトの名無しさん [2021/10/16(土) 23:14:42.85 ID:D7GMWgGE0.net]
>>733
偉そうに言ってスペルミスですね。fgets です

745 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 23:26:16.40 ID:0CjYy/Ai0.net]
>>732
ご親切にありがとうございます!
>>730頂いてから調べててまたわからないことが増えたーって思っていたところでした笑
上の問題は無事解決しました
ありがとうございます

>>729
スマートな初期化方法があれば教えて欲しいです

746 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 23:27:52.08 ID:0CjYy/Ai0.net]
>>733
正しく書き直せた場合の実行結果に改行が入ってなかったので気になりました汗



747 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 00:24:13.17 ID:IGrhvydt0.net]
>スマートな初期化方法があれば教えて欲しいです
バッファサイズをちゃんと決めておくぐらいか?
ギリギリのサイズじゃなく余裕をもって(最大文字数+1(終端NULL)かつ32bitOSなら4バイト、64bitOSなら8バイト単位とか)。
定義後すぐにfgetsに渡すなら初期化も要らないと思うけど、念のためにやるなら
char str[8]="";

char str[8]={0};
かな。

748 名前:デフォルトの名無しさん [2021/10/17(日) 06:25:57.65 ID:atjZW8su0.net]
>>731
そうやって初期化した str[] の内容を後で書き換えるのは普通ではないと思う。
可能だが気を付けてないとバグの元になりそうだしね。

似たようなのに char *p = "hoge"; があるが、これはコンパイラによっては文字列をリードオンリーになるようにコード作って *p = 'A'; なんて後でやるとOSがプログラム停止させたりする。
しかしCの文法としては間違いではないのでコンパイルエラーにならない。

749 名前:ハノン mailto:sage [2021/10/17(日) 07:57:57.94 ID:iZHfLY3SH.net]
>>721
>char str[] = "Hello";

>>738
> str[] の内容を後で書き換えるのは普通ではないと思う。

私は「配列であるかぎり」それを後から書き換えるのは、初期化方法に関係なく文脈・表現として違和感なしと感じます

750 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 08:24:02.20 ID:steRrM330.net]
大文字→小文字への変換等の文字列長変わらない題材は
str[] で初期化しそうだわ

751 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 21:22:20.52 ID:YXxqNhTYM.net]
初期化のときだけ [] をキッチリポインタと区別するc の仕様がちょっと気持ち悪い
って感じかな

752 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 21:57:04.28 ID:8CkFjl5X0.net]
[] は記憶域の確保
ポインタは記憶域の操作

753 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 07:29:22.77 ID:SjUVJOBmd.net]
externや二次元配列でも区別しとるじゃろうが
元々違うものを区別されたからちゅうてガタガタぬかすなや
同じと思いたがるのが間違っとるんじや

754 名前:デフォルトの名無しさん [2021/10/18(月) 16:00:11.31 ID:r9t2S6+pF.net]
char **hoge;
char *hage[];
好き嫌いが判れるな

755 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 16:05:46.60 ID:3P96aY7G0.net]
ウンコとカレーは別のものです

756 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 19:51:04.60 ID:g0y5TC1t0.net]
そもそも初期化の*と演算子の*だって違うものだからな……



757 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 20:04:38.45 ID:o7eKMY2r0.net]
関数の引数のary[]はポインタだって言ったじゃないですか

758 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 20:18:11.14 ID:SjUVJOBmd.net]
ついでに頓珍漢

759 名前:デフォルトの名無しさん [2021/10/19(火) 07:28:30.98 ID:KQylMF0MM.net]
>>738
終端文字忘れてるからじゃないの?

760 名前:デフォルトの名無しさん [2021/10/19(火) 08:18:32.37 ID:KQylMF0MM.net]
>>749
char *pか、勘違いすみません。

761 名前:デフォルトの名無しさん [2021/10/20(水) 09:23:25.20 ID:OEiI06HQa.net]
すごい勘違いレス

762 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 18:53:19.81 ID:X+tmlWS+d.net]
if ((ss == 0) || (ss == 5) || (ss == 10) || (ss == 15) || (ss ==20) || (ss == 25) || (ss == 30) || (ss == 35) || (ss == 40) || (ss == 45) || (ss == 50) || (ss == 55)) {
hogehoge();
}
だいぶん無駄な書き方だと思いました
一桁の値が0が5の時に実行したいです
アドバイスお願いします

763 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 18:59:09.50 ID:2b7An4Iy0.net]
ss%5==0

764 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 19:00:41.26 ID:X+tmlWS+d.net]
>>752
int ss;
int sss = ss / 10;
if ((sss == 0) || (sss == 5)) {
hogehoge();
}

自己レス
こうですかね

765 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 19:01:44.45 ID:X+tmlWS+d.net]
>>753
どうもありがとうございました

766 名前:デフォルトの名無しさん [2021/10/20(水) 19:41:14.72 ID:+2OzLQ7p0.net]
>>754
節子それ余りやない。ssss=ss-sss*10とかやらんと。

組み込みマイコンだと/,%なしで頑張る縛りプレーもあるで。自分がよくやるのは対応する値域を限定して、
掛け算と >> による割り算で計算する。それより難しいの頭がついてこん。



767 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 20:06:00.50 ID:X+tmlWS+d.net]
>>756
どうもありがとうございます

>>754って書いたけど
>>753が端的だったのでこれが楽ちんだと思って754は見直してませんでした
Arduinoで時計作りたくて触ってるところです

768 名前:デフォルトの名無しさん [2021/10/20(水) 20:19:57.63 ID:+2OzLQ7p0.net]
>>757
ArduinoってUnoあたりは弱いマイコンなのにadafruitのサンプルとか浮動小数点演算してたり感覚おかしくなる。
1秒ごとの処理なら、1秒ごとにカウンタ増やして5になったら何かするって処理でもいいと思う。
使ってるマイコンが除算回路持ってるかは調べといたほうがいい。32bitマイコンでも割り算は省略されたり。
まぁ動きゃいいので効率や速度も捨てるのも、それが能動的な選択なら構わないとは思う。

ちなArduinoのスケッチは、古めのC++だったりするので、たまCで見慣れん文法が出て来る。

769 名前:デフォルトの名無しさん mailto:sage [2021/10/21(木) 11:57:16.85 ID:F1Ma0oSBM.net]
if(++ss &5 && ss+=11) {....}
minutes=(ss &5)+ss/16*5;

770 名前:デフォルトの名無しさん mailto:sage [2021/10/21(木) 11:59:08.14 ID:F1Ma0oSBM.net]
minutes=(ss & 7)+ss/16*5;

771 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 14:51:19.29 ID:xwM6FSoTd.net]
>>759
難しそうで理解できないです><

>>758
mmが2, 7, 12, 17, 22, 27, 32, 37, 42, 47, 52, 57の時に実行したい

int mm;
if (mm = 2) || (mm = 7) || (mm = 12) 略 {
hoge();
}

こう言った場合はカウンター使うんでしょうか?

772 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 14:54:54.89 ID:xwM6FSoTd.net]
>>761
mmが上の条件でなおかつmmがpmmとは異なりssが0のときに動かしたいです

773 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 14:57:33.61 ID:xwM6FSoTd.net]
>>753 これを応用して、mmから2を引いて5で割り切れたときですかね

774 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 15:05:16.53 ID:1X6Ns9Hp0.net]
witch (mm) {
case 2: case 7: case 12: case 17:
case 22: case 27: case 32: case 37:
case 42: case 47: case 52: case 57:
  hoge(); break;
default: break;
}

775 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 15:12:34.58 ID:1X6Ns9Hp0.net]
頭のsが落ちてた><

776 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 15:57:50.32 ID:xwM6FSoTd.net]
>>764
switchの存在忘れてました
ありがとうございます
やってみます



777 名前:デフォルトの名無しさん [2021/10/22(金) 17:17:41.96 ID:ZQZyZs9H0.net]
if( (mm>1) &&
(mm<58 ) &&
!( (mm-2)%5) ) {.....}
かな?

778 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 17:38:23.94 ID:gkJZOHn00.net]
((mm-2) % 5) == 0
!((mm-2) % 5)
(mm % 5) == 2

ふむ。 なやましい

779 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 18:24:39.18 ID:xwM6FSoTd.net]
>>768
ありがとうございます
3つ目ですかねー

780 名前:デフォルトの名無しさん [2021/10/24(日) 23:50:25.11 ID:P21IrDZK0.net]
今から数年前はc言語マスターっていうコテハンがいたような覚えがあるんだけど今は見る影もなくなっちゃったな
今でも覗いているのかな
いなくなったらいなくなったで寂しいもんだ

781 名前:デフォルトの名無しさん [2021/10/24(日) 23:54:50.86 ID:P21IrDZK0.net]
あと片山博文って奴もいたがあいつはtwitterで元気にやってるね
すっかりtwitterのit畑に馴染んでいる

782 名前:デフォルトの名無しさん [2021/10/25(月) 10:50:24.50 ID:vmRZrQEpF.net]
ここは人減り杉たな

783 名前:無し mailto:無し [2021/10/25(月) 22:34:33.20 ID:tqAHcDS70.net]
#include<stdio.h>

void main(void){

puts("Hello world.");
}

Cの基礎。

784 名前:はちみつ餃子 mailto:sage [2021/10/25(月) 22:51:17.12 ID:dRHq7DJG0.net]
>>773
mian の返却値を void にすんなよ。

785 名前:デフォルトの名無しさん mailto:sage [2021/10/25(月) 23:12:03.34 ID:0vce0GaV0.net]
どこでも出口

exit(EXIT_SUCCESS);

786 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 01:39:39.55 ID:M1juxUvT0.net]
人が減ってる?
それじゃ俺も参加するか
よっこらC(セックス)



787 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 01:46:13.55 ID:l3iKjiOk0.net]
「初めてのC」ってタイトル見たとき、ちょっとドキドキしたw

788 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 02:22:35.07 ID:LRGmoAXR0.net]
みぁ〜ん

789 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 05:48:52.32 ID:M1juxUvT0.net]
みぁ〜ん

790 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 06:52:29.03 ID:ch+2e+/f0.net]
>>774
異常な執念で噛みつくやついるよな
void mainに親でも殺されたのかって感じ

791 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 11:35:56.09 ID:l3iKjiOk0.net]
トイレ使ったら水を流すだろ

792 名前:デフォルトの名無しさん [2021/10/26(火) 11:41:12.20 ID:4NkYNYny0.net]
ふんばっても何も出なかったからそのまま出てきたわ。

793 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 17:15:10.74 ID:rbEPHvg70.net]
なぜC言語は「言語」までつけて呼ぶのでしょうか
PASCAL言語とかFORTRAN言語とかPython言語とかいう言い方は聞いたことがないので気になりました
一文字で語呂が良くないから?

794 名前:デフォルトの名無しさん [2021/10/26(火) 17:16:53.12 ID:iznG3/8mr.net]
音節が一つだけだからでしょ
goと一緒

795 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 17:19:02.10 ID:rbEPHvg70.net]
>>784
仮に「F」なんていう言語があったとしたら、それには「言語」は付けないのが自然なんですかね

796 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 17:24:23.61 ID:FOkaXEb/d.net]
俺は日常Cと言ってる



797 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 17:30:07.02 ID:TdYowdfsM.net]
OとP以外存在しとるが
https://sites.google.com/site/sappariwiki/a2z-languages

798 名前:デフォルトの名無しさん [2021/10/26(火) 17:43:08.10 ID:iznG3/8mr.net]
>>785
fって一音節でしょ?
馬鹿なの?

799 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 17:50:47.85 ID:JgL6RS+zM.net]
またまたご冗談を

800 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 18:07:04.47 ID:rbEPHvg70.net]
>>788
馬鹿なんでしょうね

801 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 18:10:28.34 ID:LRGmoAXR0.net]
アルファベット一文字なら言語ってつける
Goだけなんか例外的なだけで

802 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 18:13:16.33 ID:rbEPHvg70.net]
>>791
これって日本特有なんですかね

803 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 18:19:10.90 ID:l/KP9TR6M.net]
普通に短すぎる識別子の弊害だろ
言語付けとけば>>777のレスは無かった

804 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 19:33:22.81 ID:M1juxUvT0.net]
日本語ではC言語で検索しやすくなるが外国はどうしてんだ?
C lang とかで検索してるのかな?

805 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 19:47:06.75 ID:FOkaXEb/d.net]
英語圏でもC languageとは言うね

806 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 21:52:27.56 ID:ucHGO5Lk0.net]
アセンブリ言語って自分的には違和感ないけど業界的にはどうなの?



807 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 21:56:53.26 ID:ch+2e+/f0.net]
普通だね
アセンブラ言語でもどっちでも
しょせんカタカナだし
ドヤるとバカっぽいから放置

808 名前:デフォルトの名無しさん [2021/10/30(土) 00:17:48.25 ID:0q4JizrL0.net]
もう英字一文字の言語は飽和状態だからこれからは平仮名一文字とか漢字一文字の言語名にした方が良いな。

809 名前:デフォルトの名無しさん [2021/10/30(土) 00:23:08.83 ID:0q4JizrL0.net]
ʗ言語

810 名前:デフォルトの名無しさん mailto:sage [2021/10/30(土) 08:25:14.25 ID:HlbDM8n/0.net]
ツー言語 (゚∀゚)

811 名前:デフォルトの名無しさん mailto:sage [2021/10/30(土) 11:53:47.66 ID:A30JUN42d.net]
>>784
日本語(外来語含む)の音韻は音節ではなくモーラ(=拍。俳句の数え方)で数えるべきで、
C(しい)もGo(ごお)も2モーラ
>>785>>788
F(えふ)も同じく2モーラ

まあ、別に2モーラ以下なら「言語」を付けるという規則性もなさそうだけどね
Java(じゃば)やLua(るあ)も2モーラだし

812 名前:デフォルトの名無しさん [2021/10/30(土) 17:29:52.20 ID:0q4JizrL0.net]
私意言語

813 名前:デフォルトの名無しさん [2021/10/30(土) 18:01:56.38 ID:zJlZfWf60.net]
>>801
普通英語で検索するよね?
c languageとかgolangとか

814 名前:デフォルトの名無しさん [2021/10/30(土) 18:03:58.48 ID:zJlZfWf60.net]
luaって調べたら月の画像が出てきてめちゃくちゃ怖いぞ

815 名前:デフォルトの名無しさん mailto:sage [2021/10/30(土) 19:36:45.48 ID:d9y/i02Wr.net]
月が怖いってサテライトキャノンでも撃たれたのか?

816 名前:デフォルトの名無しさん [2021/10/30(土) 19:51:07.93 ID:lpthGY+1a.net]
月を怖がる人ってたまにいるけど
前世とか今世で悪いことでもしたんかね



817 名前:デフォルトの名無しさん [2021/10/30(土) 20:22:41.40 ID:zJlZfWf60.net]
天体の画像が怖い

818 名前:ハノン mailto:sage [2021/10/30(土) 20:27:03.94 ID:nIglmucmH.net]
>>806
欧米では、月の光は人を基地外にする、とかいうそうですよ
確か狼男も満月だったっけ、いや、それは送り狼だったっけ?

819 名前:デフォルトの名無しさん mailto:sage [2021/10/30(土) 20:59:50.65 ID:f9Pytl6VM.net]
お仕置きでもされたのかな

820 名前:デフォルトの名無しさん [2021/10/30(土) 21:01:00.69 ID:zJlZfWf60.net]
天体恐怖症なんやワイ
木星とか海王星とか怖い

821 名前:デフォルトの名無しさん mailto:sage [2021/10/30(土) 22:33:29.21 ID:d9y/i02Wr.net]
地球は恐くないん?

822 名前:デフォルトの名無しさん mailto:sage [2021/10/30(土) 23:11:54.45 ID:w/6Ssgd00.net]
裏側にいる事に気がつくと、落ちてしまうそうだ

823 名前:デフォルトの名無しさん [2021/10/30(土) 23:41:41.51 ID:zJlZfWf60.net]
>>811
地球も太陽も怖いです
あと小惑星も怖い
あと月の裏側もマジでこわい

824 名前:デフォルトの名無しさん [2021/10/30(土) 23:42:05.22 ID:zJlZfWf60.net]
火星の衛星とかも怖いです
歪な形してるやつ

825 名前:デフォルトの名無しさん [2021/10/30(土) 23:43:09.25 ID:zJlZfWf60.net]
冥王星の最新画像見たけどめちゃくちゃ怖くて直視できなかった

826 名前:デフォルトの名無しさん mailto:sage [2021/10/31(日) 09:06:05.96 ID:eEOPPlKd0.net]
アロコスなんかカワイイ形してんじゃん



827 名前:デフォルトの名無しさん [2021/10/31(日) 11:07:20.50 ID:dKAtRzTxa.net]
乙py
乙py

828 名前:デフォルトの名無しさん [2021/10/31(日) 11:30:55.69 ID:dKAtRzTxa.net]
>>814
https://www.youtube.com/watch?v=bEwWCXxaVR4

829 名前:デフォルトの名無しさん [2021/10/31(日) 11:33:04.24 ID:xmsO/hLH0.net]
>>818
グロ

830 名前:デフォルトの名無しさん mailto:sage [2021/10/31(日) 11:46:46.80 ID:TjuXDVeD0.net]
NHK-BSプレミアム『グレートネイチャー』の宣伝臭が鼻につくくらいで
扱っている題材は台湾の自然、どこがグロなんだ?

831 名前:デフォルトの名無しさん [2021/10/31(日) 14:17:04.25 ID:xmsO/hLH0.net]
>>820
地球の中心コアへの旅っていう関連動画がグロい

832 名前:デフォルトの名無しさん [2021/11/01(月) 0 ]
[ここ壊れてます]

833 名前:3:55:44.21 ID:6HuVbq6K0.net mailto: 饅頭怖い []
[ここ壊れてます]

834 名前:デフォルトの名無しさん [2021/11/01(月) 11:25:10.37 ID:/Zy4WfCe0.net]
lu分解をc言語でやりたく、次のようなコード(1部分になります)を書いたのですが、y0の値が0.8になるはずなのに全く違うものとなってしまいます。原因が全くわからないのですが、どこを改良すればよいのでしょうか。

for(int n = 1; n <= M+1; n++){
t = n*dt;

for(int i = 0; i <= N; i++){
x[i] = 0.0;
}

/* Ax = uを解く */
/* Ly = u */
y[0] = u[0]/l[0][0];
for (int i = 1; i <= N; i++){
y[i] = (u[i] - l[1][i]*y[i-1])/l[0][i];
}

/* Ux = y */
x[N] = y[N];
for (int i = N-1; i >= 0; i--){
x[i] = y[i] - m[i]*y[i+1];
}

/* 更新 */
for(int i = 0; i <= N; i++){
u[i] = x[i];
}
}

835 名前:デフォルトの名無しさん [2021/11/01(月) 12:00:24.14 ID:z/x9VzKbF.net]
int → double または float

836 名前:デフォルトの名無しさん mailto:sage [2021/11/01(月) 13:05:24.25 ID:qmVDupeY0.net]
x, y, l, m, u の宣言で添え字のとりえる範囲分はちゃんと確保してる?

(lu分解として正しいかどうかはおいといて)ループのコードから
x 0..N まで → 最低限 double x[N+1];
y 0..N まで → 最低限 double y[N+1];
u 0..N まで → 最低限 double m[N+1];
m 0..N-1 まで → 最低限 double m[N];
l [0][0]..[1][N] まで → 最低限 double l[2][N+1];



837 名前:デフォルトの名無しさん [2021/11/01(月) 15:07:15.16 ID:/Zy4WfCe0.net]
最初に宣言して確保してるので、大丈夫だと思うんですが、、
いちおうx,y,l,m,uをそれぞれ出力してみたのですが、yだけ間違えた値になってしまいます。
ループの順番とかがおかしいんですかね?

838 名前:デフォルトの名無しさん [2021/11/01(月) 19:03:15.19 ID:6HuVbq6K0.net]
全ての変数の宣言を書け

839 名前:デフォルトの名無しさん mailto:sage [2021/11/01(月) 20:58:39.67 ID:6+jC3RjR0.net]
最小限再現できるコードを書いてもらわんと指摘することはできんねぇ
(そして最小限再現にシェイプアップする過程でやらかしを見つける)

840 名前:デフォルトの名無しさん [2021/11/02(火) 07:44:51.26 ID:I7k+rE/i0.net]
>lu分解
java版?なら見つかった。
ttps://qiita.com/edo_m18/items/1d67532bed4a083cddb3

841 名前:デフォルトの名無しさん [2021/11/02(火) 10:38:39.23 ID:px0qcy1yF.net]
>>821
どこがプログロマー?
https://www.youtube.com/watch?v=SsB8VfxgZwQ

842 名前:デフォルトの名無しさん mailto:sage [2021/11/03(水) 06:47:18.51 ID:biZn6gZT0.net]
小学生の頃から知ってたことばかりでウルトラつまんねえ番組だ

843 名前:デフォルトの名無しさん [2021/11/07(日) 10:08:30.22 ID:gNBrcBZD0.net]
サイコパスゲイ病人菊永裕太郎

844 名前:デフォルトの名無しさん mailto:sage [2021/11/08(月) 14:05:50.44 ID:QzkUvy+x0.net]
>>823
https://www.youtube.com/watch?v=Wdy1Y-fbAII
https://www.youtube.com/watch?v=KYPiqtitEl8

845 名前:デフォルトの名無しさん mailto:sage [2021/11/13(土) 19:10:26.04 ID:EXpCOp4b0.net]
int main() {
return 0;
}

いきなりこれの意味がわかりません。解説によるとゼロを返して正常終了する。
とかなんとかなんですが、どういう意味でしょうか。
オンライン上にゼロの意味の解説が見つかりません。

846 名前:デフォルトの名無しさん mailto:sage [2021/11/13(土) 19:43:45.28 ID:Q3rklS0i0.net]
大抵の解説では「OSに返す値」となってる。

プログラムが正常終了したら 0。
異常終了や目的の処理が出来なかったときには0以外を返すのが慣例。

Linuxならシェルで echo $?
Windowsならコマンドプロンプト/バッチファイルで echo %ERRORLEVEL%
で確認できる・・・らしい。

0以外を受け取ったからとOSが何か特別な処理をするわけではない。



847 名前:デフォルトの名無しさん [2021/11/13(土) 19:53:04.62 ID:NDPTYcvp0.net]
>>834
エラーで終了するときは0以外で帰しておくと
数年後の未来の自分を助けることができるぞ!

848 名前:デフォルトの名無しさん mailto:sage [2021/11/13(土) 20:53:19.24 ID:pG0a2gxf0.net]
この段階では
0をかえす
そして
正常終了する
ぐらいの認識でいいんじゃないの?

別にどんな整数を返しても正常終了するわけだし

849 名前:はちみつ餃子 mailto:sage [2021/11/13(土) 20:56:10.46 ID:FTD0k+Bx0.net]
>>834-835
厳密にいえば、言語仕様上では

・ 0 又は EXIT_SUCCESS の場合は成功終了であることを処理系定義の方法で返す
・ EXIT_FAILURE の場合は失敗終了であることを処理系定義の方法で返す
・ それら意外の場合には返される状態は処理系定義とする

という規則になっている。
どのように解釈されるかは言語仕様の側でははっきりとは決めずにホスト環境 (普通は OS のこと) や処理系の都合次第なので、
言語よりは OS の資料にあたるほうがわかりやすいかもしれない。
言語仕様として確実に保証してるのは少なくとも成功したのか失敗したのかだけは返せる (受け取るかどうかは知らんけど) ってだけだね。

POSIX (Unix 系 OS) では exit status と呼んでるけど、
Windows では error level とか exit code と言ってる。

850 名前:デフォルトの名無しさん mailto:sage [2021/11/13(土) 22:33:17.66 ID:uR+eQ86NH.net]
単独で使う場合は関係ないけど
シェルとかバッチファイルから呼び出す場合にエラーや望まない結果だったら処理を中断とかしたい場合に
ちゃんと値を返しておくと便利になる

851 名前:デフォルトの名無しさん mailto:sage [2021/11/13(土) 22:42:47.32 ID:J/2HuwPl0.net]
パイプ使うときはどう利用すればいい?

852 名前:デフォルトの名無しさん mailto:sage [2021/11/13(土) 22:51:27.93 ID:TY5ABTi00.net]
棒を挟むんだよ

853 名前:ハノン mailto:sage [2021/11/13(土) 22:53:39.30 ID:DyUYxUU00.net]
>>839
呼び出したプログラムが返してくる値を使うプログラムとしては make がありますね…

854 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 09:01:01.66 ID:TENET21t0.net]
>>834
補足として、CのAPIにも失敗時に0を割り当てる場合と、成功時に0を割り当てる場合がある。
エラーの要因なんかを意識したい体系では後者も普通に使われるが、同じコード内で前者と
混在せざえるをえない事もある。マクロなんかを使った記述を意識しないとハマるぞw

855 名前:ハノン mailto:sage [2021/11/14(日) 09:49:57.54 ID:5CSGBVhH0.net]
>>840
fork して dup2 を使います

856 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 13:25:42.20 ID:EUNDgDvQ0.net]
>>843
・E_OKで成功、それ以外でエラー
・0以上で成功、負でエラー
・常に成功
・void
・なんかのポインタで成功、NULLでエラー

無理やり分類したらこんな感じ?



857 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 13:59:30.15 ID:E00roTgyF.net]
>>834-835
個人的には
int main()
で引数無い状況ならOSのことは想定してないんだろうから
void main()
で良いだろって思う
組み込みとか

858 名前:ハノン mailto:sage [2021/11/14(日) 14:07:31.05 ID:5CSGBVhH0.net]
>>846
リンクされるスタートアップが返り値の存在を前提にしているというのに、main() ごときが返り値の有無を指定するなんて傲慢じゃないですかぁぁぁぁ!

859 名前:はちみつ餃子 mailto:sage [2021/11/14(日) 15:32:15.51 ID:A4GQ1/1N0.net]
main の型を変則的にするくらいなら main をエントリーポイントにしない
(エントリーポイントの関数を別の名前にする) ほうが好ましいと個人的には思う。
言語仕様の外 (処理系定義) で定義された方法を使おうとしていることがわかりやすいので。

860 名前:デフォルトの名無しさん mailto:sage [2021/11/15(月) 08:57:20.76 ID:ELwWgVHxd.net]
>>846
俺もそう思う

861 名前:デフォルトの名無しさん mailto:sage [2021/11/15(月) 08:59:15.64 ID:ELwWgVHxd.net]
実行開始点は◯◯関数とドキュメントのどこに書こうか悩まずに済むならそうしたい

862 名前:834 mailto:sage [2021/11/15(月) 18:18:16.98 ID:oeHKaDHh0.net]
ただの慣例なんですね、ご回答ありがとうございました。

863 名前:デフォルトの名無しさん mailto:sage [2021/11/15(月) 19:21:59.60 ID:BFf+frEV0.net]
C言語初心者です。sleepを使って一文字ずつ
2秒ごとに表示したいのですが
Windowsの端末だとうまくいくのですが、
Ubuntuだと8秒後にまとめてHelloと一度に
表示されてしまいます。ubuntuでも
windowsのように一文字ずつ表示させたいのですが
できないのでしょうか?コンパイラはGCCです。

#include <stdio.h>
#include <unistd.h>

int main (){

printf("H");
sleep(2);
printf("e");
sleep(2);
printf("l");
sleep(2);
printf("l");
sleep(2);
printf("o\n");

return 0;
}

864 名前:ハノン mailto:sage [2021/11/15(月) 19:27:49.92 ID:a976/UsH0.net]
>>852
printf('A'); fflush(stdout); はいかが?

865 名前:デフォルトの名無しさん mailto:sage [2021/11/15(月) 19:28:12.24 ID:Xr7xQZWT0.net]
printfとsleepの間に↓
fflush(stdout);

866 名前:デフォルトの名無しさん mailto:sage [2021/11/15(月) 19:45:10.08 ID:BFf+frEV0.net]
>>853
>>854

ありがとうございます。うまくいきました。
fflushの使い方調べてみます。



867 名前:はちみつ餃子 mailto:sage [2021/11/15(月) 23:18:43.35 ID:LEZCO+bp0.net]
>>852
どちらの挙動も言語仕様的にはアリ。
ストリームが対話型装置を参照していると判定できて、かつその場合に限り完全バッファリングすることになっていて、
逆に言えば対話型装置 (この場合はコンソール) に繋がっているときはラインバッファリングかもしれないし、
バッファリング無しかもしれない。

フラッシュを明示的に指示するのでもよいが、 setvbuf 関数でバッファリングをしないように設定することもできる。

868 名前:はちみつ餃子 mailto:sage [2021/11/15(月) 23:20:10.09 ID:LEZCO+bp0.net]
>>856
書き間違えた。

対話型装置を参照していると判定

対話型装置を参照していないと判定

869 名前:デフォルトの名無しさん mailto:sage [2021/11/15(月) 23:52:40.37 ID:9q/xF8xE0.net]
低レベルの出力関数使ってバッファリングを回避してみる、とか

870 名前:デフォルトの名無しさん [2021/11/16(火) 21:41:05.99 ID:vUDwceGd0.net]
lintの無い事い今更気付いたのだが、代替何?

871 名前:デフォルトの名無しさん mailto:sage [2021/11/16(火) 23:22:15.69 ID:hcv5mNbC0.net]
>>859
clion

872 名前:デフォルトの名無しさん [2021/11/17(水) 02:29:57.06 ID:+JwFzM8Ra.net]
>>851
int main(){
int a=0;
return a;
}

void main(){
int a=0;
}
をそれぞれ asm 付きでコンパイルして比較してみ
判ったら次は a=0; を inline にしてみ

873 名前:デフォルトの名無しさん mailto:sage [2021/11/17(水) 16:44:53.52 ID:802yK0wSK.net]
>>859
splint

874 名前:はちみつ餃子 mailto:sage [2021/11/17(水) 17:37:06.80 ID:R6z6I7690.net]
>>859
コンパイラが細かくチェックするようになったから lint の出番がなくなった。

gcc や clang なら -fsyntax-only オプションを付けると文法のチェックまでで段階を止める。
必要な警告オプションを付けた上でこれを使えば古い時代の lint より厳しいくらいだと思う。
(ちなみに -Wall や -Wextra を付けても全ての警告が有効になるわけではない。)

875 名前:ハノン mailto:sage [2021/11/17(水) 19:11:13.17 ID:Kdlo9yNJ0.net]
>>863
>(ちなみに -Wall や -Wextra を付けても全ての警告が有効になるわけではない。)
私は -W -Wall で妥協します

876 名前:デフォルトの名無しさん mailto:sage [2021/11/17(水) 20:49:44.01 ID:U3uLHNTwd.net]
最近のコンパイラはミスタイプすると
「contが見つかりません、もしかしてcountのことですか?」みたいなことまで言ってくるもんなあ
グーグルかよ



877 名前:ハノン mailto:sage [2021/11/18(木) 00:26:37.80 ID:MiW85JEr0.net]
>>865
そこは読まない…

878 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 00:32:41.46 ID:HOoxCKRv0.net]
入門サイトで勉強しててこんな感じのコードがエラーになって
{
int a = 100;
printf("数値:%d アドレス:%x", a, &a);
}
gccのエラーをコピペで検索すると、&aはポインタだから、アドレス:%pだと回答がヒット。
コンパイラやバージョンによって挙動が違うのでしょうか?

879 名前:はちみつ餃子 mailto:sage [2021/11/18(木) 00:55:33.69 ID:ku1GvVZm0.net]
>>867
言語仕様で未規定や処理系定義としている場合があって、
そういうのは処理系や実行環境の都合に合わせて決めていいことになってる。
そして「未定義」とされている場合は何が起こってもいいことになってるので、
暴走するかもしれないし、 OS が止めてくれるかもしれないし、しれっと意味不明の結果を出力するかもしれない。
たぶんそれは未定義に該当すると思う。

C の可変長引数は型チェックをゆるゆるにすることで実現されていて、
処理系の内実をわかってる人は言語仕様上の保証がない (けど実態としては問題がない) コードを書くのは普通にある。
パソコンで一般的に使われている呼び出し規約 (関数を呼出す機械語レベルの挙動の規則) だと
ポインタと (レジスタの幅以下の大きさの) 整数は同じ方法で渡すので問題にならないんだけど、
言語仕様では保証がない。

可変長引数の型チェックはゆるゆるなんだけど printf は頻出するからコンパイラが特別扱いで
少しチェックを厳しくしているのでエラーになることもあったりする。

まあ基本的には保証されてないのでやらないほうがいいよ。

880 名前:867 mailto:sage [2021/11/18(木) 01:52:34.49 ID:HOoxCKRv0.net]
>>868
詳しい説明ありがとうございます。
実際にターミナルに出力されたのはerrorではなくwarningで、試したらそのままでも実行できていました。
用心しながら学習続けていこうと思います。

881 名前:はちみつ餃子 mailto:sage [2021/11/18(木) 02:23:30.05 ID:ku1GvVZm0.net]
逆に完全に言語仕様に沿っていても警告になる場合もあるし、
(基本的には警告が出ないようなコードのほうが綺麗ではあるが)
言語仕様的に OK なのか NG なのか、
とりあえず自分の実行環境で OK なのか NG なのかを正確に把握するのはかなり分かり難いと思う。

882 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 02:53:45.75 ID:SHW/gJRC0.net]
>>867
まず、エラーと警告の違いを
次に、エラーとill-formedの違いを
憶えよう

883 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 10:38:56.92 ID:7kNuqccRd.net]
0から100までの整数のうち、17の倍数となる数の合計を求め、かつ途中の加算処理を出力するプログラムをつくったのですが、うまくいきません。

884 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 10:39:42.31 ID:7kNuqccRd.net]
うまくいかないのは過程を出力する処理の過程なのですが、どうしたらよいですか。

コードは以下です。

#include <stdio.h>

int main()
{
int i,sum=0;

for(i=17; i<=100; i=i+17) {
sum=sum+i;
printf("途中計算→%d\n", sum);
}
printf("合計=%d\n",sum);

return 0;
}

885 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 10:49:25.32 ID:SHW/gJRC0.net]
ダッサいループ書いてないで公式立てたら?

886 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 11:10:34.71 ID:R1PabgqQ0.net]
>>873
「17の倍数」とは「17で割った余りが0」のこと
Cで割った余りを計算する演算子は「%」



887 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 11:14:20.02 ID:SHW/gJRC0.net]
17から開始で17ずつ増やしてるだろ
0は17の倍数じゃないそうだが

888 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 11:32:07.83 ID:RYwZiL190.net]
>>873
何がどううまく行かないの?あってそうに見えるけど

889 名前:デフォルトの名無しさん [2021/11/18(木) 14:40:44.78 ID:/He/baLSF.net]
>>869
昔のソース(コンパイラ)は %x で通るのが多い
今から勉強するなら %p の方が良いし新しい教科書使った方が良い

890 名前:デフォルトの名無しさん [2021/11/18(木) 14:45:21.17 ID:/He/baLSF.net]
>>873
printf("途中計算→%d, %d, %d\n", i / 17, i, sum);

891 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 14:45:34.58 ID:/He/baLSF.net]
>>823
https://gitlab.com/libeigen/eigen/-/blob/master/Eigen/src/LU/PartialPivLU.h
https://gitlab.com/libeigen/eigen/-/blob/master/Eigen/src/LU/FullPivLU.h

892 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 18:35:31.06 ID:CfNf7HSld.net]
>>867
伝統的にポインタはintと同じメモリサイズなので昔はそう書いてた

そうなんだよな最近のコンパイラはprintfのフォーマットと引数をチェックしてるんだよな
もう慣れたが最初不思議な気がした
組み込みだと自分でprintf関数作ったり(標準だと使わない機能が多くて重すぎるから)するけどそんな時はどうなるのだろうとか

893 名前:デフォルトの名無しさん [2021/11/19(金) 00:07:30.77 ID:tkL53aTR0.net]
>>872
( ´_ゝ`)フーン

894 名前:デフォルトの名無しさん [2021/11/19(金) 00:11:12.00 ID:tkL53aTR0.net]
>>873
それでいいのでは?

895 名前:はちみつ餃子 mailto:sage [2021/11/19(金) 00:18:54.40 ID:bln5kEpJ0.net]
64 ビット環境では LP64 や LLP64 (int とポインタの大きさが違う) が標準的になってしまったから
古いコードをそのまま持ってきたら通らないってことは割とよくあるよね。

896 名前:デフォルトの名無しさん mailto:sage [2021/11/19(金) 00:37:21.78 ID:tkL53aTR0.net]
long と int (及び char *)を全て32bitとして扱っていて、辛うじてコンパイルは通るが決してまともに動かない
プログラムがあったので、しょうがないから gcc の -m32 と32bit用ライブラリで何とかした。何せ量が膨大で、
人力で直してたら多分何人か死んでたと思う。



897 名前:デフォルトの名無しさん mailto:sage [2021/11/19(金) 05:44:49.46 ID:6rl9yCzd0.net]
俺が出向いた、とあるクライアントでは人海戦術してた

898 名前:デフォルトの名無しさん [2021/11/19(金) 10:15:17.36 ID:eyeX0xyMF.net]
long が int に追い越されたのかと思った

899 名前:ハノン mailto:sage [2021/11/20(土) 20:09:18.64 ID:NniTuIFb0.net]
>>884-886
far near 修飾があたりまえな世界から来た私にとっては、なんで今更なことしているの?と疑問におもっていました

900 名前:デフォルトの名無しさん mailto:sage [2021/11/20(土) 20:11:58.21 ID:LAgO+4EW0.net]
そういえばhageモデルなんてあったな

901 名前:ハノン mailto:sage [2021/11/20(土) 21:32:53.52 ID:NniTuIFb0.net]
>>889
hage モデル、もとい huge モデルにはバグがある、とのもっぱらの噂でしたが実際どうだったんでしょうか…

902 名前:デフォルトの名無しさん mailto:sage [2021/11/20(土) 22:42:01.83 ID:PPXRLNML0.net]
ていうか、8086のHugeみたいなものはバグ作り込んでしまいそうで怖いよな。ポインタ絡みで。
違う値が同じアドレスになる事あるし。

903 名前:デフォルトの名無しさん mailto:sage [2021/11/20(土) 22:45:40.83 ID:LAgO+4EW0.net]
当時300kを越える配列を処理したくて使いました
使うというか、複数のセグメントに分割して割り当て、
自前で配列インデックスを計算してアクセスしただけですが

904 名前:はちみつ餃子 mailto:sage [2021/11/21(日) 00:46:36.95 ID:mkw0m2hl0.net]
違う場所が同じ値になるような場合があっても言語仕様が保証している範囲ではちゃんと仕様通りだったりするんだよな。
というより保証が可能な範囲をうまいこと言語仕様にまとめたって感じなんだと思う。

905 名前:デフォルトの名無しさん mailto:sage [2021/11/21(日) 08:41:13.51 ID:uokK0Aao0.net]
>>888
Windowsが64bit主流になっていく頃にも一騒動あったよ

906 名前:ハノン mailto:sage [2021/11/21(日) 12:42:55.44 ID:ODZrEgDk0.net]
>>891
さらに年寄りの繰言を続けますが、

>違う値が同じアドレスになる事あるし。

というのは far ポインタでも同じです、far と hage じゃなかった huge の違いは、オフセットの繰り上がりがセグメントに反映されるかされないか
私は余計なことはしてほしくないので、繰り上がりがない far を愛用していました、huge はいまいち信用できませんでした



907 名前:ハノン mailto:sage [2021/11/21(日) 12:44:00.07 ID:ODZrEgDk0.net]
>>894
それ、今のことなのでは?>>884-886

908 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 02:11:41.33 ID:AqcF5lvQ0.net]
構造体のパディングの値って未規定ですか?

909 名前:ハノン mailto:sage [2021/12/01(水) 02:24:50.55 ID:VU8XmWVx0.net]
>>897
パディングの状況に依存するコードを書くのはよろしくない、というのが一般論だったかと
ファイル入出力で問題になりますが、私はもう、ちまちま fwrite() fread() で「1 byte ずつ」やるしかない、とまで諦めています
環境がバッファリングしてくれますし

910 名前:はちみつ餃子 mailto:sage [2021/12/01(水) 02:53:05.18 ID:Y6HO3vrm0.net]
未規定であるしパディングの大きさに依存するようなコードは避けるのが行儀のよいコードであるのは間違いないけど、
対象にしている処理系での挙動がはっきりしていて移植の可能性もない (または移植のコストをかける覚悟がある)
のなら依存するコードを書くことはそれなりにあると思う。

マクロで切り分けて configure (とか cmake とかのメタビルドツール) で各アーキテクチャの都合に対処することは可能だし。

良くはない。 良くはないがそういう良くないことも出来るのが C ってもんなわけで。

911 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 11:58:37.67 ID:Jc7L6V7f0.net]
昔、構造体の扱いで失敗した事がある
あるサイトで構造体を引数にして削除処理を行う関数を提供されたが、
実際に使おうとすると引数エラーを返されてしまい途方に暮れた
構造体メンバーには仕様書通りに必要な値をセットしている

しばらくして原因が分かった
関数側は引数が正しくセットされているかを、
処理対象の領域に格納されている同一の構造体と比較しチェックしていた
その比較に memcmp を使っていた
呼び出すこちら側は、構造体を自動変数として領域確保していた

912 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 19:41:43.68 ID:Dt37aX+70.net]
構造体の比較をmemcmpでやるの本当にバッドプラクティスだと思うわ
横着せずに比較関数作れと

913 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 20:37:38.80 ID:sYF3bwwtM.net]
横着したくなるというか識別子増やすの躊躇させる言語仕様が招く面倒ね
メンバメソッド系はオブ臭く棲み分けに反し今更入れる必要ないと思うけど
一層にぶち撒かず妥当なルールでツール類で拾いやすいサポートネームスペース括りみたいなのがあれば

void bossy(struct *a);
bool bossy.supporter(struct const*a);

914 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 03:58:26.91 ID:boATToTk0.net]
素直にC++使っとけ

915 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 15:46:31.22 ID:nsbZ2n490.net]
若者のc言語離れ

916 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 15:56:03.63 ID:NxRkNBX1d.net]
バブルの頃に努力?修練?ぎやはははだっせー
と言ってたのが結局、日本の致命傷になっちまったな
それを今まだ言ってる堀江みたいなぶっ飛んだキチガイもいるし
どーすんだこれ



917 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 16:51:51.31 ID:BMPRSKoA0.net]
>>905
何の話?
日本は米国植民地なので戦後から終わってますよ…

918 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 18:59:50.96 ID:boATToTk0.net]
植民地支配がどんなに恐ろしいことか知らないようだな
朝鮮半島に先進国並みのインフラを作ったり
狭い島国に世界最大のメガロポリスができるのと
フィリピンのバナナ農家が受けている仕打ちの違いわかる?

919 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 19:37:18.40 ID:+Bf3UEhm0.net]
君はここに来なくて良いから、その代わりに
半島に行って自慢して感謝されてこいよ

920 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 19:51:25.65 ID:boATToTk0.net]
わかるかなぁ、わかんねぇだろうなぁ

921 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 21:23:20.96 ID:bRKtguKwM.net]
c++のネームスペースさんはadl とかテンプレート混じりでsfiane とか
使うつもりがなくても簡単に誤爆する罠のせいで妥当な実装ではないね

922 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 21:28:04.80 ID:BMPRSKoA0.net]
>>909
アングロサクソンのやることはえぐいですね…
でも半島の話はやめたほうがいいですよ、むしろ台湾の話をしたほうがいい(親中派だったら無理かもね)

923 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 21:44:47.29 ID:boATToTk0.net]
>>910
うわー 整然と整列された弾薬を蹴飛ばして地雷原と言っちゃう手合いか

924 名前:mikuRTX mailto:sage [2021/12/03(金) 20:20:27.18 ID:JS/BWVJ20.net BE:871585708-2BP(0)]
https://img.5ch.net/ico/2-1.gif
c言語でGUIの作り方教えて

925 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 21:09:10.77 ID:qejwogbL0.net]
>>913
www.kumei.ne.jp/c_lang/index_sdk.html

926 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 22:17:35.13 ID:4DnkKvZO0.net]
>>914
WIndowsAPIはC言語で使うのが正解でC++では使わないっというのを別スレで見たんですが、そうなの?



927 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 22:43:36.48 ID:qIm8KpH10.net]
C++でも使う事は出来るが、普通はクラスライブラリを使う
最初はMFCだったかな
>>914のサンプルを試したあと、
C++とクラスライブラリ使って同じ事をやってみると良いカモ

928 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 23:01:33.51 ID:4DnkKvZO0.net]
サンクス

929 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 00:32:09.23 ID:d5QmhWSv0.net]
>>915
補足すると自前でC++を使ってやる方法も win16 初期には見られたが、
https://www.aamazon.co.jp/dp/4774100544/
結局みんな MFC ばかり使うようになりました、もうひとつのメーカー製の OWL ですら滅びたようです
MFC の使い方の本は私は持っていない…

930 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 00:34:51.25 ID:d5QmhWSv0.net]
>>913
wisdom.sakura.ne.jp/system/winapi/win32/index.html

931 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 00:37:46.81 ID:eEY2XAtO0.net]
使い方って言うほどの高度の内容ではないかも
ドキュメント的にはMSのサイトが本家だし詳しいかも
確かサンプルも載せてたはず

https://docs.microsoft.com/ja-jp/cpp/mfc/documents-views-and-the-framework?view=msvc-170

この辺から入っていくのかな?無事生還を祈る

932 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 00:39:25.21 ID:eEY2XAtO0.net]
https://docs.microsoft.com/ja-jp/cpp/mfc/mfc-desktop-applications?view=msvc-170

済まん、こっちが入り口か

933 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 01:16:03.60 ID:eEY2XAtO0.net]
C++の、さらなる深みに入りたいなら、こちらのスレの方が良いかも知れない

Microsoft Foundation Classライブラリ専用スレ
https://mevius.5ch.net/test/read.cgi/tech/1474384848/

Visual Studio 2022
https://mevius.5ch.net/test/read.cgi/tech/1634166667/

C++相談室 part158
https://mevius.5ch.net/test/read.cgi/tech/1636969758/

934 名前:デフォルトの名無しさん [2021/12/04(土) 03:50:46.66 ID:2dOPVhNC0.net]
>>913
https://xjman.dsl.gr.jp/X11R6/X11/

935 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 03:52:50.38 ID:2dOPVhNC0.net]
>>913
https://developer.android.com/ndk?hl=ja

936 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 03:57:24.10 ID:2dOPVhNC0.net]
>>913
https://dixq.net/forum/viewtopic.php?t=10480



937 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 04:06:08.86 ID:2dOPVhNC0.net]
>>913
https://teratail.com/questions/43672

938 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 05:37:11.06 ID:FSuqUkr60.net]
MFCはWin32 GDIの極薄すけすけのラッパーだ
俺なんかMFCから憶えてそこから多くを知った

939 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 10:14:46.95 ID:h5ysN7XFa.net]
WinUIとかもいいけど、MFCに代わるちゃんとしたCなGUIライブラリを用意して欲しかったわ

940 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 11:19:54.80 ID:7g1ihlkq0.net]
winuiはイケてないの?

941 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 19:24:30.40 ID:d5QmhWSv0.net]
>>927
では win16 時代の本
https://www.amazon.co.jp/gp/product/4774100501/
でも何かしら得るものがあるってことですね、最近ちょっと元気が出てきたから買おうかな、やすいし

942 名前:mikuRTX mailto:sage [2021/12/05(日) 00:01:56.83 ID:AUNWU2UB0.net BE:871585708-2BP(0)]
https://img.5ch.net/ico/2-1.gif
913です。
みんなありがとう!!

943 名前:デフォルトの名無しさん [2021/12/05(日) 02:12:34.65 ID:NlN9zBro0.net]
>>930
本が100円でも送料が300円以上だったりするので、古本は要注意。
メルカリで送料込みで安いやつ探した方が良いかも知れない。
(但し、300円以下はあまりない。理由は自分で出品してみると分かる)

944 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 04:30:24.51 ID:VQoGm9OLd.net]
47氏こと金子氏はMFCでWinnyを作ったんだな

945 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 15:55:33.73 ID:HAXCanWR0.net]
>>933
winny2 は BCC/OWL だったと聞いた気がします

946 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 16:50:16.47 ID:VQoGm9OLd.net]
RIP



947 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 18:32:01.15 ID:HAXCanWR0.net]
>>932
ありがとうございます!

948 名前:デフォルトの名無しさん mailto:sage [2021/12/07(火) 05:13:43.34 ID:WxNsBn2X0.net]
>>934
金子氏の書籍より、VC++ から C++Builder に GUI の変更を目的に変えた、との記述を見つけました
Borland C++ Builder 4.0, および 5.0 であれば OWL5.0 をサポートしていますが、VCL の可能性のほうが高いですね

949 名前:デフォルトの名無しさん mailto:sega [2021/12/08(水) 16:27:00.62 ID:iGfgkXA80.net]
Windows上で編集してLinux上でコンパイルしたいんだけど
そういうのに適したIDEでお前らが使ってるおすすめを教えて

950 名前:デフォルトの名無しさん mailto:sage [2021/12/08(水) 18:39:45.04 ID:RLv6UJuP0.net]
>>938
vscode

951 名前:デフォルトの名無しさん mailto:sage [2021/12/08(水) 18:59:09.17 ID:GPDURn2W0.net]
Ruby on Rails では、WSL2, Linux, Docker, VSCode(Remote Container, Remote WSL)など、
本物のLinux(CUI)で開発できる。
MSYS2/MinGW みたいなWindows でコンパイルした、日本語でバグるものを使う必要もない

Dockerを使わずに、日本人が作った、バージョンマネージャーのanyenv で、
rbenv, nodenv, pyenv など、多言語を統一的に扱う事もできる

組み込み用mruby の本には、Virtualbox, Vagrant を使う。
WSLはサポートしないと書いてあるけど、WSLでも使えるかも?

Webで使えるmrubyシステムプログラミング入門、近藤宇智朗、2020/11

宇宙開発などの組み込み用、MicroPython, Lua, Squirrel の代替になる。
Ubuntu 18.04, C99 対応

人工衛星イザナギ・イザナミで、使っている

952 名前:デフォルトの名無しさん [2021/12/08(水) 20:28:27.76 ID:pzF9gjPk0.net]
>>940
キヤノンが打ち上げた光学衛星が夜間撮影に成功したそうです。
夜間撮影が出来るとなると、もはや立派なスパイ衛星。
何を撮影しましょう。

953 名前:デフォルトの名無しさん [2021/12/09(木) 11:14:02.01 ID:89810ylo0.net]
実用的なところで夜間に移動する北のミサイル発射トラック追尾。

個人的希望でgoogleカーの追尾。

954 名前:デフォルトの名無しさん mailto:sage [2021/12/09(木) 13:22:59.56 ID:avfziXHId.net]
頭頂部が日に日に薄くなっていくような気がするから
その辺のチェックを毎日やってほしい

955 名前:デフォルトの名無しさん mailto:sage [2021/12/09(木) 13:26:11.16 ID:NPIqJHRg0.net]
>Linux上でコンパイルしたい

Linuxのシェル上でコンパイルしたいという意味?
それともGCCを使いたいという意味?

956 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 02:07:06.32 ID:Uh57IFJZ0.net]
そう言えば以前 Windows で動く IDE で Linux で動くプログラムの編集をしてそのまま
リモートで Linux 側でコンパイルして更にリモートでデバッグまでできれば良いなと
思ったが、どうやらそれができるものはなさそうなので諦めて Linux 上で IDE を動かした。

まあでもクロス開発というか、リモートデバッグというか、そういうのが出来ると便利だよな。



957 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 09:42:22.14 ID:bMtT4XMq0.net]
>>944
Linuxにインストールしてあるgccでコンパイルしたい
ビルドボタン押したらssh経由でmakeできたら素敵だが

使ってるgccのバージョンがちょっとどころじゃなく古いので
できればMinGW gccとかじゃなくて現物のgcc使いたい感じ

958 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 11:35:51.37 ID:vRQI3bYg0.net]
上でも書いたけど vs code ではダメなの?
ターゲットが WSL、コンテナ、ssh 接続関係なく
Win 環境から編集、コンパイル、デバッグ一通りなんでもできるよ。

959 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 14:06:37.92 ID:bMtT4XMq0.net]
そこまでおっしゃるのなら、試してさしあげてもよろしくってよ?

960 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 15:29:28.42 ID:IPFkCC9z0.net]
歯ね

961 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 18:11:12.39 ID:7gXx5u630.net]
羽?

962 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 18:59:12.87 ID:wbbsNkrV0.net]
教えて差し上げて

963 名前:デフォルトの名無しさん [2021/12/11(土) 03:38:45.47 ID:LF8J+dNV0.net]
>>945 を昨日書いたが、さっきこんなの見つけた。有料だけどな。

JetBrains、リモート開発機能と軽量IDE「Fleet」を発表
https://japan.zdnet.com/article/35180131/

964 名前:940 mailto:sage [2021/12/11(土) 13:26:00.16 ID:iDGs+tOs0.net]
漏れは、Ruby on Rails, WSL2, Ubuntu 18.04 で、
Web Socket など、Railsで使う各モジュールがネイティブコンパイルされるけど、

build-essential とか入れておけば、
Rails のインストール時に、勝手にコンパイルされる

build-essential には、
gcc(GNU C compiler), g++(GNU C++ compiler), libc6-dev(GNU C Library), make などが入っています

パッケージ: build-essential
https://packages.ubuntu.com/ja/bionic/build-essential

43.0 MB のアーカイブを取得して、165 MB のディスク容量が使われます

965 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 22:36:35.78 ID:KvUnFidtd.net]
VS2022に昔のプログラム持ってったら
isspace()とかに80h以上の文字入れると例外になるけど
いいのかこれ
テーブルで処理してて80h以上は負だからテーブル外になるって理由はわかるんだけどさあ
昔のはなんとかうまくやってた気がするんだけど

966 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 01:29:13.77 ID:xqkchTt80.net]
>>954 それ char で負の値を渡してるんじゃね?



967 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 01:30:08.80 ID:xqkchTt80.net]
>>954 この話ね https://www.jpcert.or.jp/sc-rules/c-str37-c.html

968 名前:ハノン mailto:sage [2021/12/12(日) 06:11:48.38 ID:i1KpRZU20.net]
>>954
int isspace(int c)
ですよ、ちゃんと int の正の数で渡してます?char をまんま渡してたらまずいっすよ

>>956
「unsigned char にキャストして、暗黙の型変換(プロモーション)に頼る」ってかなりアクロバットに見えますね

969 名前:はちみつ餃子 mailto:sage [2021/12/12(日) 11:16:13.91 ID:553p9mhC0.net]
char が符号付か符号無しかは処理系定義で、
符号無しであるような処理系では char が int に拡張されたときに負数になることはない。
(考慮する必要はない。)

C にはそういう処理系定義とか未規定とか未定義がもりだくさんなので
ある処理系の定義では未定義を踏まずに済むプログラムでも
別の処理系では (処理系定義のコンボで結果的に) 未定義に引っかかることはよくある。

C のプログラムで完全に処理系定義や未規定を避けるというのは困難な話だし、
(可能なら環境依存を避けるように意識するのは良い作法ではあるけど)
違う環境に持ってきたらその程度の修正は必要なものだと思って諦めるしかしょうがない。

970 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 11:27:28.68 ID:0XY4m15b0.net]
未規定を避ける必要はない
未規定のブレ幅以内に収まるように書いてあるプログラムは適格
そうでないプログラムは不適格で未定義の動作となるだけだ

971 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 17:20:11.74 ID:lpH8MLUG0.net]
未規定と、明示的な未定義は違うのか?

972 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 17:33:46.14 ID:0XY4m15b0.net]
違う。

たとえば
int f1(), f2();
int a = f1() - f2();
のようなことをしているとき、
f1とf2の評価順序は未規定
f1とf2の評価順序によりaに入る値が変動する場合は未定義の動作だ

973 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 17:44:58.99 ID:Qvw+czy00.net]
未規定って処理系毎に好きに実装して良いんでしたっけ?

974 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 17:55:44.75 ID:YDRHEr6M0.net]
処理系が好きに実装してよいし, ひとつの処理系の中で一貫している必要も, ドキュメントに明記する必要もない

975 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 17:58:06.91 ID:Qvw+czy00.net]
未定義動作だと、最悪SEGVでも良いようなオイ

976 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 17:59:00.60 ID:YDRHEr6M0.net]
SEGVはマシな方なんですが



977 名前:はちみつ餃子 mailto:sage [2021/12/12(日) 18:09:59.00 ID:553p9mhC0.net]
>>962
未規定な動作を含むプログラムは正しい。
あり得る動作の内のどれかにはなる。

未定義はどんな保証もない。
未定義の挙動を含むプログラムはプログラム全体がどんな動作をするかわからん。
全然関係ないと思う箇所でわけわからん動作になることもあるし、
未定義を踏んでる箇所より前に問題が表れることもないとはいえない。

>>963
処理系定義は「未規定の動作のうち,各処理系が選択した動作を文書化するもの。」ということになっている。
つまり処理系定義は未規定の一種という扱い。

978 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 18:12:53.56 ID:aAJ0FK40M.net]
>>962
処理系どころか同じソースでもコンパイル毎に変えることすら許される

979 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 19:00:18.24 ID:xqkchTt80.net]
>>961
> f1とf2の評価順序によりaに入る値が変動する場合は未定義の動作だ
これは嘘じゃね?

980 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 23:13:30.38 ID:VXD697/Q0.net]
>>968
いやあってる
演算子の結合規則・優先順位は、あくまでも複数の演算子があったときにどの演算子を先に処理するか、に過ぎない
オペランドを二つ持つ演算子一つに限れば、どっちのオペランドを先に評価するかは処理系依存だったと思う
これは関数の引数についても同じ

981 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 23:20:10.63 ID:xqkchTt80.net]
>>969
だれも結合優先度の話はしてないと思う。

> f1とf2の評価順序は未規定
これについては未規定で異論は無いんだよ。
> f1とf2の評価順序によりaに入る値が変動する場合は未定義の動作だ
でも、こっちは嘘じゃね?という話。そんな規定文面確認できない。

982 名前:デフォルトの名無しさん mailto:sage [2021/12/13(月) 00:34:13.21 ID:0Z9P9uJp0.net]
C17Draftのpp.65 6.5 1では?

> If a side effect on a scalar object is unsequenced relative to either a different side effect on the same scalar object or a value computation using the value of the same scalar object, the behavior is undefined.
> If there are multiple allowable orderings of the subexpressions of an expression, the behavior is undefined if such an unsequenced side effect occurs in any of the orderings.

983 名前:デフォルトの名無しさん mailto:sage [2021/12/13(月) 01:22:45.02 ID:aR9zk0xx0.net]
>>971
複数の関数呼び出し先にある評価同士、あるいは呼び出し元と呼び出し先にある評価同士は
indeterminately sequenced となり、 unsequenced にはならない。
6.5.2.2 Function calls p10
> ... Every evaluation in the calling function (including other function calls)
> that is not otherwise specifically sequenced before or after the execution of the body of the called
> function is indeterminately sequenced with respect to the execution of the called function. 96)
...
> 96) In other words, function executions do not “interleave” with each other.

>961 の f1, f2 は関数なので、 f1() - f2() の結果が未規定だからといって未定義動作にはならない。

984 名前:デフォルトの名無しさん mailto:sage [2021/12/13(月) 02:53:30.01 ID:0Z9P9uJp0.net]
>>972
OK, 関数呼び出しを噛ませたことで評価順序が未規定ではなく不定(一方が他方の後(先)であることは保証される)になるので, 呼出先関数で副作用があっても(結果は未規定だが)未定義動作ではない, と
確かによくある a = i++ + ++i; みたいな例が適切だったか

985 名前:デフォルトの名無しさん mailto:sage [2021/12/13(月) 03:50:46.86 ID:aR9zk0xx0.net]
>>973
あともう1点念のため。
その例 a = i++ + ++i は未定義動作になる例として適切なんだけど、未定義動作になる理由は >971 の規定であって、
>961 の「評価順序によりaに入る値が変動する場合」というような理由じゃない。
例えば a = (i = 0) + (i = 0) は、どっちの i = 0 を先に評価しても a に入る値は 0 で変動しないけど、未定義動作となる。

986 名前:デフォルトの名無しさん [2021/12/14(火) 17:26:28.72 ID:LP8Fmqr90.net]
自作ライブラリのヘッダと標準関数のヘッダの読み込み順って
なにか決まりごとはあるの?

#include "jisaku.h"
#include <stdio.h>
ってやってたらキモイって言われたんだけど、これなんかおかしいか?

インクルードガード利いてるし順番なんてどうでもいいだろ っていうか
だったら自作のヘッダが先に来るべきだろ って思うんだけど



987 名前:はちみつ餃子 mailto:sage [2021/12/14(火) 18:00:24.76 ID:+JRF3Q+g0.net]
>>975
たとえば assert.h を #include する前にマクロ NDEBUG が定義されていると assert が無効になるといったように
動作の切り替えをするマクロというものが存在する。
標準ではそういうマクロは下線で始まる名前になってることが多いから自分のコードの中の名前がたまたま衝突するということは
そうそうないんだけど、各処理系やライブラリに固有の切り替え用マクロが雑な短い名前だったら意図せず影響を与えるかもしれない。

単なる習慣としてもプロジェクト内のヘッダは後に書くのが定着しているね。

988 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 18:01:10.76 ID:la3dHmwP0.net]
ユーザー先だと、標準的な関数やdefineが定義済みになって不具合が出るかもしれないし
一般的な方から読み込んだほうがいいのでは?

989 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 18:42:48.59 ID:nW+wkdEb0.net]
なんか本の著者は自作モジュールを先にインクルードするって言ってたな
理由はそのほうがコンパイルエラーが早くなるかららしい

990 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 19:01:07.43 ID:LP8Fmqr90.net]
>>976-978
なるほど

若い時分なら「そんなの間違ってる! 俺が世界を正す!」って言ってたかもなぁ
とりあえず自分ヘッダは後ろで読むようにするわ

991 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 19:56:33.18 ID:J7XSbp4E0.net]
コンパイルエラーが無くなってもバグは残るからなあ

992 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 21:37:05.35 ID:Il/nsfIC0.net]
>>977
標準ヘッダを後に書くと
衝突したとき標準ヘッダ側がエラーとして表示されるからな

993 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 22:16:45.94 ID:yrIaaVQv0.net]
>>979
決断に水を差すことになるかもしれないけど、↓のベストアンサーでは自作ヘッダが先だよ。
https://stackoverflow.com/questions/2762568/c-c-include-header-file-order

994 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 22:26:46.15 ID:Eg2Dauqu0.net]
くだらねえ
単に依存関係ってだけのことだろ
一概にどっちが先であるべきだなんて押しつけは糞食らえだ

995 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 23:19:28.66 ID:J7XSbp4E0.net]
以前のサイトだと
標準ライブラリ
業務共通ライブラリ
個別ライブラリ
の順にインクルードしなさいと決められてた

996 名前:デフォルトの名無しさん mailto:sage [2021/12/15(水) 00:55:34.24 ID:Nn1Wh5vx0.net]
まぁ、これも他のスタイルと同じで、どっちがいいというよりは単純なルールで統一されていることが重要なものと思ってる。



997 名前:デフォルトの名無しさん mailto:sage [2021/12/15(水) 05:27:05.50 ID:XqRMbcSJ0.net]
押しつけはやる気と引き換えだ
そのコストに見合う理があるべき

998 名前:はちみつ餃子 mailto:sage [2021/12/16(木) 11:05:28.00 ID:78Qrz9F+0.net]
ヘッダのインクルードは全て .c の側でやる (ヘッダ内でインクルードしない) という流儀もある。
既にほとんど滅びた流儀だろうし、現代的ではないと断っておくがこの考え方を取るのであれば
インクルードの順序は重要になる。

// foo.h
struct foo{};

// bar.h
// ここで foo.h や stdint.h をインクルードしない
void bar(foo, uint32_t);

// bar.c
#include <stdint.h>
#include "foo.h"
#include "bar.h"
void bar(foo x, uint32_t y) { printf("bar\n"); }

// main.c
#include <stdio.h>
#include <stdint.h>
#include "foo.h"
#include "bar.h"
int main(void) { struct foo x; bar(x); }

メインの側で適切な順序にしないといけないから抽象不足だが、
インクルードガードしてても読み込んでプリプロセスの手順を通すという処理は発生してしまうので
それすらも最低限であるのが好ましいなどの思惑があるのだと思う。
(いまどきのコンパイラではインクルードガードのパターンを検出して
二度目にはファイルを読むことすらしないものもあるらしい。)
まあリソースをケチるのが正義だった昔の話やね。

999 名前:デフォルトの名無しさん mailto:sage [2021/12/18(土) 21:34:42.48 ID:U4IWqRR10.net]
test

1000 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 19:14:59.61 ID:Xd/JFvMa0.net]
レジスタから「値を読みだす」というのは「値をコピーする」と同義ですか?

1001 名前:デフォルトの名無しさん mailto:sage [2021/12/24(金) 05:09:46.99 ID:ZnDQBfvC0.net]
なんか違和感ある言い方だな
「読む」とはCPUへの入力、「書き込む」がCPUからの出力で
たとえばメモリリードはメモリからの出力、メモリライトはメモリへの入力を意味する

「コピー」はそれで合ってる
「ムーブ」になる場合は必ずそう断るから

1002 名前:デフォルトの名無しさん mailto:sage [2021/12/24(金) 05:42:34.84 ID:TL6ByUiE0.net]
>>990
たとえば

int a = 1;
int b = a + 2;

この「a + 2」の「a」の部分はメモリリードしてるということですよね
このとき計算のためにCPUに値を入力(コピー)しているという理解で合ってますか?

1003 名前:デフォルトの名無しさん mailto:sage [2021/12/24(金) 05:43:27.34 ID:+etymfSa0.net]
レジスタからの読み出しは読み出しという操作自体に副作用がある(レジスタに対する読み出しを検知してデバイスが何かを行う)場合があるので, 必ずしも同義とは言えない

1004 名前:デフォルトの名無しさん mailto:sage [2021/12/24(金) 05:58:42.33 ID:ZnDQBfvC0.net]
>>991
合ってる

1005 名前:デフォルトの名無しさん mailto:sage [2021/12/24(金) 06:05:01.87 ID:TL6ByUiE0.net]
>>992
>>993
ありがとうございました

1006 名前:デフォルトの名無しさん mailto:sage [2021/12/24(金) 06:43:15.91 ID:M4a7QlIa0.net]
>>991
>CPUに値を入力

レジスタはCPUなのかメモリなのか
int a = 1;
int b = a + 2;

これがアセンブラだと
mov ax,1
add ax,2
mov ptr[b], ax
メモリに書き込んでるのは3行目しかないが



1007 名前:デフォルトの名無しさん mailto:sage [2021/12/25(土) 01:01:40.65 ID:s/Gdf1X50.net]
>>995
アセンブラよくわからないんですが

mov ax, 1 // axレジスタに1をコピー
add ax, 2 // axレジスタの値に2を加算
mov ptr[b], ax // axレジスタの値をptr[b]にコピー

でしょうか
ptr[b]っていうのはなんですか?

1008 名前:デフォルトの名無しさん mailto:sage [2021/12/25(土) 01:29:37.77 ID:M0D5aTvU0.net]
最適化で変数aがレジスタに充てられてるんだな
最適化を抑制すれば
mov ax,1
mov ptr[a], ax
mov ax, ptr[a]
add ax,2
mov ptr[b], ax
とかになるんじゃね

1009 名前:デフォルトの名無しさん mailto:sage [2021/12/25(土) 11:51:05.24 ID:9FGZD56t0.net]
#include <stdio.h>

1010 名前:デフォルトの名無しさん mailto:sage [2021/12/25(土) 11:51:41.94 ID:9FGZD56t0.net]
int main(void)
{
 printf("good-bye 157\n");

1011 名前:デフォルトの名無しさん mailto:sage [2021/12/25(土) 11:52:11.17 ID:9FGZD56t0.net]
}
/*このすれは終了しました*/

1012 名前:1001 [Over 1000 Thread.net]
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 180日 0時間 29分 20秒

1013 名前:過去ログ ★ [[過去ログ]]
■ このスレッドは過去ログ倉庫に格納されています






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<280KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef