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

0675デフォルトの名無しさん (ワッチョイ 62db-wLy8)2024/04/12(金) 13:28:21.08ID:Lm13J0L60
C++もやる気無しだろ

0676デフォルトの名無しさん (ワッチョイ 4ef0-WBP1)2024/04/12(金) 14:41:57.50ID:nGLEgXOo0
C++はRustと比較されて安全性に劣るとレッテルを貼られて、どうしたもんか考えあぐねてるところだろうw
言語の拡張に対して完全に方向転換を強いられてるのは間違いない
それはCも一緒だな

0677デフォルトの名無しさん (ワッチョイ 4ef0-WBP1)2024/04/12(金) 14:53:32.51ID:nGLEgXOo0
パフォーマンスを損なわずにRustと同等の安全性を追加するか、もうこのままそっとしておくかw、の2択だろう

0678デフォルトの名無しさん (スフッ Sd02-L5r3)2024/04/12(金) 15:20:27.37ID:dUdcEEpod
>>674
もはやbetter Cでも何でもないのに、このスレでも繰り返しc++の話題出す奴居るし、やっぱユーザーも被ってるんだろな

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

生まれた順序が逆だけど、FortranがC++とすればF言語/JuliaがCだね
大体サブセット+独自進化、標準化コミュニティ丸被り

0679デフォルトの名無しさん (スッップ Sd02-3rFQ)2024/04/12(金) 16:33:17.52ID:OadUyd3Md
C++は好きじゃないからC言語はもっと改善していって欲しい。
nullptr型とか入るの遅すぎじゃね?

0680デフォルトの名無しさん (ワッチョイ 62e3-WBP1)2024/04/12(金) 22:48:41.07ID:fQv3jEzD0
C++はCの機能を保ったまま、ありとあらゆるプログラミングパラダイムを突っ込んだもの
それがベターかどうかは人によるな
ただ、Cと互換性を保ったままそこまで進化したのは奇跡に近い

0681デフォルトの名無しさん (ワッチョイ df01-g9Lk)2024/04/12(金) 23:16:21.33ID:pf6tTSyT0
Cは概ねC++のサブセットだからしゃーない

0682デフォルトの名無しさん (ワッチョイ 62e3-WBP1)2024/04/13(土) 00:06:24.07ID:c7UXCLXT0
でも、Rustが安全性と性能は両立出来ることを証明してしまってから、一気に旗色が悪くなったw
今まで性能を免罪符にして、多少(かなり?)の安全性を犠牲にしてきたけど、もはや通用しない時代になった
今後どう進化するか見物だな
Cだって対岸の火事ではない

0683デフォルトの名無しさん (ワッチョイ 62e3-WBP1)2024/04/13(土) 01:23:26.45ID:c7UXCLXT0
ちなみに、Rustは安全な代わりに書きたいコードを書けるとは思わない方がいいw
これは書いてみないと分からん感覚だ
書きやすくて安全な言語は存在しないことも証明されたw

0684デフォルトの名無しさん (ワッチョイ e2ad-ZiZa)2024/04/13(土) 07:18:38.29ID:SxW/5mRR0
慣れの問題では?

0685デフォルトの名無しさん (ワッチョイ bf5f-/8Es)2024/04/15(月) 00:15:31.26ID:kwd7Pf0A0
必ず遠回りをさせられる感覚は非常にムズムズするよな
あれならgccでstack-protectorとかsanitizeとかガン盛りした方が
気分良く高効率に書けると思った

0686デフォルトの名無しさん (ワッチョイ 9f79-Zl9R)2024/04/19(金) 20:19:37.90ID:5JxGOdzk0
今日から戯れに数十年前のx86なGUIのソースをx64に移植し始めたんだが
とりあえずエラーになるGetWindowsLongだかをx64用に書き換えていったらそこそこ動いてしまって、後は文字列が関係する処理だけだ
俺が書いた過去のコードがよっぽど優秀だったようだ
やはり若い頃にソースを沢山書いといてよかった

0687デフォルトの名無しさん (ワッチョイ 9f79-Zl9R)2024/04/19(金) 20:37:53.24ID:5JxGOdzk0
x64化でちょっとsize_tの扱いで躓いたので書いておこう
ポインタが64bitだから、その差を取る場合もあるsize_tも64bitなのは理屈では理解できるんだが
明らかに64bit幅が不要な箇所でsize_tに出くわすとおいおいと思ってしまう
これはbit数を明示した型を別に定義した方がよさそうだ
ああまいったまいった

0688デフォルトの名無しさん (ワッチョイ 9f1c-A/o5)2024/04/19(金) 23:35:27.85ID:uO847wzt0
>>686
Windows1.0のexeもWindows10(32bit版)でも動くからな
64bit版は16bitコードの実行が廃止されたから無理
APIの方は割と変わってるけど、それでもちょっと直せばビルドできる
優秀なのはMicrosoftの方だなw

0689デフォルトの名無しさん (ワッチョイ 7763-hJEz)2024/04/20(土) 09:49:57.99ID:U6z53Ozt0
温泉旅館の増改築やらせたらMSに敵う奴はいない

0690デフォルトの名無しさん (ワッチョイ 1e01-EjCi)2024/04/21(日) 10:27:21.32ID:Y4YQdA//0
Windows11は最初から32bit版が無いんだよな…
ポインターに64bitも必要ない
36bit(64GB)有れば十分
farとnearポインター復活しても良いよw

0691デフォルトの名無しさん (スフッ Sd70-mNzP)2024/04/21(日) 10:58:55.51ID:WM7IEXRid
win10使ってるけどOffice 97をバイナリコピーして使ってるぞ、とうとう11では動かんのか…?
主にExcel使うが関数の数は劣ってもヘルプは古い方がよく出来てて一般ユーザとしては好み、一々ブラウザ起動されてたらい回しは嫌だ

0692デフォルトの名無しさん (ワッチョイ d463-t3I8)2024/04/21(日) 11:03:42.61ID:z3GhIJnT0
可変長サイズのポインターは斬新

0693デフォルトの名無しさん (ワッチョイ 66ad-6Ywt)2024/04/21(日) 13:02:16.05ID:kDNr1IJ/0
Office97は32bitだから動くでしょ
駄目なのはWindows3.1までの16bitアプリ

じぶんもフリーソフトをいくつか64bit化したけどほとんど修正してない
早めにUnicodeにしてたおかげもあるかな

0694デフォルトの名無しさん (ワッチョイ 7f63-Ufki)2024/04/29(月) 16:02:47.44ID:JmumYEsm0
16bitアプリって、今も残ってたっけ?

0695デフォルトの名無しさん (ワッチョイ 8732-Q9m/)2024/04/29(月) 17:53:08.72ID:Mi5d5RVO0
あえて使う人もあんまりいないだろうけど、メンテナンスが止まってる(32bit 化、64bit 化されない)ようなソフトを使いたいってことはそれなりにあることじゃないの。
メーカーがつぶれて消えたりするのもよくあることだしな。

0696名無し兎と鰻の大乱闘 (ワッチョイ dffd-02Vv)2024/04/29(月) 19:42:16.62ID:Yc7GJpMD0
そもそもしーげんごってなに?

0697デフォルトの名無しさん (ワッチョイ dfad-jQnA)2024/04/29(月) 19:53:54.99ID:D5HYHAbC0
アプリは32bitだがインストーラが16bitなのが結構あるらしい

0698デフォルトの名無しさん (ワッチョイ 7f63-Ufki)2024/04/29(月) 20:59:16.06ID:JmumYEsm0
もしもそんなのがあったら、メチャクチャ話題になってると思うよ

0699デフォルトの名無しさん (ワッチョイ dfad-b946)2024/04/29(月) 22:45:20.14ID:c1TFMEcy0
知り合いにエミュレータ入れたりして凄く苦労してロータス123を動かして業務で使っている人が居る。

0700デフォルトの名無しさん (ワッチョイ 8732-nVjz)2024/04/30(火) 00:46:15.48ID:b4FWQSR70
使うのに手間はあるとはいえエミュレータが成熟してしまったので
かなり古いソフトウェアを動かしたいならそっちでやれと言えてしまうようになったとも言える。
Windows の互換性維持システムも結局はエミュレータをサブシステムとして
組み込んでるようなもんだしな。

0701デフォルトの名無しさん (ワッチョイ c7fa-WbgR)2024/04/30(火) 10:07:58.44ID:XgZjmbIB0
>>697
ファーレントゥーガとかそのパターンだね

0702デフォルトの名無しさん (ワッチョイ df79-V7Lt)2024/04/30(火) 19:37:21.97ID:6siWZQQV0
なんで16bitの話になったのか理解不能

0703デフォルトの名無しさん (ワッチョイ dfad-b946)2024/05/01(水) 16:53:57.29ID:udfiR5VM0
>>686の辺りから?

0704デフォルトの名無しさん (ワッチョイ c7bb-x43a)2024/05/01(水) 19:51:41.60ID:nIC3qyB/0
プリプロセッサでモジュール作れるようになるとC++使わなくてもCで十分だな
もっと早めにマスターするべきだった

0705デフォルトの名無しさん (ワッチョイ df79-V7Lt)2024/05/02(木) 23:28:34.67ID:gN+cVuNV0
CでCOMやれって言われても困るし
逆にC++のがマシってのはその程度か

0706デフォルトの名無しさん (ワッチョイ 5ff4-NzXl)2024/05/03(金) 11:04:22.77ID:RJtMknPi0
cでもできるってのと、c++使ったほうが楽ってのでは全然意味違う
チームで混乱を招くという理由以外でのc++ディスりは、大抵理解不足によるアレルギーから来るヒスのことが多い
まあ、そういうヒス起こす人が多いからチームでは使用禁止とかになっちゃうわけだから、り繋がってはいるんだけど

0707デフォルトの名無しさん (ワッチョイ 7f63-Ufki)2024/05/03(金) 11:08:15.33ID:9ebiuCIb0
チャンスあると自分語りを始めるのは、病気だぞ

0708デフォルトの名無しさん (ワッチョイ 5ff4-NzXl)2024/05/03(金) 11:51:54.49ID:RJtMknPi0
どういう理論だよ
普通の欲求だろ

0709デフォルトの名無しさん (ワッチョイ bf4f-O08P)2024/05/03(金) 12:00:23.89ID:KP5VxXzU0
普通じゃなくてガキの欲求

0710デフォルトの名無しさん (ワッチョイ 2701-Ufki)2024/05/03(金) 13:30:44.34ID:vhm3euJk0
リーナスはガキ

0711デフォルトの名無しさん (ワッチョイ c791-WbgR)2024/05/03(金) 14:49:42.61ID:lW+ShOaq0
>>708
なわけ無いだろ
我慢ができないのはただのガキだぞ

0712デフォルトの名無しさん (ワッチョイ 5ff4-NzXl)2024/05/03(金) 16:16:10.22ID:RJtMknPi0
>>711
そうやって我慢できずに突っかかってきてるのもどうかと思うけどな…

0713デフォルトの名無しさん (ブーイモ MMcf-O08P)2024/05/03(金) 16:35:03.08ID:8UCXCtC4M
linuxカーネル縛りと趣味以外でc言語使うってどういうプロジェクト?
実際仕事でそういう人いる?
組み込みでも今時c++使えるだろ

0714デフォルトの名無しさん (ワッチョイ e701-E0+q)2024/05/04(土) 01:34:33.71ID:fPXjXaJw0
洗濯機や電子レンジなどは Cが最適じゃなかろうか

0715デフォルトの名無しさん (ワッチョイ dfac-R43V)2024/05/04(土) 01:40:48.74ID:nSEmjq+y0
メモリ構成が非常に小さいシステムの場合Cじゃない?
8bitのPICとか

0716デフォルトの名無しさん (ワッチョイ ff2d-y8PE)2024/05/04(土) 17:05:29.45ID:VOfnZKej0
こういうの考えたんだけどどうだろう?
実用性無いだろうか

#include <stdio.h>

typedef void (*exception_handler)(void);

void register_exception_handler(exception_handler handler)
{
handler();
}

void exception_occurred()
{
printf("例外が発生しました。\n");
}

void may_throw_exception(int condition)
{
if (condition) {
register_exception_handler(exception_occurred);
}
}

int main()
{
may_throw_exception(1);

return 0;
}

0717デフォルトの名無しさん (ワッチョイ bf4f-O08P)2024/05/04(土) 17:59:35.95ID:pTi4k8MI0
ネタにしてもつまんない

0718デフォルトの名無しさん (ワッチョイ e7f0-yODy)2024/05/04(土) 18:34:27.18ID:XXil6xAz0
>>716
例外でもなくでもなくて草
Cで例外起こしたいならsetjmp/longjmpでやると決まってる

0719デフォルトの名無しさん (ワッチョイ 7f63-Ufki)2024/05/04(土) 18:38:32.56ID:0cPYdG0t0
あれは例外なのか?

0720デフォルトの名無しさん (ワッチョイ c7bb-x43a)2024/05/04(土) 18:45:30.78ID:TbdOZmgm0
例外処理やりたいならsetjmpでも使えば

0721はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 8f32-uq6a)2024/05/05(日) 00:00:07.41ID:NN+M7fak0
>>716
「こういうの」とは何であるか説明が必要。
提示されたコードは関数 exception_occurred の呼び出しを回りくどくやっているだけで、
途中のメカニズムに意味がない。
(このコードでの使い方の範囲では。)

言葉で説明しづらいならこれが有用になるような使い方の例を示して欲しい。

0722デフォルトの名無しさん (ワッチョイ 5bf0-vK0W)2024/05/05(日) 00:01:55.61ID:5Yjpxxvd0
スタックの巻き戻しをどう実装するのか教えて欲しい

0723はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 8f32-uq6a)2024/05/05(日) 00:22:13.83ID:yEjzRI9b0
>>722
C の言語仕様の範囲内でやる方法は setjmp/longjmp のみ。
setjmp/longjmp を自分で書きたいってことなら
アセンブラ (またはインラインアセンブラや intrinsic 関数) を使って
スタックポインタ操作したりレジスタの待避・復旧などをやる必要があるが……。

モダンな処理系だと最適化だのなんだのの都合でスタックフレームを省略したりだとかもあるので
それらと協調しないとまともに動作しない。
たとえば gcc だと setjmp/longjmp の実体は
組み込み関数の __builtin_setjmp/__builtin_longjmp として提供されてる。
処理系自体の機能として持たないとちゃんと動作させられんのだ……。

0724デフォルトの名無しさん (ワッチョイ a6c9-XbOt)2024/05/05(日) 00:39:05.41ID:eNHKeT630
>>713
九州大学の人工衛星・イザナミ/イザナギは、mruby だから、C 言語

ベンチャーで上場したらしい

0725デフォルトの名無しさん (ワッチョイ 6a79-1zLe)2024/05/05(日) 03:04:42.71ID:vcr/Jmru0
Windows処理系の場合SEHがあるからsetjmp/longjmpをわざわざ使う事ないよ
というか外部ライブラリ等から例外を受ける場合SEH必須だよ

新着レスの表示
レスを投稿する