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
2023/10/30(月) 17:30:23.87ID:I7fISnX+0
2get
2023/10/30(月) 17:31:34.22ID:I7fISnX+0
C23 の最新ドラフトは N3096 に更新されてるでよ
https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3096.pdf
2023/10/30(月) 19:05:35.74ID:i+814vap0
>>1

乙です
2023/10/30(月) 19:40:56.11ID:PfgrnUqg0
いまどきPlain Cが使われる状況なんて限定的なんだから
高級アセンブラとして堂々としてればいいんですよ
2023/10/30(月) 20:35:57.87ID:YnJZjusKM
トッピングは何になさいますか?
7デフォルトの名無しさん (ワッチョイ 2901-CP9B)
垢版 |
2023/10/30(月) 21:04:03.03ID:re6vYA8I0
リモートワーク制度が削減・廃止されたら「転職や別案件を探す」が4割--
「Offers」登録者調査

ITエンジニア/デザイナーの副業・転職サービス「Offers」を提供するoverflowは、
同社が運営する「Offersデジタル人材総研」にて「リモートワーク実態調査2023」
を公表した。
これによると、リモートワークになり、5人に1人が引っ越したと回答した。そのうち、
現職でリモートワーク制度が削減・廃止された場合、「転職や別案件を探す」という
回答が44.0%にものぼった。一方「会社と交渉する」という回答は40.0%、
「引っ越さず受け入れる」が12.0%となった。
さらにリモートワークを希望している理由として「通勤時間が無駄だと感じている」が
87.7%でトップとなった。このほか「個人の時間ができる」(62.3%)、「副業を続け
やすいから」(39.6%)、「子育てができる」(35.8%)と続いた。
2023/10/31(火) 09:59:32.82ID:DBRUqQAF0
前スレではちみつさんが書いてくれたリンク見ました。thx
https://go.dev/tour/flowcontrol/13

曰くGOの defer は
deferred function calls 遅延関数呼び出し で、関数脱出時にlast-in-fast 順で呼ぶもの

とすると、C言語でdeferの仕様追加要求は却下すべきです。リンクリスト1個作れば済む話で、実際そうしてる人も多数いるだろうに、既存プログラムでdeferというシンボルを使ってるのをコンパイル通らなくしてまで仕様追加するのは利益が小さすぎる。

エラー処理で使うかは、直接関係ないですね。そうしたきゃすればいいけど、私は読みやすいコードとは思わない、です
9デフォルトの名無しさん (ワッチョイ 937c-cQ99)
垢版 |
2023/10/31(火) 12:23:13.16ID:9gnUDJNP0
>>8
>関数脱出時にlast-in-fast 順で呼ぶもの

>とすると、C言語でdeferの仕様追加要求は却下すべきです。

この「とすると」からの繋がりが意味不明。

>リンクリスト1個作れば済む話で、

だから何?
「却下 *すべき*」の理由になってない。
採用するほどでない、なら理解できる。


> 既存プログラムでdeferというシンボルを使ってるのをコンパイル通らなくしてまで仕様追加するのは利益が小さすぎる。

ここでのdeferは機能についての名称として使ってるだけで、そのままの文言じゃないことを理解できてないみたいだ。
2023/10/31(火) 15:34:02.36ID:DBRUqQAF0
>>9
話が通じてないと思います
C言語の建設的な議論なら応じたいけど
2023/10/31(火) 15:38:26.62ID:/TBQ8etM0
ブログ立てて、そこでやれ
2023/10/31(火) 15:39:17.26ID:803Tgyvr0
>>8
どうせコンパイルオプションで無効にすれば使えるだろ
13デフォルトの名無しさん (ワッチョイ 937c-cQ99)
垢版 |
2023/10/31(火) 16:18:39.83ID:9gnUDJNP0
>>10
おまえの感想 >>8 のどこが建設的な議論よ?
2023/10/31(火) 16:24:39.17ID:1/1CCAX60
ボクの考えた最強のC言語を語るスレはこちら
【超高速】C/C++に代わる低級言語を開発したい 8
http://mevius.5ch.net/test/read.cgi/tech/1345730580/
2023/10/31(火) 16:36:27.63ID:RXeEqnvz0
deferは(素のものをじゃなくてもう少し高機能な)プリプロセッサで対応出来る
breakやreturnの直前にdeferの内容を全部コピーしとけばいいだけ
まぁそれ言い出すと、C++をCに変換するプリプロセッサが有れば全て解決だがなw
2023/10/31(火) 16:37:42.80ID:DBRUqQAF0
ただのどこかのオッサンの意見が気に食わんなら別にそれでもいいよ…

各自自分の考えを語ればいいじゃん、そんな食いつくくらいならなんか一つくらいは「自分のアイデア」あるんでしょ?何もないの?
2023/10/31(火) 16:39:39.94ID:DBRUqQAF0
>>13
既存の「正しいプログラム」が「正しいプログラムであり続ける」

そんなにおかしいことかね
2023/10/31(火) 16:43:21.14ID:5ddE/sJo0
既に進行中の「建設的な議論」をご用意しました
以降の議論はこれを前提として積み重ねていただくようお願い申し上げます
https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2895.htm
2023/10/31(火) 16:43:26.09ID:5ddE/sJo0
既に進行中の「建設的な議論」をご用意しました
以降の議論はこれを前提として積み重ねていただくようお願い申し上げます
https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2895.htm
2023/10/31(火) 16:57:17.68ID:C1aTagsw0
>>19
なんか、機能はともかく見た目はだいぶ汚いコードになるね
21デフォルトの名無しさん (ワッチョイ 937c-cQ99)
垢版 |
2023/10/31(火) 17:12:55.99ID:9gnUDJNP0
>>17
全然おかしく無いよ。
互換性は非常に重要。

でもおまえは新しい機能は追加するなって言ってるだけだよね。
おまえの言い分だとプロトタイプ宣言必須になるのは、過去の「正しいプログラム」が正しくあり続けることできないから「却下すべき」案なんだよな。
22デフォルトの名無しさん (ワッチョイ 937c-cQ99)
垢版 |
2023/10/31(火) 17:17:03.54ID:9gnUDJNP0
>>21
プロトタイプ宣言とK&Rスタイルの関数定義がごっちゃになってるわ。
>>21 は回線切って首吊れば。
2023/10/31(火) 17:41:26.94ID:1/1CCAX60
>>19
俺はGOで組んだことないからそこに書かれてる処理系依存のtry/finallyのが馴染みがあるしスマートに見えるわ
キモい輩って世界中に居るんだな
2023/10/31(火) 17:59:35.29ID:iHc07kUm0
>>23
君は中傷せずに会話できないのかね?
2023/10/31(火) 21:23:39.92ID:DBRUqQAF0
21 と 22 のワッチョイとIDが同じで表現が口汚いのはどう解釈したらいいの?私には難しくて分かりませぬ
26デフォルトの名無しさん (スププ Sd33-wFsA)
垢版 |
2023/11/01(水) 03:27:47.22ID:3HySGS93d
いつもの復オジωωω
スルー決定ωωωωωωωωω
2023/11/01(水) 07:56:22.02ID:9FKdtRs60
容認→警告→禁止推奨
となった仕様が幾つあったか・・・。
28デフォルトの名無しさん (ワントンキン MM53-wL8D)
垢版 |
2023/11/01(水) 09:43:55.98ID:g4eyJzirM
言語の設計思想と立ち位置考えれば手を入れる必要ないでしょ
細かいのはあるにしても関数プロトタイプの導入、データ型の追加、stdioのセキュリティ強化くらいでCとしては充分
構文追加とかバカすぎてANSI Cもまず取り込まんよw
29デフォルトの名無しさん (スプッッ Sd73-cQ99)
垢版 |
2023/11/01(水) 12:36:29.63ID:YeBzjhT2d
>>28
>細かいのはあるにしても関数プロトタイプの導入、データ型の追加、stdioのセキュリティ強化くらいでCとしては充分

その挙げ句MISRA-Cみたいなのがでてくる。

>構文追加とかバカすぎてANSI Cもまず取り込まんよw

C23の属性とか知らんの?
2023/11/01(水) 13:21:32.97ID:DFYs67SD0
c23だと属性以外にも
enum Colour : char {
Red,
Green,
Blue
};
とか
auto i = 123L;
とかも構文変更になる
constexprもコンパイラにとってはかなり大きい
文字列のハッシュ値の計算とか、コンパイル時にCのコードを実行できる
2023/11/01(水) 13:30:10.50ID:DFYs67SD0
clangとかはconstexprを使わなくても、最適化で勝手に整数に置き換わってるとか普通に有るけどねw
constexprはそれを確実に保証出来るので、精神衛生上良い
2023/11/01(水) 15:17:19.83ID:m2/+vlXa0
>>30
C23 の constexpr は関数には付けられない。
高度なコンパイル時計算をするものではない。
2023/11/01(水) 17:07:45.92ID:DFYs67SD0
>>32
なるほど!ちょっと中途半端な状態なんだな…
2023/11/01(水) 17:37:30.95ID:m2/+vlXa0
C++ の const 指定は初期化子が定数 (定数式) なら指定が付けられた変数も定数になるという規則なんだが
C の const は単に書き換えが禁止されるだけで定数になることはない。
(処理系の拡張によって一部の状況で定数扱いされることはある。)

C で定数を作ろうとすると #define を使うか enum を使うかしかなかったので
定数を定義するための直接的な方法として constexpr を導入しようという判断は納得できる。

定数を定義するまともな方法がないってのは C の明らかな欠陥なので
それを改善するという話でしかなくて、
コンパイル時計算を推進する野心の始まりってわけではないと思う。
なので constexpr については (遠い将来はともかく現時点では) これで完了。
中途半端ってこたぁないというのが私の感覚だな。
2023/11/01(水) 21:28:22.72ID:3Yx3b9sx0
気に入らないって理由なの?
2023/11/01(水) 23:56:27.24ID:DFYs67SD0
書き換えが禁止されても定数ではないとはこれいかに…
ここでいう定数はコードに直接埋め込まれる値ということだろう
ただ、C++もstatic constにしないと定数にならないと思ったけど、 constだけだとちゃんとメモリが確保されてると認識してたな
2023/11/02(木) 01:38:41.62ID:9IBKBW6G0
言語仕様上の用語としては定数は定数が要求される箇所に書くことが出来るもののことだよ。
単純な例で言えば、↓これは C++ ではアリだが C ではダメ。 (clang のデフォルトだと通してしまったりもするようだが……。)

const int foo = 1;

enum bar {baz = foo};

int main(void){}


もちろん最適化によって効率的な扱いがされやすくなることも多いにせよ、直接には求められてない。
定数であってもアドレス演算子は適用が可能だし、あくまでも変数なので見かけ上はメモリ上にある。

C++ で static const にしないと定数にならないというのはデータメンバのとき。
普通のデータメンバはオブジェクトを生成するときまで初期化されていないことになっているので
コンパイル時には確定できない。
2023/11/02(木) 09:19:48.35ID:kxWwWLf8a
const int foo = 1;

char hoge[foo];

int main(void){}
2023/11/02(木) 10:39:43.14ID:9MQ+Mdatd
2-pass コンパイルを実装してほしい

struct Fuga;
struct Hoge {
 struct Fuga *fuga;
};
struct Fuga {
 ...

こんなのとはおさらばしたい
2023/11/02(木) 10:41:08.08ID:VWEHs6hL0
そういう配列宣言でdefine使わないとどういうメリットがあるの?
41デフォルトの名無しさん (スプッッ Sd73-cQ99)
垢版 |
2023/11/02(木) 12:23:28.61ID:R1/lC5p9d
>>40
デバッグ時にシンボル表示できる。
2023/11/02(木) 15:51:31.06ID:7f41Qrwa0
もしかしてそれって、C言語の仕様じゃなくてデバッガとかビルドシステム側の機能改善でできそうって気がしませんか?


デバッガが読んで参考にできるかもしれない情報の豊富さの、なんとなくの並び

■実行形式にシンボル情報がない
■実行形式にシンボル情報がある
■ソースコードがあるけどデバッガはビルド情報知らない
■ソースコードがありデバッガがビルドの情報も知ってる

clang とかLLVM界隈ってそういう情報(どういう?ビルド時しか分からん情報というか?)をうまく使おうぜ方向を目指してる気がします、知らんけど
2023/11/03(金) 00:15:50.32ID:M0kCm9U+0
その例だとデバッグ時に数字で表示されたほうが安全じゃないか
44デフォルトの名無しさん (アウアウウー Sad5-g+2W)
垢版 |
2023/11/03(金) 08:01:57.68ID:rVBPlXQLa
>ソースコードがありデバッガがビルドの情報も知ってる

両方持ってるのは本物のプロと練習集の初心者素人と両極端に分かれそう
2023/11/03(金) 09:53:21.84ID:M0kCm9U+0
何言いたいんだか全くわからんが
2023/11/03(金) 10:12:48.61ID:R1GL3fqM0
生涯修行僧
47デフォルトの名無しさん (ワッチョイ 5324-zW/F)
垢版 |
2023/11/03(金) 11:32:32.93ID:8bACdtpR0
>>42
当然だけど規格の話じゃないよ
気がしませんかっていうかコンパイラとデバッガは何十年も前からそうやって連携してる
48デフォルトの名無しさん (ワッチョイ 5324-zW/F)
垢版 |
2023/11/03(金) 11:34:06.16ID:8bACdtpR0
>>43
数字で表示されないと具体的に何が非安全だと心配してるの?
2023/11/03(金) 21:59:08.35ID:M0kCm9U+0
次に実行するコード
>hoge[2] = 0;
となった時に
char hoge[foo];
と表示されてると次にfooの値を探すので二度手間
char hoge[1];
と表示されてれば一度ですむ
50デフォルトの名無しさん (ワッチョイ 827c-RmzB)
垢版 |
2023/11/04(土) 00:06:31.86ID:nDDUhOSB0
>>49
何のためにシンボル使うのかわかってないな。
実際の値と値の持つ意味について考えたほうがいいぞ。
2023/11/04(土) 00:27:05.12ID:uAZ656n/0
哲学には興味ない
なんのためにデバッガ使うかわかっているので充分だ
52デフォルトの名無しさん (ワッチョイ 827c-RmzB)
垢版 |
2023/11/04(土) 02:19:34.08ID:nDDUhOSB0
>>51
なんだ実際のデバッガ使ったことないのか。
普通はシンボルだけじゃなくて値も表示するんだが。
2023/11/04(土) 09:05:55.97ID:uAZ656n/0
ずいぶん安い煽りに転じたな
表示される情報は最小限のほうがいいんだよ
仕事で使っていればそうなる
2023/11/04(土) 10:09:07.16ID:lvandghk0
自分はデバッガ使う段階なら定数は具体値が出てくれた方がいいです

クロスコンパイル環境の構築からとか、Cならではの現場を辿って来た人と、今どきのGUIのデバッガが前提の人では話は合わなそう

マウスかざせば済むじゃんと思ってるのでは
55デフォルトの名無しさん (ワッチョイ 624f-ZTan)
垢版 |
2023/11/04(土) 11:08:29.93ID:dBvv25rw0
>>43にアンカうったら>>49で手間がどうこうって返ってきたんだがそういうのを安全って言うのか??
個人的には>>52と同感でマクロにしてもenumにしてもシンボル・値両方確認出来るもんだと思ってたから
どんな環境を想定して言ってるのかちょっとよく話が掴めないな
2023/11/04(土) 11:41:50.34ID:A3cqUl0FH
gdbなどのデバッガー使っていれば変数名と型と値は全て表示される
必要であれば配列は全ての要素を展開して表示も出来るけどな
2023/11/04(土) 11:48:12.60ID:4yCaeT2N0
printfでOK
58デフォルトの名無しさん (アウアウウー Saa5-CWlg)
垢版 |
2023/11/04(土) 12:21:19.50ID:KPpuxUoxa
シンボルの方が意味が判って良いけどな
「マウスかざせば良い」はその通り
場合によっては watch 式
2023/11/04(土) 13:42:18.42ID:p2sqqR+o0
デバッグ段階で意味がいるのか?
2023/11/04(土) 13:50:23.07ID:ocaBqo/v0
デバッガもその設計思想によるだろう。
ソースレベルデバッグなら言語の評価モデルに一致するのが自然だと思う。
そうなるとシンボルのほうが主役で、評価されれば値になるし一部は事前にわかる場合もある。

バイナリ寄りのデバッガなら
シンボル情報 (デバッグ情報) を扱えるものであってもまずそこにあるのは具体的な値であって、
値のほうをメインに見せる (シンボルは補助的な情報) のが筋に思える。
61デフォルトの名無しさん (ワッチョイ 827c-RmzB)
垢版 |
2023/11/04(土) 14:07:46.76ID:nDDUhOSB0
>>53
お前はアドレスさえわかれば関数名も変数名も不要なんだろうな。
俺はソースレベルデバッグを想定してたけどお前は違うの?
62デフォルトの名無しさん (ワッチョイ 827c-RmzB)
垢版 |
2023/11/04(土) 14:20:50.41ID:nDDUhOSB0
>>54
Cのソースレベルデバッガはgdbとそのラッパー(dddとかKDEのkdebug)しか使ったこと無いな。
お前は何使うの?gdb以外のデバッガにはちょっと興味あるかも。

あと、いつのまにかデバッグの話にすり変わってるけど、元は >>40 で *コード書くとき* の話だからな。
>>41 のせいだな。
2023/11/04(土) 15:58:28.43ID:lvandghk0
例の人ですか?
2023/11/04(土) 19:42:10.24ID:Q+jfxr6/0
>>62
スレを私物化してないか?
2023/11/04(土) 21:41:26.73ID:W1fOq5zR0
Cは単純だからぽいんた辺りで躓かない限り特に疑問は生まれずスーっと大脳皮質に浸透していく
それに比べて自称モダン言語の気持ち悪さよ
Cが無かったらプログラミングなんてやってなかったろうな
2023/11/04(土) 21:47:47.71ID:vTgEadDD0
Cも関数ポインタとかたいがいきしょいぞ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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