C言語相談室(上級者専用)

■ このスレッドは過去ログ倉庫に格納されています
2018/03/02(金) 22:48:03.65ID:2Cs+DkMh0
C言語の話題のみ取り扱います。C++の話題はC++スレへ。
上級者専用です。10,000行程度のソースを扱えない人は以下スレへ。

C言語なら俺に聞け
https://mevius.5ch.net/test/read.cgi/tech/1519046038/

適宜以下を使用してください。
https://paiza.io/
https://ideone.com/
http://codepad.org/

C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.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/

次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
2018/03/02(金) 22:50:03.02ID:PBdn8yjo0
修正部分について

老害が来てもウザイので「10,000行程度のソースを扱えない人は」と現在状態に変更した。
上級者には一朝一夕ではなれない。
初心者は文法事項にばかりに目が行きがちだが、
今日覚えれば明日から使える文法事項で練度を測るのはナンセンスだ。
2018/03/02(金) 23:46:23.75ID:zrkhMBv60
チムポから膿が出てるんだけどやっぱ病院行ったほうがいいかな?
1週間くらい前に天神でナンパした女から貰ったらしい・・
4デフォルトの名無しさん
垢版 |
2018/03/03(土) 19:53:06.03
エンディアンとアラインメントとメモリバリアについて完全に理解していることが最低条件です
2018/03/03(土) 22:37:45.12ID:YArqddrc0
>>3
泌尿器科、内科、性病科
2018/03/04(日) 01:16:08.51ID:6LJJRQUTa
言語の上級者じゃなくて
ハード知ってるかどうかだけじゃね
2018/03/05(月) 00:58:42.58ID:udBqLrh50
年齢制限はあるんですか?
2018/03/07(水) 00:48:41.98ID:qZwEfbWa0
>>7
年齢制限自体はないが、実質的には30前後になるだろう。

プログラミングにおいても「10,000時間の法則」は当てはまる。
勿論こなせばいいというものではないが、ある程度こなすことも絶対的に必要だ。
この点において、学生が「上級者」の域に達していることはほぼあり得ない。
一般的には、10,000時間=1日8時間*週休2日で50週*5年だから、
実働率の低さ、あるいはその分の残業等も含めて、職業マなら5-10年でここに至る。

これは主要なプロジェクトの公開時の年齢を見ても分かる。
BASIC: Bill Gates (20)
Linux: Linus Torvalds (21)
Turbo Pascal: Anders Hejlsberg (23)
PHP: Rasmus Lerdorf (27)
Java: James Gosling (30)
GNU Emacs: Richard Stallman (32)
Ruby: Matz (32)
C++: 禿 (33)
JavaScript: Brendan Eich (34)
Python:: Guido van Rossum (35)
Pascal: Niklaus Wirth (36)

ゲイツ、リーナス、ヘルスバーグは天才と称される人々で、確かに早い。
ただこれらは「実装」しただけであり、新しい「仕様」を考えたわけではない。
それ以外は軒並み30前後からだ。
これはつまり、いい仕様を考えられる人(≒上級者)が2周目に開発した結果だということ。
1周目は何かのプロジェクトに混ぜ込まれてそこで10,000時間こなしているか、
或いは1周目から新規プロジェクトを立ち上げたがゴミで終わった、ということ。
(1周目の未熟者が立ち上げたプロジェクトは物にならなかった、ということ)
なお、ラスマスはいろいろと語録が有名だが、こう並べると実は凄い。
2018/03/07(水) 00:49:42.00ID:qZwEfbWa0
会社に入って惰性でやっている奴も多いが、
もし職業マになっても学生の頃の情熱を持ち続けて日々努力を重ねるなら、
多分30前後で「ああ、大体分かっちゃったな」と思えるときが来る。
そのときには、10,000行は普通に扱えるようになっている。
逆に、10,000時間をこなしていない状態で、10,000行を扱えないのは当たり前。
それは絶対的に練習が足りないだけ。そして学生はこれに該当する。
練習すればいいわけではないが、練習もしないと上手くはならない。
お前らが今一生懸命書いているコードも、数年後に見直せば全くのゴミだと分かるだろう。

そして問題なのは、その2周目に何をするかで、
まあ大体会社にガッツリ組み込まれ、公私とも忙しくてそれどころではないが、
そのときにOSS方向にも立ち上げればMatz位の立ち位置は狙えるということ。

日本の問題は「プログラマ35歳定年説」の通り、
せっかく10,000時間こなした熟練者がマネージャになり、全くコードを書かなくなってしまうこと。
結果、未熟者だらけでコーディングしており、当然生産性は低く、給料も低くなる。
だから給料を上げる為にはマネージャに昇格するしかない、という悪循環となっている。
一方、海外では、プログラマの人件費は高く保たれており、(日本の2倍)
結果、熟練者もコーディングし続けることが可能で、生産性も高く保たれ、給料も高く保たれている。
これじゃ海外に勝てないのは当たり前だ。
詰まるところ、日本ではヘボが、海外ではエキスパートがコード書いてるんだから。

ただこんな愚痴言っても始まらないのだが、とにかく俺がお願いしたいことは、
お前ら初心者がここを読むのは勝手だが、投稿はして欲しくない、ということ。質問も含めて。
君らだって、大学の研究室に幼稚園児が乱入してこられても困るだろ。
上級者/熟練者も、上級者/熟練者のみで効率よく話せる場を必要としていて、
初心者が乱入してこられると困るんだよ。
ただ逆に、俺は初心者が初心者なりの考えでワイワイやることも必要だと思うから、
君らが従来スレでやり合う分には文句を言わない。(このスレが続いている限り)
俺は自ら進んで隔離されるのだから、お互い棲み分けって事でよろしく頼む。
2018/03/07(水) 00:50:24.22ID:qZwEfbWa0
今現在、また今後とも、Cが使われるのは極めてプロフェッショナルな領域のみだ。
つまるところ、「Cみたいな開発効率の悪い言語を使う理由は、Cじゃないと駄目だから」でしかない。
C以外の言語も充実している今、
「プログラミング初心者」が「独学」でCを始めるのは俺は全く勧めない。他言語にしとけ。
学校等でCを選択しているのなら、それは教師側の都合だから、(知らない言語を教えられないだけ)
逆に言えば、その先生に聞けばいい話であって、俺らに質問してくること自体が間違い。
つまり、
・直接聞ける相手がいるならそっちで聞け、それの方が絶対早い
・プログラミング一般について質問があるようなら、まず他言語で一通り学んでからCに挑め
・C特有事例で質問があるのなら、従来通り質問スレを使え
でしかない。敢えて匿名掲示板上の上級者に回答を求める場合は、例えば
・自分としては一通り出来るつもりである
・ところが上司の方針に全く納得できない。これ本当にそうなのか?ただの老害か?
という場合であって、具体的には
> 職場の人がみんなそうで、毎日変数一つにまとめろとかクラス一つにまとめろとかいろんな人から怒られたりして気が狂いそう
> javaから入ってオブジェクト指向学んだんだけど、javaと同じようにオブジェクト指向で作っちゃいけないの?
> 戻り値列挙型で定義したら戻り値二択にしてboolで返せって、戻り値によってswitch文で処理書いてたんだけどそれも全部捨てろって
> 俺そんなにおかしいもの書いたのかな?
> 共通化したりするとわかりづらい読みづらいって言われる
> https://mevius.5ch.net/test/read.cgi/tech/1467992113/10-
これとかだね。彼は非常に上手く2chを使った。さすがにこれを職場でやるわけには行かんし。
2018/03/07(水) 02:36:38.66ID:Tq6bvCAq0
ム板じゃなくマ板でやれって内容だな
2018/03/17(土) 18:32:08.61ID:6umCop+Md
上級者は自己解決できるから、このスレは洋ナシなんじゃね?
2018/03/17(土) 20:14:25.06ID:l8GUgwob0
>>12
その指摘は当たっている。
上級者がわざわざ質問する事はほぼ無い。当然流れない。

でも俺はそれでもいいと思っているんだよ。
上級者が集える場所がある事が重要。

何であれ、人数は初心者>>>中級者>>>上級者だから、
Web上のあらゆる場所は初心者で埋め尽くされてる。
例のコピペ「コミュニティの一生」で言えば、上級者は常に迫害される側だ。
だからこそ俺は上級者用の場所を確保しておきたい。
歴史的経緯から、上級者が人数的に一番多いのはCだと思うし、まずはお試しだ。
回答者の人数も揃っているし、俺はちょっと俯瞰しようと思っている。


C言語スレ、元々は見るからに年齢層が高かったのだが、
ここに来てド初心者が押し寄せてるのは何なんだ?春休みが理由とも思えないし。

あとやっぱり、話題になっているのは例外だけど、
あれって結局の所、今現在他言語でもいい解を見つけられてないよな?
Goは一周回ってCっぽくなってるし、
C++の「例外安全も型に含める」ってのもC++っぽいやり方だが、
相変わらず「そこまでやるか?」だし。
2018/03/17(土) 20:17:23.08ID:qqOQsVrX0
上級者のおこぼれに預かろうというやましさを感じています
2018/03/17(土) 20:23:13.35ID:6umCop+Md
プログラミングは実装の手段に過ぎない。それは問題解決、「ソリューション」でなければならない。
プログラミングが複雑になるほど、全体を俯瞰する視点や、問題解決するための理論や設計が重要になる。
あなたは、C言語で何の問題を解決するのか。
2018/03/17(土) 20:25:46.92ID:6umCop+Md
というわけで、、、みんなで、C言語で実現できることを考えてみよう。。。
2018/03/17(土) 20:33:08.59ID:6umCop+Md
マイクロソフト関係者がChecked Cなるものを作っている。セキュリティが向上するらしい。#includeの代わりにコードをモジュールで管理するようだ。
2018/03/17(土) 20:40:36.67ID:l8GUgwob0
>>16
ちなみに俺はそれは逆だと思っている。
他言語で出来ることは他言語で、CでしかできないことをCで、だ。

スクリプト言語は本当に色々楽なんだよ。だから俺はJavaScriptが気に入っている。
例えば、以前出ていたオセロの盤面とかも、
多分20-30行で割り込みハンドラ含めて用意できる。
勿論ブラウザに乗っているからだが、Cではこの量では無理だ。
https://mevius.5ch.net/test/read.cgi/tech/1519046038/211

だからアプリ全体やGUI(=速度が要らない)をCで組むのはただの馬鹿で、
速度的に問題がある部分だけCのDLLを呼ぶ方向にソフトウェア全体がなっていくのではないかと思っている。
cythonやNumPyとかがまさにそうだが。
2018/03/17(土) 20:47:39.89ID:l8GUgwob0
>>17
型チェックかと思いきや、境界チェックか!これは行けるかも?
現状Cの最悪なところはそこだからね。
2018/03/17(土) 21:54:17.01ID:6umCop+Md
文章を単語に分け、文字に分け、それをラティス(lattice)、網目構造にする。それのn-gramと意味構造と発音記号とアクセントと音声データを結び付け、
深層学習を真似て関係性をマッピングする。それで、word2vecみたいなことができないだろうか。
2018/03/17(土) 21:56:53.09ID:6umCop+Md
word2vecよりも優れた成果を求めている。ここに機械学習の理論家は居ないだろうか。
2018/03/17(土) 22:21:56.06ID:/yJWANaR0
>>16
それは発想が逆なのでは?何かを解決する道具の内の一つとしてプログラミング言語が作られているわけだから。
2018/03/19(月) 22:59:10.03ID:R1Gqx9A70
片山博文って、ググって最上位に来る人?
本物?
2018/03/20(火) 02:37:08.41ID:PXcTmg8I0
ここの中の人か
http://katahiromz.web.fc2.com/
2018/03/20(火) 20:53:25.44ID:k7gB50HA0
>>24
見た。
すげー香ばしい…。
真正の「自称」研究家だわ。
2018/03/20(火) 20:59:08.03ID:PD8yAuaT0
>>24
「フォルダでプロンプト」を便利に使わせていただいています
http://katahiromz.web.fc2.com/fdprompt/index.html
2018/03/21(水) 09:30:04.70ID:qwFXdNpt0
shift+右クリックはやっぱりめんどくせーの?
2018/03/26(月) 07:53:47.49ID:F4vKabPYM
http://mevius.2ch.net/test/read.cgi/tech/1519046038/587
これは正しい?
2018/03/26(月) 09:20:39.77ID:jNg5MzcL0
N1570 と整合する。
2018/03/26(月) 16:07:25.48ID:42MV7MT1d
>>27
最近のWin10のは、コマンドプロンプトじゃなくてPowerShellになるらしい。
2018/03/26(月) 23:15:54.45ID:dq/Lcz740
>>28
知らん。
というかお前らも無意味だと思いつつ続けてるんだろ?
元気なのはいいことだとは思うが。
32デフォルトの名無しさん (ワッチョイ b39f-9jjH)
垢版 |
2018/04/20(金) 23:17:01.07ID:c2Z2eqef0
あれ?そういえばこのスレ、過疎ってね?
2018/04/20(金) 23:46:35.26ID:sdtFgYaG0
上級者が初心者/中級者と比べて圧倒的に少ないのは自明だし、過疎るのは仕様。
34デフォルトの名無しさん (ワッチョイ b39f-9jjH)
垢版 |
2018/04/21(土) 00:30:37.73ID:Oxipuy330
てか、どの程度からを上級者と言っていいのか決まっているわけでもないし、
そもそもそういう人がこのスレを見に来るとは限らず、また見ても何かを書きたいと
思うとは限らない。
2018/04/21(土) 00:52:21.32ID:2gRYaRc50
で?
36デフォルトの名無しさん
垢版 |
2018/04/21(土) 02:29:14.56
こんなところで相談する時点で上級者じゃないしw
2018/04/21(土) 09:05:28.55ID:2gRYaRc50
>>36
>>12
38デフォルトの名無しさん (ワッチョイ 1723-8E8L)
垢版 |
2018/04/21(土) 16:33:14.08ID:Zke6MJB80
老人ホーム
2018/04/21(土) 16:41:37.10ID:9EumPI9yd
雪ホーム
40デフォルトの名無しさん (ワッチョイ 2323-8E8L)
垢版 |
2018/04/21(土) 16:57:32.96ID:V+d3uri50
お達者クラブ
41デフォルトの名無しさん (ワッチョイ d164-RHBj)
垢版 |
2018/05/02(水) 04:40:30.63ID:bwD+G84h0
Cのnull安全がRustだと聞いたがRustはそもそもC++の後継であってCは念頭に置いてないと思うんだが
詭弁かな。
2018/05/03(木) 00:23:25.54ID:ZDR22COS0
そりゃ認識を間違ってるだろ。

https://techacademy.jp/magazine/8735
https://www.tiobe.com/tiobe-index/
C++erはCの後継はC++だと思っているし、俺もそうだと勘違いしていたが、
実際はCとC++は別枠で扱われていることが多いし、その方が妥当だ。
今のスマポ(キリッなC++とCは別物だ。
文法的な点については、全言語の半分くらいはC後継だし。
C->ObjectiveC->swiftこそが正統Cの系統だ!と彼らが考えていても不思議ではないし。

Rustを触ったことはないが、通常議論されているのは、
・RustはCを代替できるか?
であり、「C++を代替できるか?」なんて言っている奴はいない。理由は、
・C++は現在も旺盛に進化中であり、後継を必要としてない(C++XXの後継はC++YY)
・C++ではCを代替できないのは確定済み(Linux等)
で、どうにかしたいのはあくまでCであり、C++ではないからだろ。
2018/05/03(木) 09:56:19.82ID:+ocIQVM3d
実装や機能を見る限りについてはRustはCよりC++に寄ってると思うよ
Cにこの抽象度の機能をもたせると必然的にそうなるという説はあるけども

何が言いたいかと言うと後継という立場について、そうであったC++は少なくともCの領域を完全にはカバーしなかった訳で、そのカバーしなかった領域を(C++に寄っている)Rustがカバーしたかと言われるとNoだと思っているからRustはCよりC++の後継という方が妥当に思えるという話
2018/05/03(木) 13:18:42.35ID:ZDR22COS0
申し訳ないが俺自身がRustを知らないのでつっこんだ議論は空回りしてしまうが。

> そうであったC++は少なくともCの領域を完全にはカバーしなかった訳で、
> Cの領域
これをどう捉えるからだよ。
少なくともC++の連中は「カバーしている」と思っている。
そしてLinusは「C++は全くのゴミだ」と思っている。

良くも悪しくも、Cはミニマムで美しく完成している。全く無駄がない。
そして各後継言語はこれに対して、「便利機能」を追加しようとしてきた。

C++は「クラス」「型検査」「例外」を導入した。
結果、CならCキャストやマクロですぱっと書けるところをグダグダとテンプレートを引き回したり、
或いは間接呼び出しでいちいち実行速度が遅くなったり、
はてまたスマポ(キリッでGCの再実装を盛大にやらかしている有様だ。
Linusの意見はごもっともだ。

Rustの謳い文句は、「実行速度」「ゼロコスト抽象化」等であり、
C++の失敗を見て学んでいることは明白だ。
だから、後継になろうとしている相手はCなんだよ。C++ではなくてね。
とはいえ、そちらの指摘の通り、実際の仕様がCよりもC++に近くなるのは必然だ。
普通にやれば、C++で成功したところはそれをもらって、
C++で失敗したところは新たな方法を提案して、となるだろうからね。

Rustはぱっと見、スマポがデフォで生ポは例外的使用か?
C++は歴史的経緯から「言語的には」生ポがデフォでスマポが追加されている。
これは、「『アプリケーション用の』プログラミング言語」としては間違いだ。(Linusもそう言っている)
結果、C++erは「デストラクタ」「スマポ」「=のオーバーロード]をこねくり回して苦労しているが、
本来はこれらは言語側で完全に隠蔽すべき物だ。(ユーザが書く必要なんてない)
そしてRustはそれをやり、結果的にnull安全なんだろ。
正しい方向への進化だよ。(分岐元がCかC++かは何とも言い難いが)
C++はアプリケーションの動作と関係ないところで無駄に苦労するでしょ。俺はあれが嫌い。
2018/05/12(土) 15:19:25.30ID:V7PQOWmO0
>>44
その言い方、Rustを結構使っているように見えますが、違いますか?
Cが「ミニマルだ」ということには——少なくともISO C99規格を見るに——あまり賛同できないんですが、
それはまぁ、置いておいて、私がRustを触った限り、あれはC++の代替に見えます。
C++が現在も(規格を拡張する方向に)積極的に開発されているのは分かっていますし、
「だからRustが取って代わる必要はないのだ」という理論的帰結も理解できますが、
ポインタの安全性ややはり名前空間の宣言あたりを見ると(あくまで触りですが)どうしてもC++の文法を彷彿とさせるの
構造が多いように思いますね。
2018/05/12(土) 15:20:29.04ID:V7PQOWmO0
あ、すいません。一行目で使ったことがないと断られていました。
いや、なぜ確認しなかったんだろう、失礼しました。
2018/05/18(金) 23:11:30.66ID:qSToTkUZ0
>>45
> あれはC++の代替に見えます。
それは正しい。
というか、「後継」と「代替」はこの場合明確に区別して使われるべきだ。

・「○○の後継」---○○言語を発展させたもの。
 上位互換であり、○○言語と共に使うことを考慮されている。
・「○○の代替」---○○言語の代わりに使うもの。
 基本的に○○言語と一緒に使うことはない。排他的使用となる。

Rustの謳い文句は、「効率的なCバインディング」であって、
「効率的な『C++』バインディング」ではないんだよ。
CのDLLは当然呼べるが、C++のDLLを呼べるように出来ているか?
C++の「後継」と言うのなら、基本的にはC++の資産を全活用できる方向になってないといけない。
ただしそもそもC++は「後継」用のAPIを整備して無いと思うんだが。

C++の例外「実装」についてググッても、まともな文献が出てこないだろ。
おそらくあれは「実装」まで言及した仕様ではなく、「言語としての動作規定」しかされてないんだ。
(元々C++はそういうノリだし)
だからtry-catchを含んだ関数をDLL化できて他言語から呼べるかはかなり疑問だ。
勿論、昔からの課題だから今は解決されているかもしれんが。
> Throwing C++ exceptions across DLL boundaries is only possible when all modules use the same C++ runtime,
> in which case they share a heap as well. But this can be a maintenance burden,
> especially when libraries from multiple vendors are involved, so it is discouraged.
> https://stackoverflow.com/questions/5107948/throwing-c-exceptions-across-dll-boundaries

だからCのDLLは他言語(Rust/Ruby/C++/C#)等から直接呼べるが、
C++のDLLを呼べます、と謳っている奴はいないだろ。
この点において、C++は後継言語の存在を許していない。

だからRustはCの「後継」であり、C++の「代替」というのが妥当な見方なんだよ。
実際、RustがあればC++を使う意味がないだろ。
2018/05/18(金) 23:12:06.97ID:qSToTkUZ0
Cは大規模コードに対するサポートが全くない。
とはいえ、「やれば出来るだろ by Linus」なのは事実だが、実際それでは辛いわけで、
コンパイラに任せられるところは任すという方向で上手く手抜きできるように進化させたのがC++だ。
Rustも同じ方向なのだから同様の物になるのは当たり前。
当然、どちらかを使用すれば事足り、RustとC++は排他関係になる。
つまり、RustはCの「後継」であり、C++の「代替」だ。おそらくここまでは大体の人が納得するはず。

問題はCの「代替」にもなり得るか?という点であり、だからそこが議論されているわけだ。
今現在もCを使うメリットは速度面しかない。したがって速度面のデメリットがなければ良く、
「ゼロコスト抽象化」等、速さにこだわっているのはそこなんだよ。

ただ俺個人としては、全体を一つの言語で書く必要なんて全くなくて、
NumPyのアプローチ、つまりどうでもいいところ(9割以上)はスクリプト言語で書き、
必要なところだけCのDLLを呼ぶ、というのが正しい気がするが。C#もこの方向だね。
この場合、リソース管理をGC言語側に任せられ、
また個別関数単位での切り出しになり、
DLL内関数はお互い独立(非依存)で行っても1,000行とかでしかなく、
Cでも全く問題にならないんだよ。
だからRustも微妙に中途半端な方向だとは思うが、
もし仮にCを代替できるのなら、それは素晴らしいと思うよ。
49デフォルトの名無しさん (ワッチョイ 89fa-9WOx)
垢版 |
2018/05/23(水) 19:34:50.63ID:Au5e7VGg0
僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』

8UTJJ
2018/05/24(木) 16:09:00.92ID:6FiN0bsr0
114.149.223.252
2018/07/02(月) 19:57:22.74ID:tgZxuU9E0
RustはCの「後継」であり、C++の「代替」
これでRust周りの(宗教戦争じみた)論争の理由が理解できた。
52デフォルトの名無しさん (ワッチョイ 45fa-2e90)
垢版 |
2018/07/04(水) 22:51:20.65ID:gFgZc5FG0
NTB
2018/07/09(月) 23:31:02.20ID:bV3eVpry0
NTR
2018/07/26(木) 02:18:42.03ID:BvZq73xc0
ポインタってさ、「指示子」と和訳したら分かりやすいと思うんだが
そうしなかった理由ってなんだろ

それとも俺の感性がおかしいだけか
2018/07/26(木) 02:38:35.19ID:rK3i9Ft7a
昔、筧先生ってひとがいて…
2018/07/27(金) 01:03:48.10ID:GvW3yrkV0
>>55
kwsk
57デフォルトの名無しさん (ワッチョイ 6f9f-53i4)
垢版 |
2018/07/27(金) 03:35:26.85ID:O4NPrPXG0
ちょっと10回言ってみ

言い辛いよな
2018/07/27(金) 17:21:35.88ID:GvW3yrkV0
え? なに? もしかして昔なにか荒れる原因になった ANDOR 問題のある人が使ってた用語なのか。
若いもんで知らなかったわ すいません。
2018/07/28(土) 09:57:54.67ID:VMG9DnUG0
「指示子のgcc拡張」みたいな早口言葉モドキができて面白いかも。
60デフォルトの名無しさん (アウアウエー Saaa-2QVD)
垢版 |
2018/07/28(土) 13:58:33.27ID:39ICzHjEa
指示子の指示子
指示子の配列
配列の指示子
配列の指示子の指示子
指示子の配列の指示子
ダブル指示子
配列の指示子の配列 👀
Rock54: Caution(BBR-MD5:1341adc37120578f18dba9451e6c8c3b)
2018/07/28(土) 15:05:25.84ID:BHZfW2WL0
>>60
なんかおこられてやんの
62デフォルトの名無しさん (アウアウエー Saaa-2QVD)
垢版 |
2018/07/28(土) 15:08:57.51ID:39ICzHjEa
こんなので目玉付くんだなω
2018/08/05(日) 00:49:09.36ID:fZk3Cg460
C99(ISO/IEC 9899:1999)で,main()関数の型がintな理由ってどこかに書いてあるっけ。
今ふと,リターンコードって0から255の整数なんだから
uint8_t main(...
としても問題ないよなと思ってさ。
2018/08/05(日) 00:50:03.59ID:fZk3Cg460
すまん。途中で送信してしまった。
そうするとコンパイラにmain()の型はintだと怒られた。
2018/08/05(日) 01:34:55.28ID:/g7t90jda
型がintというのは決まってる。
実際の範囲は実装依存。windowsだと違ってなかったか?
66デフォルトの名無しさん (ワッチョイ a39f-Xflc)
垢版 |
2018/08/05(日) 07:12:37.38ID:cdvogGHQ0
main()が戻す値は呼び出す側の問題だとは思うが、その部分(crt0とか)は普通はC言語に合わせてintを
返してくると想定して作られていると思う。しかしその部分まで自作するというのであればなんでもアリではある。
https://en.wikipedia.org/wiki/Crt0
2018/08/05(日) 08:37:27.73ID:5+7WSxVZ0
シェルが受け入れるコマンドの終了ステータスの値が0-255の範囲、
てのはUNIX系もDOS系も(珍しく)一致してるのね。
unsigned char の外に出ないことは間違いないわね。

ANSI以前の古いCでの「宣言なしに使われた外部関数はintの値を返す」
という仕様が、規格化したときに互換性の問題を生まないように
main()の返り値はintと決めたんじゃないかしら。
2018/08/05(日) 12:29:08.02ID:fZk3Cg460
なるほど。まあ過去互換性は重要だしね。
ただ,CはPOSIXというOSの標準規格を定めてる団体が関与して設計されてるから「リターンコードは0--255。よってmain関数の型はuint8_t」と割り切ってくれてもいいのになぁ。
とか勝手に思ったりしてる。
2018/08/05(日) 13:13:57.79ID:/g7t90jda
まあintが妥当だろう。
しかし、_exit()に渡すのがintでwait()した時も一応exit statusはintだよな。
どこで上位ビット欠落させてんだ?
70デフォルトの名無しさん (ワッチョイ a39f-Xflc)
垢版 |
2018/08/05(日) 18:30:06.69ID:cdvogGHQ0
>>69
OSの中だ。_exit() はシステムコールだし。
まあでも UNIX 系 OS じゃないならこれは違っているかも知れない。
2018/08/06(月) 01:15:24.28ID:/d0+B2Ty0
ちょっとCの範疇を越えた話になるけど
リターンコードが0--255ってどういう段階で決定されたんだろう。
DOSとUnixが同じ範囲のリターンコードを持ってるって、偶然とは考えがたいんだけども
2018/08/06(月) 02:07:20.39ID:xc/1a6k50
unix等の先行者を参考にDOSを作ったんだから
2018/08/06(月) 07:45:24.26ID:1aQ1rnwf0
DOSの終了ステータスはUNIXの仕様をそのまま使用だと思う。

UNIXの方は、子プロセスを作って別の仕事をさせるって定型処理で、
「親プロセスで子プロセスの終了を待つ」ためのwait()系の関数が、
・子プロセスが正常終了した場合は子プロセスの終了ステータス
・子プロセスが割込みで中断された場合は割込みの種類
という2つの情報を1個の返り値で戻すことと関係あるのじゃないかな。

1個の整数値を上位と下位のビット群に分けて別の情報として使うために
それぞれの情報量を1バイトずつに制限した、と。
2018/08/06(月) 08:23:05.65ID:jTWGCXc00
UNIX板のおじさんに聞いてみたら
2018/08/26(日) 08:24:46.45ID:dLFVucRz0
auto変数で char配列を可変長で動的に確保する方法は無いかな。
アセンブラレベルならスタックポインタを操作すれば可能だと思うが。
文字列処理の内部バッファとして入力に合わせたサイズを確保したいんだが、とりあえず今は固定長バッファとそれを超える場合は malloc でやってる。
2018/08/26(日) 09:09:31.40ID:Vxoswi+gd
alloca
2018/08/26(日) 09:18:39.26ID:O9adGcKd0
>>75
gcc使うなりalloc()使うなりすればいい
とりあえず
vla c言語
で、ぐぐれ
2018/08/26(日) 09:29:28.31ID:ik1BtrwR0
>>75
alloca
標準ではないけどほぼ標準扱い。(殆どの環境で使える)
ただし realloca は無いので注意。
2018/08/26(日) 09:31:08.30ID:dLFVucRz0
>>76-77
ありがとう、まさにぴったり。
言語レベルでの可変長配列は C11 から(オプションだけど)入ってるんだね。
90年代からメンテされてるコードだからそっちは使えなそうだけど、alloca を検討してみる。
2018/08/26(日) 10:56:05.32ID:O9adGcKd0
>>79
環境わからんからなんとも言えんが組込みとかWindowsとか意外にスタックサイズがしょぼい環境あるから気を付けてね
2018/08/26(日) 11:49:56.37ID:hQMrm9ZNa
いやいや、C99からだよ。C11でオプションになった。答える方はそのくらい知っとけよ。
まあ入力が小さいのが予め分かってないと使いにくい機能だよ。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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