C言語なら俺に聞け 159

■ このスレッドは過去ログ倉庫に格納されています
2022/08/04(木) 23:32:27.83ID:yWVViPyIM
!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

C2x ドラフト
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2731.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言語なら俺に聞け 158
https://mevius.5ch.net/test/read.cgi/tech/1640401906/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2022/10/15(土) 19:44:27.23ID:jaz9tT2QH
>>632
なんでなんで!
2022/10/20(木) 03:24:32.42ID:y3K9DSVg0
ジジイだからだよ。
2022/10/20(木) 11:13:15.74ID:SiOwIn850
ここはジジイしかいないからな
2022/10/20(木) 19:25:01.75ID:aXExphHPd
>>633
歳を取ると語彙が増えていき頭の中でダジャレが浮かびやすくなる
それと同時にセンスが低下して面白いギャグかどうかがだんだんわからなくなる
結果的におっさんはつまらないダジャレを思いついたらすぐ言うようになる
2022/10/20(木) 19:54:53.72ID:UUAxnkpP0
オヤジギャグやダジャレより
連想したものをただ言ってれば、
例えツッコミ扱いしてくれて楽だろう
2022/10/20(木) 19:58:46.29ID:4Jg9TvVE0
つまらなくても笑えよ。敬老精神が欠如しているのか。
2022/10/20(木) 20:00:11.34ID:SiOwIn850
ソースにもだじゃれ入れてそう
2022/10/20(木) 20:25:40.72ID:w47Nq7BKH
>>639
char aznable
2022/10/20(木) 22:06:49.25ID:SiOwIn850
カウント変数にcuntは止めろとねんを押された
2022/10/20(木) 22:28:20.65ID:NFETJM8p0
コーディング規約があるなら守りましょう
2022/10/20(木) 22:29:14.08ID:NFETJM8p0
一瞬idがNEETかと思ったが違ったw
2022/10/20(木) 22:48:13.58ID:SiOwIn850
ソースではなく、make終了時にBIGCOCKと表示させてた奴を知ってる
本人いたら、ゴメンナサイ、バラしました
2022/10/21(金) 21:25:54.17ID:CZbur0iYd
そう、こういうの
全然どうでもいい事をさも重要な秘密のようにw
2022/10/30(日) 07:10:33.74ID:9/1OGIJE0
独り言です
インデントは4を使ってきたのだがプロの世界?では2みたいだな
軽くショックを受けた
2022/10/30(日) 07:12:57.69ID:9/1OGIJE0
ちなみにインデント2を使ってるのはcatコマンドのソースです
https://sources.debian.org/src/coreutils/9.1-1/src/cat.c/
2022/10/30(日) 07:27:37.61ID:i1fpLCEI0
プロの現場にそういうところもあるというだけだよ
1つ目撃したからってそれが全てだと思うのは
早まった一般化という誤謬だ

誤謬を多発するやつは論理思考が苦手ってことだ
むろんプログラマとしての適性ではマイナス要素だ
2022/10/30(日) 07:32:06.64ID:A1wSH6ms0
昔は画面が狭かったからそういう主義のやつも割といた
そろそろ淘汰されてる頃じゃね
2022/10/30(日) 07:39:15.76ID:i1fpLCEI0
一画面ルールってのもあったな
2022/10/30(日) 08:27:39.75ID:HgiMaBnhM
今でもそこそこ使われてるだろ
一画面とは言わないまでも100行ルールとかの発展型も多い
ひとつの関数が何千行もあればコードレビューで問題にされる
2022/10/30(日) 08:40:19.94ID:i1fpLCEI0
ダラダラ書くなって話が廃れたとは言ってないんだが
2022/10/30(日) 09:25:59.68ID:+gGQ3BRS0
GNUスタイルのインデントはゴミ
2022/10/30(日) 09:26:11.73ID:KYgyTmU4M
名前空間やクラスを使わないC言語は特に文が長くなりがちだから、2のほうが使い勝手がいいと思うことはよくある
2022/10/30(日) 10:52:42.74ID:vrlOFY0H0
>>647のcatソース見たけれど、
私にはブロックが分かりにくいと感じた
見慣れれば良いのかも知れないが
2022/10/30(日) 17:05:35.10ID:wnFbyiurd
>>647
rms仙人の直筆か
プロ?と言って良いのかはさておきスーパーハッカーではあるね

関数呼び出しの()前の空白とかは結構独特なスタイルだと思うぞ
2022/10/30(日) 17:11:32.88ID:c3va8FLBd
✗直筆
✓監修

プロとは我らIT土方の事を指すのです
658おじ乳輪様 ◆IQ90.av/.Akz
垢版 |
2022/10/30(日) 17:12:30.77
中括弧の位置とか関数呼び出しのスペースとかなんでこんな独特なスタイルなの?
なんのメリットが?
2022/10/30(日) 17:24:51.13ID:xXAnW4UR0
もともとは egrep とかで使いやすい
とかいう理由だった気がする
2022/10/30(日) 17:30:55.10ID:1Zssd/uh0
http://web.sfc.wide.ad.jp/~sagawa/gnujdoc/standards-19981118/standards-ja_5.html
2022/10/30(日) 17:33:33.15ID:ZM6oqeKp0
GNUのソースは読もうと思って読んだがあのスタイルに拒否反応が出て駄目だったわ
662デフォルトの名無しさん (ワッチョイ 13ad-iO6U)
垢版 |
2022/10/30(日) 23:05:10.18ID:KHak5nKt0
( ´_ゝ`)フーン
2022/10/30(日) 23:45:46.77ID:QW7VZG88M
インデントごときで読む気が無くなるのは、単に向いてないだけだなw
2022/10/30(日) 23:52:22.08ID:vrlOFY0H0
うん、むいてないからお前がやってくれ
665デフォルトの名無しさん (ワッチョイ 13ad-iO6U)
垢版 |
2022/10/31(月) 00:03:46.32ID:EzTz1A6M0
 (
   ´_ゝ`
 )
フーン
2022/10/31(月) 00:23:37.56ID:8d/Em0+h0
スタイルがあるなら従うべきだけど、300-500行目に連発する
}
else
{
はさすがに目が滑る
スクロールして追うのも辛い
667デフォルトの名無しさん (ワッチョイ d935-uirP)
垢版 |
2022/10/31(月) 00:32:37.86ID:MKojko7I0
ブロックの前にインデントを入れてるのはブロックも文なんだから単一文の時と同じようにインデントを入れるべきという理屈かな?
2022/10/31(月) 01:42:04.37ID:8d/Em0+h0
>>667
それ自体は一貫してるからいい、ただしこの場合は対応するifから平気で50行以上も離れているので、elseだけじゃスクロールバックしないと条件が何か分からん

エディタのfold機能を活用するのもアリだけど、プレーンテキストとして読めるべきという姿勢のようだから、まさに>>660にある
#ifdef foo
...(長いコード)
#else /* not foo */
のようにelseにコメントを添えさえすれば、俺的にはオッケー

余談だけど
個人的にはプリプロセッサの条件も自由にインデントしてる
# ifdef foo
...
# ifdef bar
....
のように
殆ど見かけないから決して他人には勧めはしないけど
2022/10/31(月) 01:43:55.98ID:oYB2uzRMM
GNUのインデントは、Pythonを考慮すると利にかなってんだよな
if foo:
bar

if (foo)
{
bar;
}
という対応がある
Pythonはインデント自体にブロック要素があるから余計なカッコが要らないけど、Cはブロック要素にカッコが必要だから書いてあると考えれば、実はPythonと一緒なんだよ
これに気付いた時はrmsは天才なんだと思い知らされた
2022/10/31(月) 02:16:22.63ID:8d/Em0+h0
>>669
結果的に同じ形に落ち着いてるけど、pythonとは正反対の思想から生じている事もお忘れなきよう
尊師の第一言語はcでなく言語に構文要素自体が存在しないlispだから、改行のみからコードブロックとインデントレベルがフォーマッタを問わず一意に定められる

c系統(いわゆるブレース言語)は言語に構文を採用しつつ、フリーフォーム記述の許す折衷だから、フォーマッタとスタイルにバリエーションが生じる
2022/10/31(月) 02:24:22.85ID:8d/Em0+h0
翻って、エディタ入力支援/フォーマッタプログラム無しにlispを記述するのは事実上不可能に近いので賛美してるわけではないよ
念の為
2022/10/31(月) 11:19:45.88ID:0hSBCDEtd
))))))))くらいは序の口だし、括弧を数えてたら気が狂うわな
ネストレベルに応じて機械的に挿入されるインデントのみによって構造を把握するから、Lispは実質的にPython並にインデント強制
2022/10/31(月) 11:43:48.99ID:HpV/6ZOj0
今となっては C だってエディタの支援なしに書く気にはならんけどな。
674デフォルトの名無しさん (ワッチョイ f15f-KdnH)
垢版 |
2022/10/31(月) 13:07:16.76ID:J5/naAYk0
>>673
それは慣れの問題
2022/10/31(月) 15:59:12.44ID:YDjtl0u50
そう言うのには慣れたくない
2022/10/31(月) 16:35:29.26ID:gpqFhr3z0
LISP は先にあるんだし、Python の文法は諸々の言語の影響結果だろ
ブロックの開閉で改行するってのは、ALGOL系のBEGIN~ENDの強い影響を感じる
Cではむしろ、少し自由な書式書法になっていたのが退化した
2022/10/31(月) 16:49:19.46ID:YDjtl0u50
Cが退化したのではなく、人間が退化したんだろう
678デフォルトの名無しさん (アウアウウー Sa9d-KdnH)
垢版 |
2022/10/31(月) 20:11:09.56ID:a6AXXlaBa
括弧の入れ子がひどいコードを作ることがやばい
2022/10/31(月) 21:12:31.27ID:YDjtl0u50
初心者のために、本来不要だけど括弧を付けるときはあった
680デフォルトの名無しさん (ワッチョイ d935-uirP)
垢版 |
2022/10/31(月) 21:55:34.36ID:MKojko7I0
ウザ
2022/10/31(月) 22:06:42.50ID:gNe27yrb0
>>679
俺は未来の自分のために言語仕様としては不要な括弧を付ける
2022/11/01(火) 07:24:39.67ID:8mAHYLmxd
初心者でも務まる仕事か
2022/11/01(火) 15:13:43.68ID:hGXBrabD0
若手に優しい配慮は必要だと思う
いらないと言うことに気がつけば
それはそいつの進歩だ
2022/11/01(火) 18:32:43.22ID:8mAHYLmxd
甘やかしでしかない
2022/11/01(火) 18:40:22.15ID:hGXBrabD0
たった1人で好きなシステム組んでみて
2022/11/01(火) 18:45:14.28ID:8mAHYLmxd
議論になってない
2022/11/01(火) 20:23:05.05ID:Lnx9eR9fM
議論なんかしてないだろう
2022/11/01(火) 21:17:55.24ID:hxzN6YDm0
ということにしたいのですね
2022/11/01(火) 22:30:37.78ID:hGXBrabD0
オッサンは呼んでない
690デフォルトの名無しさん (ワッチョイ 8bb0-QueQ)
垢版 |
2022/11/02(水) 11:37:22.22ID:1ThO0l2A0
はつみみです
2022/11/02(水) 21:00:24.72ID:C3BaP9Oq0
焼き鳥の通だけが知ってる稀少部位?
2022/11/07(月) 17:58:10.87ID:BvZ6DXqw0
>>658
呼び出し前スペースはプリプロセスをm4で強化するときに少し面倒になるな
GNUはm4大好きなのにな
2022/11/20(日) 17:25:16.95ID:u5cvtrdO0
m4すらすら書ける人います?
2022/11/21(月) 03:19:48.32ID:Amw5zf2Y0
大昔、sendmail.cf を生成するのによく使われてな。久しぶりに名前を聞いた。
autoconf をがんがん使うプログラマがいればワンチャン。
695デフォルトの名無しさん (アウアウウー Sa3b-kfYZ)
垢版 |
2022/11/23(水) 15:53:36.98ID:U6TEG1mTa
sendmail.cf なつかしす
postfix に乗り換えちゃった
2022/11/23(水) 19:55:29.66ID:aRKGS4gV0
CF使った事あるw
2022/11/25(金) 12:32:01.04ID:FzNlCQf10
すまん、聞くことないわ
2022/11/25(金) 12:49:25.94ID:PV2ZG9bua
CF は m4 ではないやろ?
2022/12/01(木) 15:02:39.09ID:ZPuEPm3M0
ttps://atcoder.jp/contests/abc273/submissions/35667282
このコードを実行するとscanfで入力を待つはずなのですが即座に終了してしまいます
たまにそういうコードを見かけるのですが何が原因なのでしょうか
printfを入れても実行されないのでmainがスキップしているような。。
2022/12/01(木) 15:40:10.03ID:q8NQ5dwmd
あなたの環境のせいかと
2022/12/01(木) 16:09:51.97ID:JXDLC/Oi0
コードが酷くてワロタw
2022/12/01(木) 16:26:50.49ID:jAeBwf3w0
>>699
典型的な scanf() あるあるだな
最初の scanf() で数字 + 改行が読み込まれるが"¥d"だと数字だけ取り出して改行が残っちゃう
2回目以降のscanf()は改行が残っているから入力をスキップしてしまう
scanf 改行 読み込み とかでぐぐると色々出てくる
https://hiroyukichishiro.com/scanf-problems-in-c-language/
回避方法はいくつかあるけど、個人的には
static b[100];
fgets(b, sizeof b, stdin);
N = atoi(b);
...
fgets(b, sizeof b, stdin);
d[i].key = atoi(b);
みたいにするかな

>>700
釣りか?
2022/12/01(木) 16:29:17.59ID:LIu803lba
普通のマージソートを読んでるだけで別に酷くなくね?
エラーハンドリングしてないってことなら競プロではそれが常識だぞ
何を見て酷いと言ってるのか説明してくれ
2022/12/01(木) 16:33:06.65ID:LIu803lba
>>702
\dじゃなく%dのことかな?
そのコードの下にACが30個並んでるだろ?
これは用意された30通りのテストケースにおいて想定通りに動いたということなんだよね
つまりコードのせいではないよ
2022/12/01(木) 16:36:36.47ID:q8NQ5dwmd
改行が問題になるのは%cのときくらいで
%dのあと%dだから空白類文字は問題ないよ
2022/12/01(木) 16:42:55.52ID:LIu803lba
>>701
ちなみにこのコードを書いたのはオレンジコーダー
https://atcoder.jp/users/ygussany?contestType=algo

オレンジというのは一部上場企業でも一人もいないことが珍しくないレベルの高レベルプログラマを超える化け物レベルの超高レベルプログラマを超える頭おかしいレベルのプログラマ
2022/12/01(木) 16:47:51.25ID:knNtAgEU0
y[200001];とd[200001]がスタック壊してしまいます涙
2022/12/01(木) 16:54:14.03ID:LIu803lba
>>707
Linuxではメモリの許す限りスタックが使えるから
2022/12/01(木) 16:54:27.16ID:ZPuEPm3M0
>>707
ありがとうございます
それでした
2022/12/01(木) 17:04:51.34ID:IEkrCGic0
おま環定期
2022/12/04(日) 21:55:28.56ID:7byHd/K/d
>>708
とはいえmallocにしたほうがいいんでない?
2022/12/04(日) 22:07:50.79ID:RAGda7mP0
VLAで足りることにmallocか
2022/12/04(日) 22:16:11.60ID:Yt2fANdLH
>>712
C++ で見捨てられた VLA なんか使いたくないですね
2022/12/04(日) 22:29:52.59ID:xXGWnQN3d
>>712
VLAはC99で採用されたけどC11でオプション仕様に格下げされたよ
2022/12/04(日) 22:31:57.30ID:JQ3spjvfM
>>708
それってどこ情報なん?
716デフォルトの名無しさん (ワッチョイ 3e04-g9pY)
垢版 |
2022/12/04(日) 23:03:10.81ID:UdvGlPZ+0
Cで通信系いじりたいんやけどなにからすればええ?
まずはゲームとか作ってC言語に慣れた方がええんやろか
「無線 C言語」と調べてもコロナ社の本しか出てこん
本買った方がええんか?
右も左もわからん、どなたか教えてください!!!
2022/12/04(日) 23:04:19.10ID:AOlAqVGT0
まず何がやりたいのかはっきりさせろ
何もわからんぞ
2022/12/04(日) 23:09:42.46ID:HgjSOVEG0
通信系って、無線通信?
C言語には電波を飛ばす機能はないよ
719デフォルトの名無しさん (ワッチョイ 3e04-g9pY)
垢版 |
2022/12/04(日) 23:14:41.99ID:UdvGlPZ+0
ネット通信とか無線通信はC言語だとどっかで耳にしたからとりあえずやりたくなったんや
なんかいい通信系の入門サイトとかあれば教えてほしい
720デフォルトの名無しさん (ワッチョイ 3e04-g9pY)
垢版 |
2022/12/04(日) 23:17:10.93ID:UdvGlPZ+0
>>718
無線通信系に興味ある
電波飛ばす機械をC言語でなんかするんじゃないん?
721デフォルトの名無しさん (ワッチョイ e2ad-4FAg)
垢版 |
2022/12/04(日) 23:26:26.75ID:MiJYA0Kr0
通信をする方法が無線かどうかはハードウェアの問題。
更にOSやデバイスドライバやOSのシステムコールをどのように呼べば良いかを知る必要がある。
C言語の知識が必要になるとすると通常はここからだ。

そうではなくてハードウェアはあるがOSがなくI/Oポートを直接読み書きするようなプログラムを
作る必要がある場合はアセンブラかC言語で作ることになると思う(必ずしもそうである必要は
ないが)。その場合はOSのデバイスドライバを自作するような感じになる。
2022/12/04(日) 23:27:41.55ID:HgjSOVEG0
有線にしろ無線にしろ、通信という以上は相手があって
その相手とルールの取り決めをしてからそのルールにしたがってやり取りする
だから最初に、誰と、どういう取り決めでデータのやり取りをするかを決めないといけない
インターネットもそういうルールをみんなで決めてやり取りをしている
とりあえずインターネットの通信を学んでみたらどうだろう
この掲示板に書き込みをしているのだから、その通信が可能だし、
その機種を使って試すところから始めると良い
2022/12/05(月) 00:30:23.98ID:ddGzHpStd
>>712
スタックの仕様は機種依存が激しいから可搬性を考えたらスタックは無限にあると考えないほうがいい
というかLinuxではデフォルト8MBみたいだけど
2022/12/05(月) 00:47:01.63ID:ddGzHpStd
というかスタックというのは一番効率の悪いメモリの使い方なので
本を片っ端から積み上げて下の方は取れなくなってしまうイメージ
大規模な配列はスタックに置かないほうがいいというのは基本では
断片化があるとはいえmallocのほうが効率的
2022/12/05(月) 00:55:05.00ID:d/jwcHzh0
一番上と、一番下でアクセスの速度は同じでしょう
726デフォルトの名無しさん (ワッチョイ 4697-KDKu)
垢版 |
2022/12/05(月) 01:09:57.27ID:rpvKYALB0
スタックが上のデータに埋もれて下のデータが取り出しにくくなるなら、ヒープでも全く同じことが発生するはず。
適当なアナロジーで間違った理解をしている典型例だと思う。
2022/12/05(月) 01:14:21.69ID:ZI2+JeHur
デカいデータで最適化が効くことがあるのはグローバル変数
2022/12/05(月) 01:15:32.38ID:m5vf/Aut0
Cのローカル変数は、マシン語レベルではスタック領域に生成されるが
相対アドレシングで自由にアクセスするので問題ない
729デフォルトの名無しさん (ワッチョイ 2135-1pGr)
垢版 |
2022/12/05(月) 01:21:11.87ID:op7KwCv70
領域の確保開放が上からしか出来ないだけで読み書きはどこでもできるもんな
2022/12/05(月) 06:17:33.64ID:0xhTnbB50
>>723
え、無限にあると考えることがあるの?
・・・あれか、マイクソソフトが吹聴してる例の有害なやつか
2022/12/05(月) 08:28:01.18ID:d0zhDPVSa
>>711
競プロだぞ
2022/12/05(月) 08:42:20.41ID:AHxKL62Z0
有限さん「おい、スタックが無限にあると考えられるとはどういうことだ?証明して見せろ!!」
ムゲンさん「わかりました。では無限なメモリを積んだコンピュータを用意してきてください。そしたら証明して見せます。」
有限さん「そんなことできるわけないだろ!」
ムゲンさん「ザンネン。じゃああなたのご希望に沿うことはできないですね。」

ボク「それってつまり、無限のスタックは存在しないってことなんじゃ?」

ムゲンさん「『無限なメモリを積んだコンピュータは存在しない』というのは悪魔の証明であって、存在しないと断言すること自体が不可能です。」

ボク「屏風の虎…一休さんかよ」
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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