C言語なら俺に聞け 140 [無断転載禁止]©2ch.net

レス数が1000を超えています。これ以上書き込みはできません。
1デフォルトの名無しさん 転載ダメ©2ch.net (ワッチョイ 6f8c-8ulf)
垢版 |
2017/05/11(木) 22:20:03.99ID:cn414UR90
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
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/


http://echo.2ch.net/test/read.cgi/tech/1487757355/
http://www.geocities.jp/c_cpp_cs/about_c/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2017/07/17(月) 17:54:54.48ID:+Y9zLnEF0
ならんと思うし、解決済みだぞ
2017/07/17(月) 18:06:17.25ID:6JtF0HSC0
>>959
まあそれで見やすくなるだろうから、そういうCを拡張した新しい言語作れば良い。
しかし、問題はC(あるいはそこからちょっとしか拡張されていないような言語)を
人間が直接使う機会はおそらく減り続けることにある。今でもほとんどOSや
デバイスドライバを記述するアセンブラ代わり
2017/07/17(月) 18:07:19.84ID:g3mBUieLd
>>962
お前のいうことは完全に間違い。Pythonスレでならちゃんと答えてやる
興味がないならこれ以上その浅はかな知識をひけらかすな
2017/07/17(月) 18:07:38.79ID:6JtF0HSC0
あ、ごめん。途中で送信しちゃった。
つづき。


に使われてるしね。
2017/07/17(月) 18:40:56.88ID:IbKZMmLs0
関数内関数って要するに高階関数のことだろ
関数型言語または関数型のマルチパラダイムの言語でないと無理だろ
2017/07/17(月) 18:46:26.39ID:PKmAGp8M0
Objective-Cで全部可能ではある
C言語でもclangならblocks拡張(関数オブジェクト・クロージャ)が使える
関数内関数は単純に制御構造だと捉えれば、C言語でもgoto文で可能でしょう
2017/07/17(月) 18:54:16.64ID:g3mBUieLd
Blocks拡張は有能なのは分かってるけど、Clang依存コードになるからちょいとハードル高いよなあ
973デフォルトの名無しさん (ワッチョイ 8a1c-UU3S)
垢版 |
2017/07/17(月) 18:59:20.24ID:woO8V6Ze0
>>948
いやコンパイラにとって初見の識別子があとで宣言される
という形になっているコードについて話しているのは
みんなわかってるのに、頓珍漢な言葉遊びに持ち込もうと
している邪魔な奴がおまえだ

> Cはそれが作法になってるだろ
はあ? 聞いたこともねえぜ、寝言は寝てぬかせ
横着しねえでちゃんとプロトタイプ宣言すんだよ
正直たまにサボることがあるのを恥もせずに
それがスタンダードとか居直るおまえの態度が鼻持ちならん
2017/07/17(月) 19:03:14.17ID:30YqlFLH0
ヘッダにはプロトタイプ宣言を書くだろうに
なんでプロトタイプ宣言をなかったことにしたがるのだろうか?
2017/07/17(月) 19:03:27.54ID:PKmAGp8M0
>>972
俺も非依存性重視なので、拡張なしの標準的なCでやってるよ
プロトタイプ宣言とクロージャは諦めなきゃならないが
クロージャはコールバック関数のポインタを渡すという伝統的なやり方でできる
2017/07/17(月) 19:17:54.83ID:g3mBUieLd
>>975
諦めなきゃならんのか出来るのかどっちだよw
いやblockなしでクロージャ出来るんなら割と真面目に知りたいんだけど
2017/07/17(月) 19:25:58.36ID:PKmAGp8M0
>>976
いやコールバック関数のポインタ渡しで代替だからw 別に関数書く必要はあるよ
blocksみたいに、同じスコープにコールバックの処理も書けちゃうっていう便利さは無い

環境のキャプチャもしたければ、値のコピーをヒープに確保してコールバック側でfreeとか、
工夫すればできるでしょう
2017/07/17(月) 19:43:36.29ID:g3mBUieLd
うーむわかりた。やっぱ別に書いた関数を呼ぶのがせいぜいよなあ
せめて関数オブジェクトがあればなあとたまに思うわ
2017/07/17(月) 19:45:22.30ID:U2FIHXXv0
>>959
> というかPythonの話は止めよう。俺はそっちには興味ない。
はあ?
Python言い出したのはお前だぞ w

>>962
> Pythonの仕様が糞だから、「Pythonでは糞コードしか書けない」と俺は言っている。
だから知らないならPythonに触れるなよ
別にPythonサイコーって思ってる訳じゃないけどお前の指摘は全て的はずれすぎる
関数定義の順序に制限なんてない
あとローカル関数についてはJavascriptも似たようなもんだぞ
2017/07/17(月) 19:47:31.91ID:U2FIHXXv0
>>970
> 関数内関数って要するに高階関数のことだろ
全然違う

> 関数型言語または関数型のマルチパラダイムの言語でないと無理だろ
Pascalでも使えるのに何を知ったかしてるんだよ w

>>971
> 関数内関数は単純に制御構造だと捉えれば、C言語でもgoto文で可能でしょう
これはさすがにアホすぎる...
2017/07/17(月) 19:59:04.53ID:PKmAGp8M0
>>980
ちょっと関数内関数ってどういうものを言ってるか説明して
単純に言えば関数内で行ったり来たりするだけじゃないの?
2017/07/17(月) 20:24:44.55ID:IbKZMmLs0
関数の内部で関数を定義するようなイメージじゃないの?
C言語では不可能だけど
void functionA(void) {
 …
 void functionB(void) {
  …
  void functionC(void) {
   …
  }
 }
}
2017/07/17(月) 20:31:06.71ID:U2FIHXXv0
>>981
スコープが違うだけで普通の関数と同じだぞ
普通の関数をgotoだけで実装してみてよ
2017/07/17(月) 21:01:30.74ID:LYlgQVUQ0
>>963
> トランポリンコード
なんだそりゃ?と思ったらこれか。
http://d.hatena.ne.jp/yupo5656/20040602/p1

なるほどGCCのは単なる階層ではなく、プチグローバル付きか。
この仕様なら上位階層(ファイル)を記述変更無しで取り込めるが、
これは確かに標準化には微妙だな。俺はGCCの仕様を詳しく知らんかった。すまんね。
しかしこれ、C++のメンバ関数ポインタみたいに、
普通の関数ポインタと相互運用することは諦めてしまっても良かった気もするが、
それだとレガシーとは相性が悪い。微妙なところだね。
2017/07/17(月) 21:03:30.21ID:PKmAGp8M0
>>983
俺が言ってるのは、Cでは同じようには書けないが同じ処理はできるってことだよ
986デフォルトの名無しさん (ワッチョイ ce6f-9g51)
垢版 |
2017/07/17(月) 21:07:34.37ID:J4JGo3XO0


C言語なら俺に聞け 141
http://mevius.2ch.net/test/read.cgi/tech/1500293207/
2017/07/17(月) 21:16:05.25ID:dzhRVtEN0
おっつおっつ
2017/07/17(月) 21:20:55.01ID:LYlgQVUQ0
>>967,969
チョイ拡張言語ってのはエコシステムが付いてこず勝手に死ぬ。
Dもだし、Objective-CはAppleに拾ってもらえたけど、もう確実に死ぬ運命だよね。
(あれらはチョイ拡張でもないが)
チョイ拡張だとわざわざCから移行する意味が無いんだよ。
理想的にはやっぱ標準に入ってくれないと辛いわ。

Cが死に行く、って指摘については、俺もそう思っていたのだが、
何度も言っているが最近Cスタイルの他言語コードを見てちょっと考えを改めつつある。
OOPのコードは結構真面目に追いかけないと辛くて、読みやすくはない。
これはCも同様だと思っていたのだが、実はCの読みにくさは「階層」と「後方参照」がないだけで、
(つまりファイルがバラバラで、しかもグダグダな順に書かれているからであって《=プチ難読化済》)
構造的に問題があるわけではなく、それなりに読みやすいことに気づいた。
だからこれらがある言語(Python以外の新しい言語全部)でCスタイル(手続き型)で書かれたコードは
実はかなり読みやすいのだと思う。
(問題は、そういうのにあまり遭遇しないことだが)

だからC自体は廃れるかもしれないけど、Cスタイルは多分廃れない。
そして今のところ手続き型万歳的な言語はCだけだ。
となると、Cに足りない上記、「階層」「後方参照」が入ればCってもう一回来るかも?とも思う。
(つか、namespaceすら入れないって何よ?とは思うよマジで)

>>986
2017/07/17(月) 21:22:41.43ID:n17oqQVv0
Pythonがプロトタイプ宣言の必要のないC言語と言ってるバカがいるのはこのスレですか?
2017/07/17(月) 21:30:16.49ID:LYlgQVUQ0
>>973
全部書くのがお前のジャスティスならそうすりゃいいし、
実際そっちが主流かもしれん。

しかしヘッダファイルを用意するなんて完全に二度手間だし、
コンパイラが自動的にやれよマジで、と思ったことは無いのか?
コンパイル時間が気になるのなら、ヘッダファイルを用意しろ、
面倒ならなしでよし、その場合はコンパイラが勝手に探してくる、
その分コンパイル時間はかかるが手間が省ける、って仕様で何も問題ないだろ。
てか他言語は全部そうだし。(Python除く)

俺はあの仕様がいまだに残っており、
また、お前みたいに疑問を持ってない奴がいることがよく分からん。
2017/07/17(月) 21:39:14.19ID:LYlgQVUQ0
>>989
× Pythonがプロトタイプ宣言の必要のない
○ Pythonはプロトタイプ宣言が出来ない
○ JavaScriptはプロトタイプ宣言が必要ない

何度も言っているがこれだけでPythonは糞だと断定できる。
一番わかりやすい順に記述出来ない時点で糞。
ただしPythonってのは元々そういう言語。ユーザの自由を認めていない。

で、俺はマジでPythonに関わるつもり無いからもう止めて。
Python信者が発狂しているし。俺自身Python知らんし。
2017/07/17(月) 21:41:38.75ID:nYhUL1Kkd
最強はアセンブリ言語
2017/07/17(月) 21:43:34.50ID:iqtGzeji0
一元管理と二重チェック、共存はできないが一概にどちらが優れていると決めつけられるものでもないなぁ。
2017/07/17(月) 21:45:43.44ID:U2FIHXXv0
>>985
だからgotoでどうやってやるんだよ
戻り番地の意味わかる?
2017/07/17(月) 21:46:23.02ID:/QULOYxMa
>>990
いや、何も無理してC使う必要はないんだよ。なんだったら新言語作ればいい。
bison, flex (yacc, lex) があるわけだし。

で、比較的楽に言語を作る方法は、C言語へのコンバータにしてしまうことだ。
そうするとかなり多くの環境で動くものがいきなりできる。
C++も最初の頃はそうだった。
2017/07/17(月) 21:49:21.75ID:U2FIHXXv0
>>991
知らないのに糞とかアホすぎる w
2017/07/17(月) 21:49:44.33ID:U2FIHXXv0
うめ
2017/07/17(月) 21:50:16.71ID:U2FIHXXv0
うめ
2017/07/17(月) 21:51:40.93ID:qENq84dkM
>>991
バカは何度指摘してもバカのままなんだな
2017/07/17(月) 21:51:49.33ID:n17oqQVv0
>>990
1ソースコードファイル1オブジェクトファイルだからそういう仕様なんだよ
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
life time: 66日 23時間 31分 46秒
レス数が1000を超えています。これ以上書き込みはできません。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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