探検


C言語なら俺に聞け 164

2025/07/23(水) 15:30:01.81ID:eCR5cXRr0
(新スレ立ての際上記コマンドを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言語なら俺に聞け 163
https://mevius.5ch.net/test/read.cgi/tech/1721137434/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2026/05/15(金) 11:53:46.63ID:0MfJ9N7a0
文字を扱うならcharを使うべき
signed charだのunsigned charだのは1バイトの整数型と思った方がいい
2026/05/16(土) 17:03:17.75ID:Y8cRFx1T0
7ビットでおさまる文字は良いけれど
上位ビット立っている文字種は困らない?
359デフォルトの名無しさん (ブーイモ MM43-yWhV)
垢版 |
2026/05/16(土) 17:30:24.35ID:MrEcfzEPM
お前時間止まりすぎだろ
そんな語り尽くされた話を今気づいたかのように話を始めるのやめろ
2026/05/16(土) 21:33:03.91ID:1z78jWA50
>>357
文脈を読んで。
整数やビットパターンとして扱いたいときの話をしてる。
文字の表現方法に踏み込まない不透明なオブジェクトとして扱える場合なら char でいいよ。
361デフォルトの名無しさん (ワッチョイ 31e9-KnQf)
垢版 |
2026/05/17(日) 05:40:36.26ID:sl2G9Doe0
K&Rの段階でcharはunsigned型と決めてやればよかったのに
362デフォルトの名無しさん (ワッチョイ 412a-kKnA)
垢版 |
2026/05/17(日) 10:28:52.26ID:PKYvqmfr0
俺に言われても
2026/05/17(日) 10:32:24.67ID:g2mY3F5I0
アセンブラのラッパーだから型がいいかげんなのは仕方ないんだよ
2026/05/17(日) 12:31:39.15ID:NJc/Pn5D0
charは8bit型ってことだったんじゃね
2026/05/17(日) 13:02:09.73ID:M7FvOBLK0
>>364
char のサイズは CHAR_BIT ビットだよ。
2026/05/17(日) 21:29:19.37ID:g2mY3F5I0
まあ、CPU毎に違うからな
367デフォルトの名無しさん (ワッチョイ 3185-Yf7n)
垢版 |
2026/05/17(日) 22:41:15.83ID:OSZDhB7K0
charが8bitじゃないCPUなんて今現在市販品であるか?
DSPぐらいだろ
2026/05/18(月) 09:54:36.44ID:5A1Ebijfa
>>357
>>360
u8, i8, char
2026/05/18(月) 12:16:57.49ID:uKn8mFhYp
>>367
要するにCPU依存なんだって自白してるよね?
2026/05/18(月) 14:38:48.31ID:XfPyXw1F0
>>367
ほとんどないってことと規格として決められることは別じゃないかね?
この先も8bitとは限らないわけだし
2026/05/18(月) 14:55:23.71ID:NqZygYzK0
話の流れでK&Rの段階の話だと思ったんだけど
そこ頃からCHAR_BITってあった?
372デフォルトの名無しさん (ワッチョイ 3185-Yf7n)
垢版 |
2026/05/18(月) 14:55:54.44ID:79PPBrmT0
>>369
DSPをCPUとはいわないんたけど
役割違うよね
そんなことも知らないの?
ちなみにどこのカス業界にお勤め?
2026/05/18(月) 15:57:46.69ID:NbVShN5fp
>>372
世間知らずは世にあるCPUのどれだけを知ってるのかw
374デフォルトの名無しさん (ワッチョイ 3185-Yf7n)
垢版 |
2026/05/18(月) 16:24:30.64ID:79PPBrmT0
>>373
お前がCHAR_BITが8じゃない現役CPUを一つあげれば勝ちじゃん
言えない時点で負けじゃん
やっぱカスじゃん
2026/05/18(月) 16:41:03.71ID:PRckj/wB0
>>371
K&R (初版) を基準とするのだとしたら CHAR_BIT は無いが char が 8 ビットとは限らないことは明記されている。
というか主要 (?) なアーキテクチャでのサイズが表で書かれている。
 ・ DEC PDP-11
 ・ Honeywell 6000
 ・ IBM 370
 ・ INterdata 8/32

規格化されて以降の文面では char (1 バイト) の大きさは「アドレスを振ることが可能な単位」であることに意味があるように読める。
2026/05/18(月) 19:46:06.62ID:NqZygYzK0
>>375
そうなんだね
てっきり1Byteは8bitだと思い込んでた
2026/05/18(月) 21:55:45.56ID:3c564FzDa
僕の持ってるK&R2ndの表紙には紙テープを逆コの字に折ってCの文字を表現してたけど、テープは6ビットだったな
2026/05/19(火) 01:09:22.40ID:Ss3L5FPF0
なるほどあれは紙テープだったのか
1バイト6ビットともなるとアルファベットは小文字だけ、記号は一部トライグラフを活用していそうな世界
2026/05/19(火) 08:08:14.85ID:ifCZ5qyh0
>>378
昔は出版用 (紙面用) とコンピュータ入力用が違う表現を持つことも普通だった。
Wikipedia のストロッピングの項目の中に ALGOL68 の異なる表現の例があるのが分かり易い。
https://w.wiki/NbxY#Examples_of_different_ALGOL_68_styles
機種ごとの違いが大きい時代だとダイグラフやトライグラフをプログラミング言語に盛り込むよりは機種ごとのストロッピング規約で運用するほうが自然だったかもしれない。

K&R 初版で言及がある四機種を先述 (>>375) したが、この内で Honeywell 6000 が採用していた文字コード (で表せる文字セット) には波括弧が無かったらしくダイグラフでなんとかしていたらしい。
K&R に説明を入れてないのはその時代にはそういうこともあるというのは説明するまでもない普通のことだったからだろう。
もちろん機種個別のマニュアルには書いてあったと思うけど資料を見つけられない……
380デフォルトの名無しさん (ワッチョイ 4171-aW1T)
垢版 |
2026/05/19(火) 08:50:19.48ID:vS7k2vNm0
>>379
さすがだなあ
1バイトが6ビットのマシンで開発した経験とかあるの?
2026/05/19(火) 09:09:40.19ID:ifCZ5qyh0
>>380
実際にその時代のコンピュータに触ったことはないが、 Scheme (Lisp 系言語のひとつ) に関心ある者として原初の Lisp が実際にはどのように入力されていたのか調べたことがあってストロッピングの概念は知っていた。
個々の機種がどのような文字コードを使っていたのかは今調べた。
2026/05/19(火) 12:59:33.64ID:Ss3L5FPF0
>>379
へぇ~、同じ言語にも訛りで対応とは想像できなかった
2026/05/19(火) 14:20:55.66ID:XEop7MyW0
Cはなかったが36ビットがワードなコンピュータなら触ったことがある
ASCIIは9ビットでクォーターワードという扱いでワード内に4文字入れていた
TSSもあったがバッチ処理はパンチカードで紙テープはそれ以前の時代
2026/05/21(木) 22:14:15.30ID:sThrjq7w0
昔ROM焼いてもらうのに紙テープで持ち込んだ
2026/06/17(水) 21:45:49.47ID:BF9FC81n0
charサイズの話が出ていたけど、1バイトがが8ビットと定義されたのが21世紀に入ってからと言うのに、大いに驚いた。
私は80年代初頭にベーシックマスターJrという機種で入門したのだけど、パーソナルな世界では8ビット以外見たこと無かったので・・・。
それ以外のサイズはどこか遠い世界の話だと思っていた。
そもそもコンピュータは趣味なので業務用機の世界をまるで知らないのだけど、8ビット以外は(今も?)当たり前なの?
それでもコードを使い回せるC言語もすごいなあ。
2026/06/18(木) 19:24:17.43ID:uAQWbfEk0
漢字も一文字1キャラクターで扱える言語があったような
2026/06/19(金) 00:12:24.64ID:5VF0kmgE0
MSX-BASICでは1バイト文字コード0x80以降に割当てされた漢字や罫線、トランプ記号がそのまま扱えたね
パソコン自体の規格であり、キーボードからの直接入力も可能、GRAPHキーと組合せて押下H/M/S/¥
が時/分/秒/円に対応等だ
2026/06/19(金) 00:36:28.72ID:Kwk/A3Jw0
松下だっけか?力入れてたの
389デフォルトの名無しさん (ブーイモ MM62-VrtN)
垢版 |
2026/06/19(金) 20:50:35.23ID:tVA1IlDUM
>>385
ネットワークの世界だと7ビットだったからな
2026/06/19(金) 21:14:57.02ID:v0lFF/lo0
>>385
きっと嘘だと思う
どうしても議論に負けたくなかったとかなんじゃね
2026/06/19(金) 21:28:59.73ID:Kwk/A3Jw0
初期のパソコン通信では使用する端末の制約で
漢字こそ扱えなかったが、半角カタカナは扱えてたよ。
その性でujisとは相性が悪かったな。
2026/06/20(土) 08:49:42.81ID:S5q+oDl70
8 ビットを一塊にすることを明瞭に表したいときのためにオクテット (octet) という単位があって、ネットワーク系の規格では今でも使われてる。
新しいところだと HTTP/2 あたりでも。
https://datatracker.ietf.org/doc/html/rfc9113
1 バイトが 8 ビットとは限らない時代のなごりだね。

ネットワーク系ではたぶん割と初期から 8 ビットを単位にしてたと思うけど 1 ビットをパリティに使ったりとかで全体をデータ用には使えなかったりはした。
393デフォルトの名無しさん (スフッ Sd62-qBjn)
垢版 |
2026/06/20(土) 12:06:59.94ID:rzlVrPJ7d
4bitCPU全盛の頃は既に
1byte=8bitsという概念だったのだろうか
4004の機械語で具体的に解説してくれ
2026/06/20(土) 12:20:10.17ID:99MORhoY0
他でやれよ
2026/06/20(土) 12:40:16.87ID:xfVhrEnY0
4bitCPU時代にはC言語は存在しなかったんじゃね
396デフォルトの名無しさん (ワッチョイ 6d70-VrtN)
垢版 |
2026/06/20(土) 18:58:47.28ID:bhwCfwH30
UNIXはワークステーションだからな
2026/06/20(土) 21:28:53.98ID:onhoWd/h0
PDP11:1970〜
i4004:1971.11.15〜
C言語:1972〜
2026/06/20(土) 21:41:37.61ID:lwGjS9LT0
4004用のosはなかったと思う
osのない環境でコンパイラは無理ではないか?
399デフォルトの名無しさん (ワッチョイ 6d70-VrtN)
垢版 |
2026/06/20(土) 21:46:56.07ID:bhwCfwH30
C言語のint型は16ビットだった
標準化以降は環境依存ではあるが、short int型と明記することになった。

なんかパソコンを前提としたCPUの話は違和感しかない。
2026/06/20(土) 21:51:42.40ID:lwGjS9LT0
intのサイズはCPU依存だったと思う
2026/06/21(日) 08:24:50.36ID:rK7+Lw+D0
>>398
PCしか知らないゆとりか?
PCのセルフが例外的であって、PC以外ではほぼクロスだぞ
2026/06/21(日) 08:47:01.48ID:UodCcXrk0
4004のクロスがあるなら示して
2026/06/21(日) 09:11:43.73ID:Fn1WS7Eh0
>>402
こういう噛み合わないことを言い始めるのを見るとイライラするから指摘しておくが、文脈を読んで。
>> 401 は「OS のない環境で」ということに対してそんなことは理由にならんという主旨で書かれてる。
4004 のクロス開発環境が実在するかどうかは重要ではない。
2026/06/21(日) 09:20:35.87ID:UodCcXrk0
4004って1981年には製造終了してますけど
405デフォルトの名無しさん (ワッチョイ 5f7a-AxUA)
垢版 |
2026/06/21(日) 09:54:46.84ID:6BMlAxTG0
> 4004シリーズLSIの開発が終了し,1970年11月下旬に帰国した。
>私の本来の仕事,プリンタ付き電卓の開発が始まった。

> ただ,プログラミング言語の開発までは手が回らず,
>プログラミングには機械語を使用した。インテルでは,
>電卓用プログラムの完成後にROMのマスク情報をインテルに
>渡す手段を用意できなかった。そこで,プログラムの
>マシンコード(命令)や定数に相当するROMのバイト情報を
>ROM内のマスクに対応する位置にマークを付け,ROMのマスク
>情報をインテルに送ることを決めた。

> 最終的な電卓用プログラムを作成し,1971年3月に完成した。
>プログラムの総容量は1Kバイト以内だった。電卓の応用
>プログラムは約250バイト,電卓向けマクロ命令用プログラムは
>約400バイト,電卓向け言語用インタプリタとキーボード制御と
>プリンタ制御は約350バイトとなった。平方根演算機能は
>オプション機能とした。

https://xtech.nikkei.com/it/article/Watcher/20070702/276468/
嶋 正利
406デフォルトの名無しさん (ワッチョイ 5f7a-AxUA)
垢版 |
2026/06/21(日) 09:57:09.11ID:6BMlAxTG0
当時4004で使えた開発ツールはMSのマクロアセンブラくらいです。
407デフォルトの名無しさん (ワッチョイ 5f11-In1B)
垢版 |
2026/06/21(日) 20:25:15.39ID:tvGXI5xi0
>>400
それはあなたが知らなかっただけ
ANSIではint型は32ビットではなかった
408デフォルトの名無しさん (ワッチョイ 5f11-In1B)
垢版 |
2026/06/21(日) 20:25:54.26ID:tvGXI5xi0
>>400
それはあなたが知らなかっただけ
ANSIではint型は16ビットではなかった
409デフォルトの名無しさん (ワッチョイ dfe2-VAvK)
垢版 |
2026/06/22(月) 15:29:32.59ID:gBe6h/Yh0
i4004でインタプリタとかマクロとか既にあったんか
ていうかi4004がPDP11より後なのはびっくり
410デフォルトの名無しさん (ワッチョイ 5f1e-In1B)
垢版 |
2026/06/22(月) 20:04:51.60ID:2VnhilhX0
C言語ができる前のUNIXの話を持ってくる人間は意味のない話をしていると思う。
2026/06/23(火) 15:33:52.90ID:+zGSD+Kp0
どんなにがんばっても1バイトを7ビットってことにするのは無理そう
2026/06/23(火) 18:11:47.04ID:CCEweHpZ0
CPUが7bitレジスタ仕様でないと作る意味がなさそう。
2026/06/23(火) 18:58:44.74ID:9yxUF3mx0
当時はデータ部7ビットの通信データとCPUが扱う8ビットのデータどちらもバイトと呼べて楽でしたよ
2026/06/23(火) 19:41:21.78ID:+Smxcnk50
いきなり通信プロトコルの話?
2026/06/24(水) 00:43:27.39ID:biqyVSqi0
はい、1バイトのビット数の話題が出ていたようでしたので、それに関わる通信処理絡みの話でした
2026/06/24(水) 08:20:52.68ID:7B+NjynI0
C の規格としては、昔はともかく ANSI 以降は 1 バイトは 8 ビット「以上」ということになってる。
もしハードウェア的に 7 ビットが単位になるようなアーキテクチャだったら C の規格に準拠するには 2 つまとめて 14 ビットを 1 バイトという扱いにするしかない。
規格準拠を諦めたほうが楽だと思うけどね。
417デフォルトの名無しさん (ワッチョイ 5f9b-In1B)
垢版 |
2026/06/24(水) 20:28:59.61ID:hOfnPwRy0
>>416
数値でも最上位の1ビットを符号にしている時点で7ビットでやりくりしていると認めないと
2026/06/24(水) 20:51:46.71ID:LCSsQsND0
虚数も扱えると良いね
2026/06/24(水) 21:17:01.38ID:tIiwUevU0
C に虚数型 (_Imaginary) はあるよ。
オプショナルな規定だから無い場合もあるけど。
2026/06/25(木) 00:28:56.65ID:9cBNw1U0a
>>417
正負を合わせたら8ビットでは
421デフォルトの名無しさん (JP 0H7f-VAvK)
垢版 |
2026/06/25(木) 13:19:30.59ID:wlWeKQvTH
N81XとかN71Eとかかな
2026/06/26(金) 17:55:59.24ID:QQm5oaei0
チートエンジンのエンティティリストのアドレスとオフセットってなんですか?
この二つを足すとポインターアドレスになりゲームを再起動しても普遍のアドレスになるみたいなんですけど
423デフォルトの名無しさん (ワッチョイ 5f1c-XTBv)
垢版 |
2026/06/26(金) 20:07:01.29ID:punniL7v0
AI時代に国語力のないやつ
2026/06/26(金) 20:07:25.85ID:GTFUrg+O0
チートエンジンてこれのことかな?
https://www.cheatengine.org/
うさみみハリケーンと OllyDbg で満足してたから知らなかった……
よいソフトを知った。ありがとう。

メモリって malloc とかで確保するわけだけどそれって起動するたびに違うアドレスだったりするでしょ。
でもその確保した中でのメモリのレイアウト (それぞれのデータのオフセット) は普通は同じようにする。
だからベースアドレスとオフセットの組で扱えば便利だねってことだと思う。
2026/06/29(月) 12:30:45.23ID:GErfEMVP0
セグメント、オフセットという話なのか?

リアルモードで動くプログラム久しぶりに聞いた
426デフォルトの名無しさん (ワッチョイ 4d17-oVTx)
垢版 |
2026/06/29(月) 13:12:10.08ID:mUiv8gBt0
アドレスのランダマイズ対策だろ
ゲーム改造していきりたいキッズだから無視でいい
2026/06/29(月) 13:15:51.44ID:mx9k7qx20
ツールのドキュメントの頭のほうにサポート対象が Linux, Mac, Windows って書いてあるでしょ。
いずれもリアルモードでは動かない。
2026/06/29(月) 13:17:21.00ID:mx9k7qx20
ランダマイズというわけでなくてもポインタを辿る必要のあるデータ構造というのはごく普通にある話だろう。
2026/06/29(月) 13:37:26.74ID:J4prsIXXa
仮想メモリでもセグメント(と言っても間接になるけど)とオフセットだろ
2026/07/01(水) 23:32:17.69ID:xfe/unY10
>>417
1バイトの中に符号を加えてはならないという決まりはない
431デフォルトの名無しさん (ワッチョイ 4d61-d4sa)
垢版 |
2026/07/02(木) 03:51:24.19ID:4sqxhRzV0
>>430
正確には負の数を表現するときに1ビットを使うというだけの話
2026/07/02(木) 17:08:32.56ID:/9LRQjrh0
その辺はCPUが提供する命令セット次第
433デフォルトの名無しさん (ワッチョイ 4dd8-d4sa)
垢版 |
2026/07/02(木) 17:50:38.25ID:4sqxhRzV0
CPUが提供するという言い回しが奇妙
2026/07/03(金) 07:19:12.81ID:2t9Z1Cme0
まあ、キャリーフラグやなんやら考えたらCPUが提供するってのはあながち間違いじゃ無いからねぇ
2026/07/03(金) 10:02:27.87ID:YR/4zdQx0
符号つき整数の内の 1 ビットが符号ビットであるというレイアウトは C の仕様として保証してる。
それを各 CPU の命令セットの範囲内でどう実現するかは知らんけど。
436デフォルトの名無しさん (ワッチョイ 4dfe-d4sa)
垢版 |
2026/07/03(金) 17:53:14.39ID:zLCCyepo0
>>435
CPUそのものにあるかどうかは別にして3D計算だと負の数専用の命令やレジスタは存在しているんじゃないのか?
437デフォルトの名無しさん (ブーイモ MM22-oVTx)
垢版 |
2026/07/03(金) 19:20:07.64ID:AWa0JhQyM
その想像で存在を仮定して質問するのはどういう知能なの?
438デフォルトの名無しさん (ワッチョイ 4dfe-d4sa)
垢版 |
2026/07/03(金) 20:40:19.52ID:zLCCyepo0
C言語の仕様とハードウェアは関係ないからな
2026/07/03(金) 20:41:58.65ID:t8AqdbS00
コンパイラがハードウエアと無縁だなんて、初めて聞いた
2026/07/03(金) 20:44:55.83ID:TaTerZcza
何のための2の補数…
2026/07/03(金) 22:07:27.54ID:YR/4zdQx0
>>436
ここでは C の仕様の話であることを強調する意図で CPU のことは知らんと述べた。
命令セットの中に有ろうと無かろうと符号つき整数の内の 1 ビットは符号ビットだ。
2026/07/04(土) 05:14:02.89ID:JSDYVJp40
また1バイトは7ビットだって言ってるキチガイがいるの?
443デフォルトの名無しさん (ワッチョイ 5ee2-tRrs)
垢版 |
2026/07/04(土) 13:25:42.16ID:C/MUGRLI0
C言語にキャリーフラグの状態を取得する関数が無いのはなぜですか?
2026/07/04(土) 13:40:34.51ID:DKWxpQGc0
自分で作る
Cに出来ないことはない
2026/07/04(土) 14:20:41.45ID:q0Ja95980
signed と unsigned があるやん
で、どちらも8ビットだよん
446デフォルトの名無しさん (ワッチョイ 4d4c-d4sa)
垢版 |
2026/07/04(土) 14:21:22.62ID:YYWloYLh0
>>444
できることと効率がいいかどうかは別物
2026/07/04(土) 16:02:11.99ID:DKWxpQGc0
効率の良い方法でどうぞ
2026/07/04(土) 16:10:52.16ID:q0Ja95980
>>443
C#とかさ、オーバーフローしたらエクセプション出して落ちるけど
あれ、地味に要らない機能だよなって思う
449デフォルトの名無しさん (ブーイモ MM22-oVTx)
垢版 |
2026/07/04(土) 17:01:01.65ID:u2S8KajNM
>>443
標準になってないが普通コンパイラがintrinsic提供してる
高速な多倍長整数を自作できてようやくC言語中級レベル
450デフォルトの名無しさん (ブーイモ MM22-oVTx)
垢版 |
2026/07/04(土) 17:02:26.84ID:u2S8KajNM
>>448
それはお前がエンジョイ勢だから
2026/07/04(土) 19:21:23.15ID:DKWxpQGc0
>>449
足し算引き算はなんとか
かけ算も頑張ればできそうな
割り算は、ちょっとやっかいかも
2026/07/05(日) 10:21:02.80ID:w8NJleMZ0
かつてubasicというソフトがあって、
今もあるかは調べていないが、
多倍長演算が出来て、結構使える。
πを1000桁まで計算するサンプルが掲載されていた。
2026/07/07(火) 00:16:27.28ID:73yWDig30
開発効率より実行速度命やろ
2026/07/07(火) 00:19:47.04ID:FD/zZiF10
今でもCに固執する変態は実行速度命
2026/07/07(火) 08:59:20.45ID:wvI2595C0
世界を変革しているのは変態パワーだぞ
2026/07/08(水) 17:38:39.44ID:dyZTLEHZH
>>439
C言語の仕様は抽象マシンにおいてどう動くかという形でしか定められていない
コンパイラはそれを環境に合わせて自由に実装することが許されているので、コンパイラの仕様はC言語の仕様では定められていない
レスを投稿する


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