C言語なら俺に聞け 162

■ このスレッドは過去ログ倉庫に格納されています
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
2024/03/13(水) 15:56:31.82ID:etRxrqP30
小さい関数ならちまちま切り出さなくていい
読みにくいだけ
616デフォルトの名無しさん (ワッチョイ fb4c-A0KB)
垢版 |
2024/03/17(日) 16:04:44.01ID:k+jArioy0
最短経路問題で perl5 で書いたのがOut of memory!

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

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

C は知らない
2024/03/18(月) 10:37:04.28ID:U2viu6Jop
Pythonは、アルゴリズムって言うより
マトリックス計算機
624デフォルトの名無しさん (ワッチョイ 59ad-FDlJ)
垢版 |
2024/03/18(月) 12:55:06.36ID:09P0Fui10
Perlは最短経路問題のライブラリもなく、速度が欲しければCで自分で書くしかない…ってコト!?
辞めたら? その言語で最短経路問題解こうとするの
2024/03/18(月) 13:06:20.52ID:mAsCIn7L0
依頼者の返答を待たないと
2024/03/18(月) 20:11:03.72ID:H3fBGUmk0
perlスレでやれよ
このスレは老害しかいないからperlの話しても通じんよ
2024/03/18(月) 20:46:39.48ID:LaT9Whu40
perlの歴史は結構古いぞ
年寄りしか扱えないと思ってた
2024/03/18(月) 21:09:19.87ID:PY17qgzJ0
>>616 は C のコードを書く前に他の言語でプロトタイプを書くことがあるかという質問していて Perl についての質問ではないぞ。
Perl の話は例というか前振りだろ。
2024/03/18(月) 23:52:06.11ID:H3fBGUmk0
そいう話か。1行目しか読んでないわ
最近は大体OS標準のpowershellでざっくり書いて必要なら一部C#だな
pinvokeで恐らくC/C++製のDLLを利用することはあってもCコードを書く機会なんてなくなった
2024/03/18(月) 23:55:42.19ID:LaT9Whu40
じゃあ、だれかCで書いてあげて
2024/03/19(火) 08:32:58.20ID:Z43bMenl0
いきなりperlで書くのと
いきなりCで書くのと何が違うんだろ?

つか、俺は最初に日本語で手順を書くが
632デフォルトの名無しさん (ワッチョイ 73ae-yROb)
垢版 |
2024/03/19(火) 08:57:10.07ID:R8jeC9x+0
awkが普通だと思ってた
今は違うのか
2024/03/19(火) 09:24:56.59ID:D/Ya4WHb0
まずはBASICで書いて、速度が欲しいとこだけマシン語に置き換える感じ
2024/03/19(火) 09:46:27.46ID:DAgk/2JU0
FD起動IPL設計からなのでまずアセンブラで。
2024/03/19(火) 10:08:59.95ID:Szfgw2D70
FD起動
なんて贅沢なんだ
636デフォルトの名無しさん (ワッチョイ 8b2a-Rw/6)
垢版 |
2024/03/19(火) 10:39:11.21ID:Fe9RIXyY0
>>631
いきなり perlで書いたソースは既にあって、実行するとメモリ不足になるのでしょ。なので、

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

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

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

# ダジャレに気付かないのはダレジャ
2024/03/19(火) 14:22:26.70ID:VlZcx0wQM
計算量や使用メモリがネックになるのわかってたら最初からc++かcuda
インタラクティブかつビジュアライズして試行錯誤するときはpython(Jupyter)
643デフォルトの名無しさん (ワッチョイ 0bd0-FDlJ)
垢版 |
2024/03/19(火) 19:07:27.75ID:qnPpFeXM0
最短経路問題をCudaで解くのはむずくね?
2024/03/20(水) 02:30:26.76ID:yu5B8CqZ0
最短経路の解き方を聞かれてるわけじゃないだろ
2024/03/20(水) 10:52:31.80ID:+bbLi7EZ0
総当たりさせたらいいんだよw
646デフォルトの名無しさん (スフッ Sdb2-W6Ep)
垢版 |
2024/03/24(日) 18:06:00.35ID:UMIIXnOjd
構造体変数の宣言の初期化のとき、ヌルポインタを,{ }でくくらないと、警告が出るのですが、なぜですか? 例えばこんな具合にしないと警告が出ます

struct monster {
char name[80];
int HP, MP;
};

int main(void)
{
struct monster template = {{0}, 7, 4};
2024/03/24(日) 18:20:00.72ID:XqBtjkZY0
>>646
char name[80];に入るのはポインタではなくchar型の配列か文字列
648デフォルトの名無しさん (スフッ Sdb2-rfcW)
垢版 |
2024/03/24(日) 18:24:20.57ID:UMIIXnOjd
>>647 よくわかりました ありがとうございます
2024/03/24(日) 18:43:42.86ID:TrTyAT7D0
なにもわかってなさそうでほほえましい
2024/03/24(日) 18:46:07.25ID:TfhtohDd0
構造体云々言う前に、配列の初期化方法についてまず調べろ
651デフォルトの名無しさん (スフッ Sdb2-rfcW)
垢版 |
2024/03/24(日) 18:47:29.73ID:UMIIXnOjd
我ながら Lolです☺
2024/03/24(日) 18:57:40.29ID:9Ye9tMrz0
>>621
Perlでメモリ不足になるってことは循環参照が発生してメモリが解放されない(PerlはリファレンスカウントGC)
もしくは深い再帰でPerl管理のVMスタックが枯渇したか
どちらにしろCで書いてもメモリをバカ食いするのは間違いないから
データ構造を見直すべき
循環参照を見直す、再帰をループに変えるなどを試してみてはどうか
2024/03/24(日) 19:10:42.18ID:9Ye9tMrz0
グラフ構造を使う場合は循環参照は容易に生まれるからな
PerlのScalar::Util::weakenで変数をラップしてやる
こうするとその変数は弱参照になる
2024/03/25(月) 11:18:02.00ID:YX1noK3i0
弱参照ビオレ
2024/04/11(木) 18:10:49.56ID:h5i5y7Gi0
#include <stdio.h>
#include <string.h>

void main(void)
{
 char c[32];
 char *pc;

 strcpy(c, "JAPAN-TOKYO-OSAKA");
 pc = &c[0];

 //for(int i=0; i<strlen(c); i++, *pc++){
 for(int i=0; i<strlen(c); i++, pc++){
  printf("%c", *pc);
 }
 printf("\n");
}
2024/04/11(木) 18:12:37.98ID:h5i5y7Gi0
コメントアウトしてる方のforにしても出力結果は同じになります
*付きポインタ変数は、中身へアクセスを意味するからめちゃくちゃな文字列が出力されるはずじゃ・・・?

どうしてなの?
2024/04/11(木) 19:02:47.99ID:/0XH+klGd
あなたが書いたのは*(pc++)を意味してます
2024/04/11(木) 19:16:41.38ID:GKY1RwiV0
このソースを何という名前で保存して、何というコンパイラでコンパイルしたかとか、色々
2024/04/11(木) 20:20:43.87ID:h5i5y7Gi0
>>657
文句を行ってもしかたがない
そういうものとして納得するしかないんだろうけど、”おかしい”と思ってるCプログラマーは世界中に2億人くらいいると思う
2024/04/11(木) 20:25:30.86ID:RdqITFFi0
*も++も単項演算子で適用される優先順位がある
優先順位を意識してコーディングしないと痛い目に合う
a + b == cは想定通りだろうが、a & b == cは想定外の結果になるとかねw
2024/04/11(木) 20:54:35.96ID:eGBAyvET0
足し算掛け算の掛け算をシフトに書き換えたら上手く動かなくなって焦った
662デフォルトの名無しさん (ワッチョイ 6f2a-MjEX)
垢版 |
2024/04/11(木) 21:46:39.46ID:6HtedQOj0
>>661
え、なぜ。
2024/04/11(木) 22:53:39.83ID:/Kb1qQiM0
シフト演算子は加減算より優先度低いのにカッコで囲わなかったって事でしょ
2024/04/11(木) 23:28:45.21ID:0Tmkq/lZ0
まあ次がんばればいいよ
2024/04/11(木) 23:29:31.03ID:RdqITFFi0
シフトは乗除っぽいイメージだから加減算よりも先でいいよなぁ
ビット演算子が比較よりも後なのは完全に仕様バグだろ…
2024/04/11(木) 23:37:48.49ID:1F4I/FIC0
冴えてないときの自分のためにも、他人のためにも、なるべくカッコはつけるかな
2024/04/11(木) 23:49:41.77ID:0Tmkq/lZ0
いまさら言って仕方ない事をいちいち書くなよ
お前が次のC言語でも作って人生を棒に振ればいいだけだよ
2024/04/12(金) 00:17:11.46ID:nGLEgXOo0
>>667
便所の落書きにぶちギレw
お前の人生はいつも焦燥感に満ちてんだろうなw
669デフォルトの名無しさん (ワッチョイ df01-B3tP)
垢版 |
2024/04/12(金) 00:21:54.57ID:GtdzNQir0
>>655
後に現れたC++のiostreamがシフト演算子をオーバーロードし入出力演算子として流用するのに
好都合で、思わぬ役に立つことになったからまあ良いだろ。もしシフト演算子が四則演算子より
優先順位が高かったら、cout << 1 + 2 * 3 << endl を cout << (1 + 2 * 3) << endl と
書かなければならず面倒だった。(C++がシフト演算子を全く別の機能に流用したのは不適切
だったという意見もあるが…)
2024/04/12(金) 01:13:09.53ID:nGLEgXOo0
>>669
シェルのリダイレクトと概念が一致してるから、最初見た時は天才かよと感心したな
でも、出力の整形が激ムズなんでやっぱり駄目じゃんと気付くまではそう思ってた
671デフォルトの名無しさん (ワッチョイ e2ad-lyNC)
垢版 |
2024/04/12(金) 02:09:51.24ID:Wv2Zy+UZ0
>>656
*pc++ はまず *pc の処理をする。これで pc の差している先にある値を取り出すことになる。その次に pc を一つ分進ませる(実際に加算される値は sizeof(*pc))。
では最初に *pc で取り出した値はどこへ行ってしまうのか? それは何にも使われずにただ捨てられる。
2024/04/12(金) 07:08:32.50ID:gi41fiD00
*pc++の形はcやってたら所々で見るから否応なく慣れる
個人的にはケチくさい書き方で避けたい気持ちもあるがまぁそういう文化が根付いてるなら合わせざるを得ない
2024/04/12(金) 07:39:02.10ID:661KRJs/r
>>665
初期のCでは||が無くて論理和も|使ってたためのはず
KかRのどっちかが「後悔してるけど今さら変えられないし」とか言ってた
674デフォルトの名無しさん (スッップ Sd02-3rFQ)
垢版 |
2024/04/12(金) 12:25:07.52ID:OadUyd3Md
C言語の標準化委員はC++のほうも兼任してたりするから、ぶっちゃけC言語の改善にはやる気無しだから。
2024/04/12(金) 13:28:21.08ID:Lm13J0L60
C++もやる気無しだろ
2024/04/12(金) 14:41:57.50ID:nGLEgXOo0
C++はRustと比較されて安全性に劣るとレッテルを貼られて、どうしたもんか考えあぐねてるところだろうw
言語の拡張に対して完全に方向転換を強いられてるのは間違いない
それはCも一緒だな
2024/04/12(金) 14:53:32.51ID:nGLEgXOo0
パフォーマンスを損なわずにRustと同等の安全性を追加するか、もうこのままそっとしておくかw、の2択だろう
2024/04/12(金) 15:20:27.37ID:dUdcEEpod
>>674
もはやbetter Cでも何でもないのに、このスレでも繰り返しc++の話題出す奴居るし、やっぱユーザーも被ってるんだろな

まあCの設計の良否を他言語よりは比較的小さな差異から論じるのに有用だとは思う
おれみたいにC++は書かずともcpprefとか読んで式や文、宣言など局所的な構文知識だけちょっとある人は多かろう(ClassとかCに無い概念は読み飛ばしてて無知)

生まれた順序が逆だけど、FortranがC++とすればF言語/JuliaがCだね
大体サブセット+独自進化、標準化コミュニティ丸被り
679デフォルトの名無しさん (スッップ Sd02-3rFQ)
垢版 |
2024/04/12(金) 16:33:17.52ID:OadUyd3Md
C++は好きじゃないからC言語はもっと改善していって欲しい。
nullptr型とか入るの遅すぎじゃね?
2024/04/12(金) 22:48:41.07ID:fQv3jEzD0
C++はCの機能を保ったまま、ありとあらゆるプログラミングパラダイムを突っ込んだもの
それがベターかどうかは人によるな
ただ、Cと互換性を保ったままそこまで進化したのは奇跡に近い
2024/04/12(金) 23:16:21.33ID:pf6tTSyT0
Cは概ねC++のサブセットだからしゃーない
2024/04/13(土) 00:06:24.07ID:c7UXCLXT0
でも、Rustが安全性と性能は両立出来ることを証明してしまってから、一気に旗色が悪くなったw
今まで性能を免罪符にして、多少(かなり?)の安全性を犠牲にしてきたけど、もはや通用しない時代になった
今後どう進化するか見物だな
Cだって対岸の火事ではない
2024/04/13(土) 01:23:26.45ID:c7UXCLXT0
ちなみに、Rustは安全な代わりに書きたいコードを書けるとは思わない方がいいw
これは書いてみないと分からん感覚だ
書きやすくて安全な言語は存在しないことも証明されたw
684デフォルトの名無しさん (ワッチョイ e2ad-ZiZa)
垢版 |
2024/04/13(土) 07:18:38.29ID:SxW/5mRR0
慣れの問題では?
2024/04/15(月) 00:15:31.26ID:kwd7Pf0A0
必ず遠回りをさせられる感覚は非常にムズムズするよな
あれならgccでstack-protectorとかsanitizeとかガン盛りした方が
気分良く高効率に書けると思った
2024/04/19(金) 20:19:37.90ID:5JxGOdzk0
今日から戯れに数十年前のx86なGUIのソースをx64に移植し始めたんだが
とりあえずエラーになるGetWindowsLongだかをx64用に書き換えていったらそこそこ動いてしまって、後は文字列が関係する処理だけだ
俺が書いた過去のコードがよっぽど優秀だったようだ
やはり若い頃にソースを沢山書いといてよかった
2024/04/19(金) 20:37:53.24ID:5JxGOdzk0
x64化でちょっとsize_tの扱いで躓いたので書いておこう
ポインタが64bitだから、その差を取る場合もあるsize_tも64bitなのは理屈では理解できるんだが
明らかに64bit幅が不要な箇所でsize_tに出くわすとおいおいと思ってしまう
これはbit数を明示した型を別に定義した方がよさそうだ
ああまいったまいった
2024/04/19(金) 23:35:27.85ID:uO847wzt0
>>686
Windows1.0のexeもWindows10(32bit版)でも動くからな
64bit版は16bitコードの実行が廃止されたから無理
APIの方は割と変わってるけど、それでもちょっと直せばビルドできる
優秀なのはMicrosoftの方だなw
2024/04/20(土) 09:49:57.99ID:U6z53Ozt0
温泉旅館の増改築やらせたらMSに敵う奴はいない
2024/04/21(日) 10:27:21.32ID:Y4YQdA//0
Windows11は最初から32bit版が無いんだよな…
ポインターに64bitも必要ない
36bit(64GB)有れば十分
farとnearポインター復活しても良いよw
2024/04/21(日) 10:58:55.51ID:WM7IEXRid
win10使ってるけどOffice 97をバイナリコピーして使ってるぞ、とうとう11では動かんのか…?
主にExcel使うが関数の数は劣ってもヘルプは古い方がよく出来てて一般ユーザとしては好み、一々ブラウザ起動されてたらい回しは嫌だ
2024/04/21(日) 11:03:42.61ID:z3GhIJnT0
可変長サイズのポインターは斬新
2024/04/21(日) 13:02:16.05ID:kDNr1IJ/0
Office97は32bitだから動くでしょ
駄目なのはWindows3.1までの16bitアプリ

じぶんもフリーソフトをいくつか64bit化したけどほとんど修正してない
早めにUnicodeにしてたおかげもあるかな
2024/04/29(月) 16:02:47.44ID:JmumYEsm0
16bitアプリって、今も残ってたっけ?
2024/04/29(月) 17:53:08.72ID:Mi5d5RVO0
あえて使う人もあんまりいないだろうけど、メンテナンスが止まってる(32bit 化、64bit 化されない)ようなソフトを使いたいってことはそれなりにあることじゃないの。
メーカーがつぶれて消えたりするのもよくあることだしな。
696名無し兎と鰻の大乱闘 (ワッチョイ dffd-02Vv)
垢版 |
2024/04/29(月) 19:42:16.62ID:Yc7GJpMD0
そもそもしーげんごってなに?
2024/04/29(月) 19:53:54.99ID:D5HYHAbC0
アプリは32bitだがインストーラが16bitなのが結構あるらしい
2024/04/29(月) 20:59:16.06ID:JmumYEsm0
もしもそんなのがあったら、メチャクチャ話題になってると思うよ
699デフォルトの名無しさん (ワッチョイ dfad-b946)
垢版 |
2024/04/29(月) 22:45:20.14ID:c1TFMEcy0
知り合いにエミュレータ入れたりして凄く苦労してロータス123を動かして業務で使っている人が居る。
2024/04/30(火) 00:46:15.48ID:b4FWQSR70
使うのに手間はあるとはいえエミュレータが成熟してしまったので
かなり古いソフトウェアを動かしたいならそっちでやれと言えてしまうようになったとも言える。
Windows の互換性維持システムも結局はエミュレータをサブシステムとして
組み込んでるようなもんだしな。
2024/04/30(火) 10:07:58.44ID:XgZjmbIB0
>>697
ファーレントゥーガとかそのパターンだね
702デフォルトの名無しさん (ワッチョイ df79-V7Lt)
垢版 |
2024/04/30(火) 19:37:21.97ID:6siWZQQV0
なんで16bitの話になったのか理解不能
703デフォルトの名無しさん (ワッチョイ dfad-b946)
垢版 |
2024/05/01(水) 16:53:57.29ID:udfiR5VM0
>>686の辺りから?
2024/05/01(水) 19:51:41.60ID:nIC3qyB/0
プリプロセッサでモジュール作れるようになるとC++使わなくてもCで十分だな
もっと早めにマスターするべきだった
705デフォルトの名無しさん (ワッチョイ df79-V7Lt)
垢版 |
2024/05/02(木) 23:28:34.67ID:gN+cVuNV0
CでCOMやれって言われても困るし
逆にC++のがマシってのはその程度か
2024/05/03(金) 11:04:22.77ID:RJtMknPi0
cでもできるってのと、c++使ったほうが楽ってのでは全然意味違う
チームで混乱を招くという理由以外でのc++ディスりは、大抵理解不足によるアレルギーから来るヒスのことが多い
まあ、そういうヒス起こす人が多いからチームでは使用禁止とかになっちゃうわけだから、り繋がってはいるんだけど
2024/05/03(金) 11:08:15.33ID:9ebiuCIb0
チャンスあると自分語りを始めるのは、病気だぞ
2024/05/03(金) 11:51:54.49ID:RJtMknPi0
どういう理論だよ
普通の欲求だろ
2024/05/03(金) 12:00:23.89ID:KP5VxXzU0
普通じゃなくてガキの欲求
2024/05/03(金) 13:30:44.34ID:vhm3euJk0
リーナスはガキ
2024/05/03(金) 14:49:42.61ID:lW+ShOaq0
>>708
なわけ無いだろ
我慢ができないのはただのガキだぞ
2024/05/03(金) 16:16:10.22ID:RJtMknPi0
>>711
そうやって我慢できずに突っかかってきてるのもどうかと思うけどな…
2024/05/03(金) 16:35:03.08ID:8UCXCtC4M
linuxカーネル縛りと趣味以外でc言語使うってどういうプロジェクト?
実際仕事でそういう人いる?
組み込みでも今時c++使えるだろ
2024/05/04(土) 01:34:33.71ID:fPXjXaJw0
洗濯機や電子レンジなどは Cが最適じゃなかろうか
715デフォルトの名無しさん (ワッチョイ dfac-R43V)
垢版 |
2024/05/04(土) 01:40:48.74ID:nSEmjq+y0
メモリ構成が非常に小さいシステムの場合Cじゃない?
8bitのPICとか
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況