[表示 : 全て 最新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

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