X



C言語なら俺に聞け 162
0001デフォルトの名無しさん (ワッチョイ 2389-FUJr)
垢版 |
2023/10/30(月) 17:13:00.82ID:hHEGE8Ol0
!extend:checked:vvvvv:1000:512
(新スレ立ての際上記コマンドを2行書き込んでください)
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/

C17
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4713.pdf

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

C23 最新ドラフト
https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3047.pdf

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

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

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

※前スレ
C言語なら俺に聞け 161
https://mevius.5ch.net/test/read.cgi/tech/1682053520/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
0542デフォルトの名無しさん (ワッチョイ 0aaa-g1P5)
垢版 |
2024/02/26(月) 17:12:35.82ID:hotfpUjh0
【AI】Stable Diffusion 3発表、Soraで話題の拡散トランスフォーマーを採用 [すらいむ★]
http://egg.5ch.net/test/read.cgi/scienceplus/1708865670/l50

ボイス・トォ・スカるしている者も攻撃を受けるようになりました
0543デフォルトの名無しさん (ワッチョイ 9e6d-EVRh)
垢版 |
2024/02/26(月) 19:38:00.95ID:7RO6bLyL0
こんな Web ページを作りました。ぜひどうぞ。
http://www7b.biglobe.ne.jp/~river_r/chs/
0546デフォルトの名無しさん (ワッチョイ 9eb5-EVRh)
垢版 |
2024/02/27(火) 17:32:18.89ID:xGsMPO790
>>543 ごめんなさい。言葉足らずでした。

「数値計算結果の画像化など」 という Web ページを作りました。
プログラミング、数値計算、カオス、画像作成と表示
などに興味がある方は、ぜひどうぞ。
http://www7b.biglobe.ne.jp/~river_r/chs/
0549デフォルトの名無しさん (ワッチョイ 9e07-EVRh)
垢版 |
2024/02/29(木) 11:21:59.57ID:lAXCV22P0
>>0548
>546 です。C++ に特有な機能は、
全くと言っていいほど、使っていませんよ。
pow(x, y) というのは目新しいけど。
0552はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5f32-o3N8)
垢版 |
2024/02/29(木) 14:03:45.25ID:w6pA3tyf0
>>549
C++ の機能をほとんど使ってないことはわかってるしそう言ってるじゃないの。
使わないのに C++ の形式をとって C スレに投下するのはちょっと不親切かもねという話をしてるんだよ。

pow (べき乗関数の総称版) は C にもあるし、 C の仕様に入ったのは C99 から。
それを知らなくて (しかし使いたくて?) C++ にしたという意味なのかな?
0554デフォルトの名無しさん (ワッチョイ caac-o+si)
垢版 |
2024/02/29(木) 16:10:58.46ID:wvTonBo10
しらんけど、今どきだと最適化されるかもしれんね
1+2+・・・+99+100
こんな計算も(1+100)x 50で最適化される記事が昔あったような
0558デフォルトの名無しさん (ワッチョイ caac-o+si)
垢版 |
2024/02/29(木) 18:55:44.88ID:wvTonBo10
例が悪かった、もちろん定数は一発計算してメモリに固定されるけど、
変数を含んでても、冗長計算を変形してくれるコンパイラが出て、gccもそのアルゴリズムを採用したことが昔あったような。
0559はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 4350-a3My)
垢版 |
2024/02/29(木) 19:13:29.86ID:eV7kgdtT0
数値計算関連の関数はコンパイラによる最適化がなくても関数の内部が複雑な場合分けで対処してることが多いと思う。
GNU のやつとかだいぶんごちゃごちゃしてる。
0562デフォルトの名無しさん (ワッチョイ ab4e-7bv0)
垢版 |
2024/03/07(木) 00:36:21.20ID:D7Ff69360
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t sighandler);

signal関数の第1引数のシグナル番号(signum)と第2引数のハンドラ関数が実際に呼ばれたときに引数に入るシグナル番号(1行目の引数のint)は必ず一致する認識ですがあっていますか?
その場合はハンドラ関数では引数に入るシグナル番号は最初から分かっているはずですが、わざわざ引数にシグナル番号を取っている理由はなんでしょうか。シグナル番号によって処理を分岐するデカいハンドラ関数を作るくらいしか思いつきませんでした。
0563デフォルトの名無しさん (ワッチョイ 9f79-rZWy)
垢版 |
2024/03/07(木) 01:20:52.75ID:yhOhiWWp0
時間の無駄だからsignalのことは忘れなさい
時代遅れのCランタイムで本当に役立つものはごく少数しかない
そんな化石はスルーしてOSに用意された目的に合うAPIを直接使いなさい
Cランタイムのソースコードがある処理系なら読んでみると良い
0567はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 3b32-FATS)
垢版 |
2024/03/07(木) 10:26:06.80ID:Qh7cJyBm0
>>562
> 必ず一致する認識ですがあっていますか?

正しい。

> わざわざ引数にシグナル番号を取っている理由

Rationale に書かれていないのではっきりしたことはわからない。
おそらく Unix でそうなってたのを追認しただけだと思う。
0570はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 3b32-FATS)
垢版 |
2024/03/07(木) 12:44:05.75ID:Qh7cJyBm0
>>569
練習用の題材ではなく (自分なりに) 意味があるプログラムを書けたあたりが
一応のマスター (あくまで最低限の出発点だが!) だろうと個人的には思ってる。

プログラミング言語は道具なんだから道具として使えることが重要で、
言語の要素を何個理解したなんてのはたいした指標にならない。
0572デフォルトの名無しさん (ワッチョイ 0f2a-AlNe)
垢版 |
2024/03/07(木) 14:06:12.94ID:4AOndewA0
三行半で済む処理をダラダラ1万行ぐらいに増やすのは、得意なんだけどなあ。
0574デフォルトの名無しさん (ワッチョイ 1f5c-0W2u)
垢版 |
2024/03/07(木) 15:56:22.94ID:tpHaFcPx0
>>562
番号を渡す理由はその方が柔軟性があるから
柔軟性の中には>>562で挙げてる理由も含まれる
なおsignal()は時代遅れなのでsignal.hにある別の関数を使うこと
0576デフォルトの名無しさん (ワッチョイ 4f4c-lvv7)
垢版 |
2024/03/08(金) 18:40:01.38ID:6aUIMz1F0
>>562
デカいハンドラ関数を作る意図はなくても
同じようで異なる処理(複数のsigal番号の処理をする場合とか)をする時に
入口は一つにしておいて入力パラメータで処理を振り分けるとか普通の設計だと思うが。
わかりやすい例がWIN32APIのWindowProc。
あれがメッセージ番号毎に関数エントリを登録する形式だったら煩雑なことこの上ないだろ。
0581デフォルトの名無しさん (ワッチョイ 82ac-sV0L)
垢版 |
2024/03/11(月) 21:49:00.76ID:QCWizl2S0
プログラマ目指して挫折する人は、別に作りたいものがなくて文法ばかりを勉強するタイプかも。
文法は大事だけど、それ自体はあんまり役に立たないし調べれば済むことに時間をかけるのは程々に
合理的なアルゴリズムを瞬時に思いついて言語に落とし込めるかが大事で、これは経験。
0582はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 8d32-SeR6)
垢版 |
2024/03/11(月) 22:16:42.73ID:lga6QF6v0
質問サイトとかで「どうすればいいですか?」みたいなのはちょくちょくあるけど「どうなればいいの?」と返したらまともにこたえられないのもよくある。
問題の解法を構築してプログラムの形に落とし込むのが大事だというのはそりゃそうなんだけど、大前提として解決すべき問題が何であるかを認識 (発見) しなきゃならなくて、そこんところで躓いてたら助けるのも難しい。
0583デフォルトの名無しさん (ワッチョイ c27c-WFGC)
垢版 |
2024/03/11(月) 23:43:57.21ID:a8lYnTon0
>>582
相手はその質問で問題提起してるんだろ、なのにお前からは、どうなればいいのって "
解答" を質問者に聞いてたら、そりゃ質問者だって混乱するだろよ。
問題把握以前にお前は国語からやり直すべき。
0584はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 8d32-SeR6)
垢版 |
2024/03/12(火) 00:26:36.89ID:WtXn1sYk0
>>583
目指すべき形がわからないのにどうすればいいかなんて答えようがないんだから訊くのはあたりまえじゃないの。
(ちなみに質問が不明瞭な場合などのために回答とは別にコメントを付ける機能が stackoverflow や teratail にはある)
0591デフォルトの名無しさん (JP 0He6-Cuda)
垢版 |
2024/03/13(水) 04:27:54.00ID:fKc7/92tH
Pythonから来たんですけど
C言語では関数だけじゃなくifやforのブロック内部もローカルスコープって聞いて驚愕してます
ループが終わった後のカウンター変数を後続処理で気軽に利用できないって困りませんか
0592デフォルトの名無しさん (ワッチョイ 82ac-sV0L)
垢版 |
2024/03/13(水) 04:37:16.09ID:VFn3B3DS0
そうしたいときはスコープの外で宣言すれば値は保持されるので
int i;
for (i=0 ; i<10 ; i++)
{

}
0593デフォルトの名無しさん (JP 0He6-Cuda)
垢版 |
2024/03/13(水) 04:49:50.63ID:fKc7/92tH
>>592
マジっすか
ChatGPTに聞いたら、そのやり方だと外のiと中のiはスコープが別って言われて混乱しとります

---
一方で、ループの外で事前に同名の変数が宣言されている場合、
forループの仮引数として宣言された変数と同名の変数は別のものとして扱われます。
この場合、forループの仮引数として宣言された変数がローカル変数として扱われ、ループの外で宣言された変数がグローバル変数として扱われます。
これは、C言語において名前の衝突を回避するための仕組みです。
0595デフォルトの名無しさん (ワッチョイ 8666-sV0L)
垢版 |
2024/03/13(水) 07:16:46.92ID:3+r/Br8X0
>>593
int i;
for (int i=0 ; i<10 ; i++) {...}
と書くとそうなる
宣言すると新しい変数ができる

ChatGPTって、機械が自然な応答をすることが目的で、辞書のように使うものではないんじゃないの?
ChatGPTは得た情報がどの程度正しそうなのか重みづけできないんじゃないかな
0597デフォルトの名無しさん (JP 0He6-Cuda)
垢版 |
2024/03/13(水) 08:06:43.61ID:fKc7/92tH
>>595
ありがとう
AIの回答をよく見返したらfor(int i = 0...の解説だった
サンプルコードを示してくれるのはいいけど、自分のような丸々素人だとその意図を理解できないでこういう誤解が生まれる余地はあるね
先生が優秀過ぎて学生がついていけない構図だわこれ
0599はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 29a4-SeR6)
垢版 |
2024/03/13(水) 08:49:20.23ID:ZL+6IClb0
>>597
昔の C++ だとその書き方でも i のスコープは for 文の外側のブロックがスコープになる仕様だった。 (ISO で規格化される前のやつ。)
その頃の C の仕様ではそもそもそこで変数の宣言を出来なかったが処理系の拡張として C++ 風のやりかたをできるようにしているものもあった。
後に C++ の仕様は変更されて、 C には C++ の変更後のやり方で導入されることになったんだが、しばらくはスコープの仕様に混乱があった。
数十年前の一時期の混乱に過ぎないからそれ自体は今では気にする必要はないんだけど言語仕様は変更されることもあるし、色々と歴史的事情もある。
古い仕様を根拠にした解説もあるから AI が区別せずに学習したら辻褄の合わないことも起こると思う。
まあ人間が書いた解説も変なのは少なからずあるから AI を批判するわけじゃないけど……まあ一番最初くらいは入門書を読んだほうがいいんじゃないかと個人的には思ってる。
0602デフォルトの名無しさん (ワッチョイ 692a-fdoY)
垢版 |
2024/03/13(水) 09:57:47.91ID:X1fgAQyG0
気が重い中で使うのが正しい。獅子咆哮弾だね。
0603デフォルトの名無しさん (スプッッ Sd01-WFGC)
垢版 |
2024/03/13(水) 10:34:26.85ID:u8+Aa1acd
>>597
ChatGPTは嘘言うので使うのやめたわ。
どこかの大学の調査で学生だか生徒だかが、ChatGPTの嘘情報で間違ったまま覚えてる弊害が出始めてるとか言ってたわ。
0607デフォルトの名無しさん (ワッチョイ 8563-lhhw)
垢版 |
2024/03/13(水) 11:43:22.70ID:WwA56xS10
嘘って言うのは人間が評価した上での話
ChatGPTに取っては与えらた入力データから
もっともらしいものを出力しただけ

ChatGPTに嘘をつかせるってのは、難しい
仮に知性というものが芽生えて、自意識が発生し
そのことを人間に隠さないといけないと判断して
そうするなら、それは初めて嘘をついたとなる
0611はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 8d32-hQEK)
垢版 |
2024/03/13(水) 12:20:13.23ID:y7g8qbWf0
ChatGPT の言語能力は高いがプログラミング教育を受けてるわけじゃないからなぁ。
頭のよい素人がググりながら要約したくらいの正確さだと思う。

根拠になる仕様の項目を問うたときにまるでデタラメを返したりするのはかなりあかんとこ。
0614デフォルトの名無しさん (ワッチョイ f260-3wDj)
垢版 |
2024/03/13(水) 13:53:23.57ID:hNY0+4ik0
>>601
ループ変数を後から参照する状況は、ループがbreakで中断したかを確認したい時だろう
そういうのは別の関数に切り分けて、ループ内でbreakじゃなくreturn trueで返すようにすべきだな(関数の最後はreturn false)
C++で言うstd::any_ofみたいな事が出来ないから、関数に切り分けるしかない
0616デフォルトの名無しさん (ワッチョイ fb4c-A0KB)
垢版 |
2024/03/17(日) 16:04:44.01ID:k+jArioy0
最短経路問題で perl5 で書いたのがOut of memory!

こんな時はC言語などで書き直すのが選択肢だけど
みんなはいきなりC言語などで書きますか?
それとも、最初は書きやすい言語で処理速度以外の所を決めてからC言語などで書きますか?
0619デフォルトの名無しさん (ワッチョイ 292a-B9kV)
垢版 |
2024/03/17(日) 16:47:02.59ID:8QBAFOMi0
ここの人たちなら習わぬ Perlで下書きするより勝手知ったる Cで書くんじゃないの。
Perl開発上の問題はPerlスレで訊ねた方が、実情に即したレスが反りそう。
0621デフォルトの名無しさん (ワッチョイ 8163-IOXH)
垢版 |
2024/03/17(日) 19:48:46.79ID:WugnipTo0
Perlスレ見てみたが、相談できそうな所が無かった
回答あるか分からないが、お題スレに問題文投げて解いてもらう
いろんな言語に精通している猛者が多い(Perl達人もいたはず)
PerlではなくC言語でと言うなら、ここで相談できるかもしれない
0622デフォルトの名無しさん (ワッチョイ 5134-0rOl)
垢版 |
2024/03/18(月) 10:33:19.79ID:0IkoPQje0
最短経路・グラフ理論・ダイクストラとか?
アルゴリズム系は、Python でしょ。Ruby も

有名な蟻本「プログラミング・コンテスト・チャレンジブック」は、C++

C は知らない
0624デフォルトの名無しさん (ワッチョイ 59ad-FDlJ)
垢版 |
2024/03/18(月) 12:55:06.36ID:09P0Fui10
Perlは最短経路問題のライブラリもなく、速度が欲しければCで自分で書くしかない…ってコト!?
辞めたら? その言語で最短経路問題解こうとするの
0629デフォルトの名無しさん (ワッチョイ 1379-7+fg)
垢版 |
2024/03/18(月) 23:52:06.11ID:H3fBGUmk0
そいう話か。1行目しか読んでないわ
最近は大体OS標準のpowershellでざっくり書いて必要なら一部C#だな
pinvokeで恐らくC/C++製のDLLを利用することはあってもCコードを書く機会なんてなくなった
0632デフォルトの名無しさん (ワッチョイ 73ae-yROb)
垢版 |
2024/03/19(火) 08:57:10.07ID:R8jeC9x+0
awkが普通だと思ってた
今は違うのか
0636デフォルトの名無しさん (ワッチョイ 8b2a-Rw/6)
垢版 |
2024/03/19(火) 10:39:11.21ID:Fe9RIXyY0
>>631
いきなり perlで書いたソースは既にあって、実行するとメモリ不足になるのでしょ。なので、

いきなり(perl以外の)書きやすい言語で書くのと
いきなりCで書くのと何が違うんだろ?

と訊くべき。
0637デフォルトの名無しさん (ワッチョイ 8163-IOXH)
垢版 |
2024/03/19(火) 11:11:47.95ID:Szfgw2D70
昔MZシリーズなんていう8ビットPCがあって、
そのマニュアルにペントミノを解くというプログラムが載っていた
しかし実行しても1日掛かっても回答が出ない
16ビットPC用のCで書き直したら、5分で終わった
ついでにアセンブラにしたら、1分だった
0638デフォルトの名無しさん (ワッチョイ 59ad-FDlJ)
垢版 |
2024/03/19(火) 11:29:09.76ID:FLREyswN0
Perlでアルゴリズムのプロトタイプ書くおじいちゃん、まだ生きていたのか
普通の若者はプロトタイプはPythonで書くんだよな。何故ならネットにダイクストラでもなんでも落ちているから

このおじいちゃんは新しい言語を勉強出来ない人間だし、かといってプロトタイプなしで初手Cで書けるような積み上げのある猛者というわけでもない
引退した方が良いのでは?
0641デフォルトの名無しさん (ワッチョイ 8b2a-B9kV)
垢版 |
2024/03/19(火) 12:37:23.65ID:SMOg7wK30
翻訳先が Cなら、
Perl より Python の方がコスト(手間)高で、いっぱい損な気ガス

# ダジャレに気付かないのはダレジャ
レスを投稿する