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

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2017/07/17(月) 21:06:47.63ID:J4JGo3XO
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://mevius.2ch.net/test/read.cgi/tech/1494508803/
http://www.geocities.jp/c_cpp_cs/about_c/
2デフォルトの名無しさん
垢版 |
2017/07/17(月) 21:15:16.42ID:bGVplWmj
< `∀´>ニダー
2017/07/17(月) 21:41:46.56ID:/QULOYxM
#include < `∀´>
2017/07/17(月) 21:56:04.46ID:PKmAGp8M
>>1


>>994
>だからgotoでどうやってやるんだよ
>戻り番地の意味わかる?

できないわけがないってw gotoで飛んでgotoで戻りゃいいんだから
非同期なら別関数にする必要があるが
2017/07/17(月) 21:57:25.18ID:4pA3RK/K
ちょっと書いてみてよ
2017/07/17(月) 21:58:43.30ID:n17oqQVv
プログラムカウンタをスタックに積まないでコール元に戻れるわけ無いだろ
プログラムの動作原理を知らなさ過ぎる
2017/07/17(月) 22:02:11.80ID:PKmAGp8M
逆に関数内関数じゃないとできない処理ってどんなの?
2017/07/17(月) 22:08:32.43ID:LYlgQVUQ
Python信者がうるさいのでもう一度書いておくと、以下URLの下のほう、
> しかし、16行目にある print func_a(5) を 4行目の def func_a(a): 行よりも上に移動すると、次のようなエラーが返る。
> http://www.isc.meiji.ac.jp/~mizutani/python/recursive_call.html
これはJavaScriptは通るんだよ。
つーか、他言語は多分全部通る。落ちるのはPythonだけ。
お前らPythonしか使って無いからこれが糞だと認識できないんだよ多分。
2017/07/17(月) 22:16:47.67ID:LYlgQVUQ
前スレ>>995
990にレスが付いているのはヘッダについてか?
それなら俺はGCCに「自動ヘッダ生成器」を組み込んでくれよと思う。
というかCはヘッダで妙なトリック使いすぎてて自動生成できる状況ではないのだとは思うが、
それなら足りない関数だけでも自動で追加してくれよ、と思う。

つっても「後方参照」できるようになれば解決する話で、
マジでこれをいまだに放置している理由はよく分からん。
というか、俺に反論している連中ですらこれについては多分賛成なんだよな?
「後方参照」出来ない方がいいんだ!って理由がある奴っていないだろ。
だからこそ、Pythonが出来ないのがアホすぎて際立つわけでね。
2017/07/17(月) 22:25:47.17ID:Dn7+fEGp
前後を理解してないバカは参加するな
ID:LYlgQVUQ お前のことだ
11デフォルトの名無しさん
垢版 |
2017/07/17(月) 22:28:20.57ID:WpdYiVZf
何でわっちょい無くなったの?
2017/07/17(月) 22:32:47.62ID:LYlgQVUQ
>>11
お、確かにそうだな。
俺はワッチョイありの新スレが立ったらそっちに動くって事で問題ない。
(つってももうこの話は終わりそうだが)
2017/07/17(月) 22:43:11.36ID:Zyqgn8pO
>>4
> gotoで戻りゃいいんだから
だからどこに戻るんだよ? w

> 非同期なら別関数にする必要があるが
戻り番地も知らん奴が非同期とか笑えるわ

>>7
ないでしょ
ローカル変数でないとできない処理を聞いてるのと同じ
2017/07/17(月) 22:53:34.33ID:PKmAGp8M
>>13
だからできるでしょ
俺は同じようには書けないが同じ処理はできると言ってるの
新たにスタック積む話なんか初めからしてないぞw
2017/07/17(月) 22:53:37.21ID:Zyqgn8pO
>>8
> > しかし、16行目にある print func_a(5) を 4行目の def func_a(a): 行よりも上に移動すると、次のようなエラーが返る。
> > http://www.isc.meiji.ac.jp/~mizutani/python/recursive_call.html
まだやってるのかよ w
他の言語に倣うなら頭に
def main:
print func_a(5)
って書いて最後に
if __name__ == 'main':
main()
書けばいいだけ

> お前らPythonしか使って無いからこれが糞だと認識できないんだよ多分。
お前がPython知らんだけ
2017/07/17(月) 22:59:52.61ID:HedtDN7o
x86なら ENTER/LEAVEで実装されているな
出来るっていうならコードで示せよ
2017/07/17(月) 23:01:17.10ID:Zyqgn8pO
>>14
void f( ){
 void g( ){
  ...
 }
 g();
 g();
}
goto 使って同じ処理書いてみろよ
2017/07/17(月) 23:02:18.10ID:vodzC7WI
           / ̄\
           |    |
           \_/
             | __
            ┴´   ``ヽ   
          /::::::::::|::::::    `ヽ       gotoで戻りゃいいんだから!!
         /:::\::::::::<● >   `ヽ  
    ((   / <●>::::::::::⌒      )   
        |  ⌒(_人__)       ノ | |  
        ヽ    )vvノ:      / ノノ
          ヽ (__ン       人
         人           \
        /
2017/07/17(月) 23:07:04.75ID:LYlgQVUQ
>>15
だからそれはできるうちに入らないんだよ。
どうにもPython信者には通じないようだが。
2017/07/17(月) 23:13:04.25ID:PKmAGp8M
>>17
void f( ){
void *ret;
goto a;
g:
printf("g¥n");
goto *ret;
a:
printf("a¥n");
ret = &&b;
goto g;
b:
printf("b¥n");
ret = &&c;
goto g;
c:;
printf("c¥n");
}
2017/07/17(月) 23:18:43.57ID:n17oqQVv
ID:PKmAGp8Mはプログラムの動作原理なーんも分かってない
2017/07/17(月) 23:21:10.09ID:4pA3RK/K
>>15で出来るうちに入らないとかいちゃもんつけたいだけやん
それCで関数の外にprintf書いてコンパイル通らなくて発狂してるようなもんだから
2017/07/17(月) 23:25:27.16ID:4pA3RK/K
いや、こんなこと書いたら揚げ足とってアホ認定されそうだから重ねておくけど、上のレスではコードの見た目の話に話を絞ってある
その範囲では、関数外に書いても通るだけ有難く思うべきである
2017/07/17(月) 23:27:45.16ID:LYlgQVUQ
>>20
まあ俺はそっちの話にあんまり突っ込む気はないんだけどさ、、、

アイデアは理解した。
が、そのラベルの使い方が保障されてるかというと、かなり微妙だと思う。
俺は仕様には詳しく無いからなんともいえないが。
とはいえ、実際はそれで動くケースが大半だとも思う。
2017/07/17(月) 23:29:34.59ID:81nqESXy
>>19
さっきからプロトタイプ宣言を書く書かないの話して、中身で使うだけの関数を下に書ければ見やすい的なことを言ってなかった?
その観点から言って、>>15にどんな問題があるの?
2017/07/17(月) 23:35:29.76ID:4pA3RK/K
実用上問題なくてもイチャモンつけたいだけw
2017/07/17(月) 23:51:06.35ID:LYlgQVUQ
>>22-23,25,26
だからPython信者はアホなんだよ。何度も言っている通り、

JavaScriptは以下のコードが動く=後方参照できる
Pythonは以下のコードが動かない=後方参照できない

といっているだけ。マジで分かれよアホ。
以下コードをブラウザ上でF12押してコピペしてみろ。動くから。

(function(){
say_hello();
say_world();
function say_hello(){console.log('hello');}
function say_world(){console.log('world');}
})()

Cはこの順に配置しようとすると《歴史的理由で》プロトタイプ宣言が必要。しかしやれば出来る。
Pythonはこの順に配置することがどうやっても出来ない。だから糞。

CもJavaScriptも設計者の自由を制限しない言語だ。
子関数をどこに配置するのが良いのかは設計者が考え、最適化できる。
これがCやJavaScriptの思想。

対してPythonは設計者の自由を制限し、
設計者ごとに異なる部分が無いことこそが読みやすさだと嘯く。
それはPythonerは馬鹿であると定義しているのと同じ。

だってCでもJavaScriptでも、Pythonと同じ順に配置は出来るのだから、
Pythoner以上の脳みそがあればPythonより読みやすく書くことは出来る。
もちろん馬鹿が書けばPython以上に読みにくくなるが、それはそういう仕様だ。(馬鹿は死ねという仕様)
Python馬鹿がCスレまで来て思想が全く異なることを理解せずに喚いているから話が通じない。
Pythonは馬鹿用言語だということを自覚しろアホ。
2017/07/17(月) 23:55:03.58ID:PKmAGp8M
なんか問題あったかい?
ラベルのポインタはGCCとclangは対応してる
標準じゃなく拡張だけどなw
2017/07/17(月) 23:55:41.84ID:81nqESXy
>>27
で、どんな問題があるの?
2017/07/17(月) 23:57:28.74ID:4pA3RK/K
>>27
まずCスレでPythonの話題持ち出したお前が何言ってんの?w
2017/07/18(火) 00:06:20.95ID:zmpO/wkd
>>27
うわー最初は
viod say_hello(count){
if (--count<0) return;
printf("hello");
say_world(count);
}
void say_world(count){
printf(" world!\n");
say_hello(count);
}
みたいな例を出してたのに、それが出来ると分かるないなやわざわざPythonで出来ない例持ち出して来てら
これアンチしたいだけじゃん
2017/07/18(火) 00:08:33.09ID:tZS7qvye
>>28
いや、ラベルって「そこから下」に対しては保証されてるが、
「そこから上」って保証されてるか?
まあこの言い方では通じないと思うから具体的に書くと、

(A)
label:
(B)

で(B)側にゴミがない=次の命令がすぐ詰まっていてそこにJUMPすれば動作する
ことは保障されていると思う。これは普通の使い方だから。
ただ、上から流れてきたときに、(A)側にパディングされてたりしないか?というのは微妙で、
x86だとイミディエートに十分な長さがあるから問題ないとして、
16bitとか8bitとかの場合、コード領域にイミディエートを積んでいることは普通にあって、
しかも結構適当な場所に吐かれていた記憶が。
だからコンパイラ側に「ここは明らかに通らない」という風に見える場所はかなり危険かと。

ただし既に言っているが、俺は仕様には詳しく無いから、なんともいえないのだが。
2017/07/18(火) 00:20:24.14ID:yhFxnttF
>>32
この場合実行時にジャンプ先のアドレスを代入するのでその手の問題は無いでしょう
https://docs.oracle.com/cd/E19205-01/821-0386/bjabt/index.html
2017/07/18(火) 00:21:58.12ID:tZS7qvye
>>29
子関数を下に書いた方が分かりやすいときに、それが出来ないのが問題。

>>31
それは俺の間違いだった。俺が思っていたほどは糞ではないのも事実だ。
ただしやっぱりJavaScriptやCと比べたら糞だよ。

しかしお前らも知っていると思うが、
Pythonの最大の糞ポイントはラムダに式しか書けない事だろ。
つか、糞ポイントがぽこぽこ出せる時点で糞言語なのは確定なんだよマジで。
そしてCやJavaScriptの思想とは対極にあるのがPythonだ。
それを使うのはお前らの自由だが、それをCスレで喚くのはキチガイだ。
C的価値観からするとPythonなんてキチガイ馬鹿用言語だよ。
逆にお前らがPythonスレで
「Cみたいなシートベルトもエアバッグもない車に今更乗れるか!」って
言ってりゃいいんだよ。

というわけでお帰りくださいマジで。
俺は思想的にPythonとは合わないから、自主的に使うことはないと思います。
2017/07/18(火) 00:25:56.65ID:tZS7qvye
>>28,33
ああすまん間違えた。確かに問題ない。普通の使い方だ。
俺が勘違いしてた。
2017/07/18(火) 00:30:29.84ID:NDJOFNKG
>>32
コード領域にイミディエイト積んでいるのは当たり前
イミディエイトは即値
アセンブリコードのニーモニックでオペコードに直接データ(値)を指定するのだから
コード領域にしかイミディエイト値は存在し得ない
2017/07/18(火) 00:31:52.64ID:zmpO/wkd
>>34
そもそも最初にCスレにPythonの話題を書き込んだのは君なのに何言ってんの?
こっちはそもそもPythonを擁護してるんじゃなくて君の言っていることの変な部分を指摘してるだけだぞ
38デフォルトの名無しさん
垢版 |
2017/07/18(火) 00:34:45.35ID:/ZeLwNbO
>>34
なんか知らんがHaskellみたいな順序に依存しない言語がおまいさんにあってる気がする。
2017/07/18(火) 00:44:21.05ID:tZS7qvye
>>36
いや、オペランドの長さが足りなかった場合、
中途半端なところにデータ領域を確保するCPUもあるって事。

>>38
Haskellは意識高すぎて無理だった。
てかあれ、遅延評価以外目新しくないよな?
そしてその遅延評価はC++にテンプレートでパクられてて笑ったが。
あれでC++のテンプレートの汎用性の高さに驚いたよ。

ちなみに、他言語のすごいコードって知ってるか?見てみたいとは思うから。
例えばCなら、LinuxのカーネルやGit(作者同じ)がそうだし、
C++ならchromeやV8が多分そう(といっても割とCらしいが)
PythonやHaskellって喚いているだけで現物がなくね?
所詮スクリプトで使い捨てコードが多いってことか?
2017/07/18(火) 00:47:51.04ID:gHxy0snY
>>39
PythonアンチカスPythonアンチスレに行け
二度とこのスレでPythonの名を出すな
2017/07/18(火) 00:55:04.83ID:tZS7qvye
そういやgotoで思い出したが、
マルチレベルbreakはあってもいいと思うけどね。
gotoがあればなあ、ってのは大体このケースだろうし。

オレオレパーサも組めない範囲でもないんだろうけど、
やっぱ誰かががっつりデバッグ済みにしてくれてるのを使いたいよ。
2017/07/18(火) 01:00:22.85ID:NDJOFNKG
>41
その用途に最も近いのは例外処理のtry-cattch構文だろうな
C言語では使えないけど
■ このスレッドは過去ログ倉庫に格納されています