18/11/26 23:21:21.04 9UWiUoMZ0.net
任意のデータをその半分に出来る圧縮技法、誰か考えて
201:デフォルトの名無しさん
18/11/27 00:17:38.39 sRUlwxGC0.net
SERNをハックしてLHCでマイクロブラックホールを作ってどうたらこうたらするとかなり圧縮できるよ
202:デフォルトの名無しさん
18/11/27 00:21:47.09 E9za3JrpM.net
綴りを間違えるとホワイトホールができちゃうかもしれんぞ
203:デフォルトの名無しさん
18/11/27 00:22:04.16 ugyzpzqZ0.net
圧縮は出来ても、復元が出来なさそうw
204:デフォルトの名無しさん
18/11/27 01:23:33.76 UHpiRGCo0.net
マジレスすると情報っていうのは消失しないと考えられているので
BH表面にエネルギー運動量テンソルの波動として,飲み込まれた物質郡の属性
(電荷など)が記録される……筈w
少なくとも現状の場の量子論と重力宇宙論ではそういう結論が出てる。
C言語とは関係ないけど,BHを記憶装置として用いるっていう考え�
205:ヘ 突拍子もないけど理論的には可能だよねぇ,上記の理屈が正しいとすると。
206:デフォルトの名無しさん
18/11/27 01:29:33.86 IxTjeZ9T0.net
みんなが何を言っているのかよくわからない
207:デフォルトの名無しさん
18/11/27 02:18:13.33 enNfKuoe0.net
C言語でok
208:デフォルトの名無しさん
18/11/27 22:26:43.87 /aKqcH8H0.net
>>197
例えば100bitの長さのデータは全部で2^100種類作ることができる
50bitの長さのデータは全部で2^50種類作ることができる
任意のデータを半分に圧縮できる方法があるとして
100bitで作れる2^100種類のデータをすべて圧縮したなら
50bitの長さで2^100種類の異なるデータができなくてはいけないがそれは不可能
209:デフォルトの名無しさん
18/11/28 01:13:46.19 BkKDQWNJ0.net
いやいや、ちょっと待て。ここは発想の転換が必要だ。例えば8インチのフロッピーディスクから3.5インチの
いや、なんでもない。みんなには内緒にしておいてくれ。
210:デフォルトの名無しさん
18/11/28 02:27:03.19 iOF+GVq50.net
「任意の」データを半分に圧縮できるとすると
圧縮した後のデータもさらに半分に圧縮できるはず
そうやって圧縮を繰り返せば最後には全てのデータは1ビットになる
よってそのような圧縮法がないことは明らか
可逆でないならそれでもいいかw
211:デフォルトの名無しさん
18/11/28 05:46:42.41 N04UITTm0.net
しかしソースコードとかって圧縮率高いよね。
やっぱり同じような文字が続いたりインデントに空白文字が続いたりするからだろうか。
212:デフォルトの名無しさん
18/11/28 07:08:14.21 82iiMHmWa.net
コルモゴロフの複雑性もあります
213:デフォルトの名無しさん
18/11/28 09:24:07.52 seMAmMUm0.net
そこでTHCompですよ
214:デフォルトの名無しさん
18/11/28 09:40:55.66 0XeeIlyH0.net
情報のエントロピー
215:デフォルトの名無しさん
18/11/28 13:43:56.99 rECr01ZDM.net
今から趣味でプログラミング始めます!激励してください!!
216:デフォルトの名無しさん
18/11/28 17:27:07.00 N04UITTm0.net
悪いこと言わないからPython3やれ
217:デフォルトの名無しさん
18/11/28 17:57:49.24 Vqd4vFOqM.net
趣味で初プログラミングなら、俺からもpythonを勧める。
GUIが手軽だとモチベーション違うよ。
218:デフォルトの名無しさん
18/11/28 18:00:54.28 rECr01ZDM.net
分かった!いやよくわかんないけどそっちから始める!
XCodeでできるかな、ありがとう!
219:デフォルトの名無しさん
18/11/28 18:48:28.91 N04UITTm0.net
$ brew install python
とやって
$ python
これで起動する。もうスレチだし「macOS Python3」とかでググれ。
220:デフォルトの名無しさん
18/11/28 19:51:31.92 wHjpMIAFa.net
Kotlinもよろしく
221:デフォルトの名無しさん
18/11/28 20:05:07.50 Vqd4vFOqM.net
まだマイナーすぎ。入門書があふれてきたら推すよ
222:デフォルトの名無しさん
18/11/28 22:31:15.42 xsmtECg3a.net
URLリンク(bituse.info)
上記のサイトなどを参考に
簡単な九九の表を作ると
1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15...
...
...
(略)
このようになると思いますが、
隣の数字を参照にして足して
3 5 7 9 11 13 15 17
6 10 14 18 22 26 30 34
9 15 21 27 33...
...
...
(略)
と、表示するには上記のサイトの様なプログラムをどのようにすれば良いのでしょうか?
宜しくお願いします。
223:デフォルトの名無しさん
18/11/28 22:37:30.42 IOIePrN/0.net
>>218
死ね
224:デフォルトの名無しさん
18/11/28 23:13:58.25 MBR3DrMT0.net
puts("3 5 7 9 11 13 15 17\n");
puts("6 10 14 18 22 26 30 34\n");
puts("9 15 21 27 33...\n");
225:デフォルトの名無しさん
18/11/28 23:24:49.65 30WXuBf5p.net
>>220
puts は改行するので、文字列の末尾に \n を付けると2回改行することになる
226:デフォルトの名無しさん
18/11/28 23:26:32.45 MBR3DrMT0.net
あっー 指摘ありがと
227:デフォルトの名無しさん
18/11/29 02:39:17.93 d0mF96D
228:3a.net
229:デフォルトの名無しさん
18/11/29 04:25:22.53 +QhJBOyD0.net
int main() {
char *ary[] = { "AAAA" , "BBBB" , "CCCC" };
printf("%s\n%s\n%s\n" , ary[0], ary[1], ary[2]);
printf("%x\n%x\n%x\n" , ary[0] , ary[1] , ary[2]);
printf("%x\n%x\n%x\n" , &ary[0] , &ary[1] , &ary[2]);
return 0;
}
実行結果
AAAA
BBBB
CCCC
405064
405069
40506e
61ff24
61ff28
61ff2c
っていうのでよくわからなくなったんですが
0061FF24==00405064で00405064==41414141
なのに、同じary[n]で参照?してるアドレスが違うのは%sが特別だからですか?
それと、AAAA,BBBB,CCCCはどの変数にも格納されていなくて、ただポインタがその文字列たちを指しているっていう理解であってます?
*がよくわからない・・・・・
230:デフォルトの名無しさん
18/11/29 04:37:33.83 +QhJBOyD0.net
ああ直接ポインタを作っててそれで変数がある必要もないのかな?
AAAA,BBBB,CCCCを普通に配列で作って、それを1つのポインタでオフセットを指定して選ぶ。みたいなのってCでできるんですか?
231:デフォルトの名無しさん
18/11/29 05:10:38.21 ljP5qN1x0.net
any[]には各文字列のアドレスが格納される。文字列へのポインターの配列。
%sはポインターが指すアドレスの文字列を、%xはポインターに格納されたアドレスを表示する。
&any[]とすると、ポインターそのもののアドレスを取得して表示する。
61ff24 -> 405064 -> "AAAA"
みたいになってる。
232:デフォルトの名無しさん
18/11/29 05:25:57.02 ljP5qN1x0.net
一つのポインターでオフセットを指定することはできるけど、
"AAAA"はAAAAの4byteではなくて、文字列の終端である0を含めた5byteになる。
char *any = "AAAABBBBCCCC";
こういうイメージで+4や+8でアクセスしようとしたら
%sで表示したとき意図する結果にならないかもしれない。
文字列として扱わなければ問題ないです。
char *any = "AAAA\0BBBB\0CCCC";
こんな書き方もできますが、*を理解したほうがよいと思います。
アドレスやオフセットの概念は理解しているようですので。
233:デフォルトの名無しさん
18/11/29 07:00:11.93 f12HiZt90.net
>>224 の実行結果を解釈すると...
文字列 "AAAA" "BBBB" "CCCC" の実体は 0x405064 から格納されていて、
16進ダンプだと
0x405064: 41 41 41 41 00 ; {'A', 'A', 'A', 'A', '\0'}
0x405069: 42 42 42 42 00 ; {'B', 'B', 'B', 'B', '\0'}
0x40506e: 43 43 43 43 00 ; {'C', 'C', 'C', 'C', '\0'}
という具合に(アラインメントのためのパディングなしに)詰め込まれている。
行分けせずに
0x405064: 41 41 41 41 00 42 42 42 42 00 43 43 43 43 00
と書けば「詰め込む」のイメージが分かりやすいかも。
charへのポインタの配列 ary[] は 0x61ff24 から配置されていて
番地: 0x61ff24 == &ary[0], 値: 0x00405064 == ary[0] (== "AAAA"の先頭番地)
番地: 0x61ff28 == &ary[1], 値: 0x00405069 == ary[1] (== "BBBB"の先頭番地)
番地: 0x61ff2c == &ary[2], 値: 0x0040506e == ary[2] (== "CCCC"の先頭番地)
これで分からんかな。
ポインタが指す実体(文字列)の番地、その(文字列の)番地が格納された配列の値、
(値としてポインタが格納された)配列要素の番地。
234:デフォルトの名無しさん
18/11/29 09:05:40.33 Msn7clch0.net
どうでもいいけど略すならaryじゃなくて,
235:arrでは。
236:デフォルトの名無しさん
18/11/29 09:24:21.59 b4PauqdMx.net
>>229
aryもまれによく見る。
237:デフォルトの名無しさん
18/11/29 12:11:40.55 +QhJBOyD0.net
ありがとうございます。
読んでみてなんとなくは理解できるようになりました
>>227
NULLのことはすっかり忘れてました
*を理解できるように頑張ります、ご丁寧にありがとうございました。
238:デフォルトの名無しさん
18/11/29 17:20:38.58 pCyrju1nm
マイコンのLEDを点滅させるプログラムを
教えて頂きたいです。
問題としては、マイコンのボタンを一度押すと0x55で点滅し、
もう一度同じボタンを押すと0xAAで点滅するというプログラムを
考えなくてはなりません。
今はまだif文とswitch文しか習っていません。
239:デフォルトの名無しさん
18/11/29 16:00:56.19 Pq9K3tWa0.net
>>218-223
Ruby で作った
NUMBERS = ( 1..5 ).to_a
Count = NUMBERS.length
# 九九の表、Times Table ( Multiplication table ) を作る。
# map は1次元配列を作るので、each_slice で、2次元配列にする
Multiplication_table = NUMBERS.product( NUMBERS ).map { | x, y | x * y }
.each_slice( Count ).to_a
result = [ ]
Multiplication_table.each do | ary | # 1行ずつ処理する
result.push ary.each_cons( 2 ).map { | x, y | x + y } # 隣同士を足す
end
p result
結果
[[3, 5, 7, 9], [6, 10, 14, 18], [9, 15, 21, 27], [12, 20, 28, 36], [15, 25, 35, 45]]
240:デフォルトの名無しさん
18/11/29 16:15:48.88 qd4rCcG0M.net
>>233
Rubyすげぇ~!!!
URLリンク(gigazine.net)
URLリンク(www.softantenna.com)
URLリンク(www.softantenna.com)
URLリンク(findy-code.io)
大人気Ruby!
Ruby大人気!!
241:デフォルトの名無しさん
18/11/29 16:20:18.55 Msn7clch0.net
>>234
やめてさしあげろw
まあ擁護するなら人気のありなしで言語の優劣は測れないと思うけどね。
IOなんてドマイナーだけど俺は好きだし,素晴しい言語だと思っている。
なおRuby
242:デフォルトの名無しさん
18/11/29 18:14:40.72 ljP5qN1x0.net
(´-`).oO(aryだったのね……)
243:デフォルトの名無しさん
18/11/29 18:49:51.71 Msn7clch0.net
いやarrやろ(しつこい)
244:デフォルトの名無しさん
18/11/29 19:09:36.82 8tueZiBHa.net
array
245:デフォルトの名無しさん
18/11/29 19:12:17.70 sIB7nB920.net
いいやaryもまれによく見る。
俺は省略せずarray派だが。
246:デフォルトの名無しさん
18/11/29 19:19:19.48 Msn7clch0.net
まあarrayくらい省略するなって話よな
creatじゃないんだからw
247:デフォルトの名無しさん
18/11/29 19:46:28.81 8tueZiBHa.net
>>239
「まれによく見る」とは?
248:デフォルトの名無しさん
18/11/29 19:51:20.93 lt3dDpp60.net
総体としての頻度は稀だが、とある人の書いたソースには悉く ary として書かれており、
その書いた人というスコープ内においては良く見る
249:デフォルトの名無しさん
18/11/29 19:53:37.10 sIB7nB920.net
>>241
weblio辞書より
まれによくある
別表記:稀によくある、稀に良くある
起こり得る事柄を形容して用いられることのある言い回し。
滑稽な表現であるが、あからさまな形容矛盾であり、日本語としては意味をなさない。
「ブロント語」と�
250:オて広まったインターネットスラング。 「まれによくある」の語のニュアンスは、使用者や使用場面によって異なるといえるが、 「頻繁に起こるとも言えるし、めったに起きないとも言える」といった意味合いだったり、「特定の人においてはよくあるが、その他の人には起こらない」といった意味合いだったり、あるいは、いわゆる「あるあるネタ」を指していたりする。
251:デフォルトの名無しさん
18/11/29 20:38:21.77 +QhJBOyD0.net
ちなみに>>224のやつは入門サイトにあったやつを少しいじったやつです
252:デフォルトの名無しさん
18/11/29 21:38:47.98 FncUCYw3a.net
スッキリわかるC言語と苦しんで覚えるC言語
どちらで勉強するか迷ってるんですがどっちがいいと思いますか?
253:
18/11/29 22:00:55.64 yDZ234lo0.net
>>245
>スッキリわかるC言語
胡散臭いです…
>苦しんで覚えるC言語
正直で好感を持てる題名ですね
254:デフォルトの名無しさん
18/11/29 22:01:35.59 kX/wXhND0.net
>>245
立ち読みして自分にとって説明が理解しやすいと思った方を選んだら?
255:デフォルトの名無しさん
18/11/29 22:30:54.22 +QhJBOyD0.net
苦CのほうはWebにサイトがあるのでそっちを見ては?
256:デフォルトの名無しさん
18/11/29 22:40:45.52 FncUCYw3a.net
まだ新しいスッキリわかるC言語をベースにウェブで分からない時に苦しーも見る方針に決めました
皆さんありがとうございます
257:デフォルトの名無しさん
18/11/29 22:48:01.10 TPe/tu+/0.net
>>244
IDEを使ってメモリウインドウから>>228の内容を納得いくまで確認しろ。
> AAAA,BBBB,CCCCを普通に配列で作って、それを1つのポインタでオフセットを指定して選ぶ。みたいなのってCでできるんですか?
それを222で君がやっているように見えるが。
書き方が気に入らないのなら、以下でも多分行ける。
for (int i=0;i<3;i++) printf("%s", *(ary+i));
他言語とは文字列の扱いが異なる。Cの方がより原始的で、はっきり言って使いにくい。
他言語:文字は長さ1の文字列
C言語:文字はcharで、文字列はcharの配列
ただ、char周りなんてどうせ大して使わないから飛ばしていい。さらに言うと、
> AAAA,BBBB,CCCCを普通に配列で作って、それを1つのポインタでオフセットを指定して選ぶ。
なんてのはbotとかでも作るわけでなければ使わない。
printfべた書きで大体事足りる。
258:デフォルトの名無しさん
18/11/29 23:07:20.28 +QhJBOyD0.net
>>250
一応プロセスメモリエディタとか使いながらやってたんですよ、それでも混乱するので聞きました。
多言語はやったことないのでよくわかりませんが、高級言語のよくわからずに使う感じが苦手なので、むしろ原始的なのは好きです。
> AAAA,BBBB,CCCCを普通に配列で作って、それを1つのポインタでオフセットを指定して選ぶ。
っていうのがbotを作るうえで必要というのは初めて知りましたが、botは作りたいと思ってました。
259:デフォルトの名無しさん
18/11/30 00:06:17.84 tn7d6mNM0.net
>>251
> プロセスメモリエディタ
なんじゃそりゃ?と思ってみてみたが、どっちかというとハッキングツールだな。
マジな話、IDE使え。個人開発レベルの糞ツールとは次元が違うから。
俺はVSがいいと思うが。
言い忘れてたが当然return文にブレークポイントを当てて止めて見るんだよ。
というか他に何言語やってるんだ?
> AAAA,BBBB,CCCCを普通に配列で作って、それを1つのポインタでオフセットを指定して選ぶ。
これは全くの初心者の発想ではないはず。
明らかに他言語ではこう書ける、これをCでやりたい、というように読めるが。
> っていうのがbotを作るうえで必要というのは初めて知りましたが
というか、文字列を配列に持って切換ながら使う=それらの文字列は同列に扱うべき、
という使い方をすることがほぼ無いんだよ。他の言語でも、アプリでも。
大体文字列なんてリテラルでその場で使って終わり、が殆どだ。
それ以前に、charを主として使うアプリ(bot含む)をCでやろうというのも間違いだが。
char出力は結局UIであって、どうせI/Oで引っかかるから、Cの優位�
260:ォ(速度)が生かせない。 そして原始的な分、生産性自体は悪いから、そのデメリットだけ受けてしまう。 AIbotとかで演算部分に相当速度が必要でない限り、スクリプト言語で作った方がいいと思うぞ。 この意味で、Cでの文字出力はほぼログ生成でしかなく、 だからこそ貧弱なライブラリでも間に合ってる訳だが。 > 高級言語のよくわからずに使う感じが苦手 いやこれは違う。 「余計なことを考えなくて済む」という意味で後発言語はよく出来てるんだよ。 まあこれはじきに分かるだろうさ。
261:デフォルトの名無しさん
18/11/30 01:05:40.46 qUT8id4/0.net
void君は相変わらずだな
262:デフォルトの名無しさん
18/11/30 01:14:13.61 dHzryZqK0.net
プログラミングというより解析系に興味があっていろいろ調べてただけです。
Cのこともプログラミングのこともまだ全然わからないです
263:デフォルトの名無しさん
18/11/30 01:40:17.87 ZZJKHSVT0.net
puts()関数とかの「s」ってストリングのsなんだね。
今までずっとputの三単現だと思ってたわw
264:デフォルトの名無しさん
18/11/30 08:28:07.36 VjmtC3o00.net
>>245-249
スッキリJava は、250ページにも及ぶ、猿向けにオブジェクト指向を解説した、伝説の書。
単純な言語の文法書ではない
前半はフレームワークを使う人の立場で、後半はフレームワークを作る人の立場での解説。
だから初心者は、後半を読まなくてもよい
苦しんでC は、手順書。
14歳以下とか、中学生に教えるたぐいの本。手順を教えるだけ。
たいていのAndroid アプリの本と同じ
なぜ、こういうデザインパターンをするのかとか、概念の説明などはない。
漏れは、2時間で読める。
理解して考える要素がないから、ライトノベルと同じ
265:デフォルトの名無しさん
18/11/30 08:32:59.05 xQIq6Uyn0.net
理解して考える脳の無いRuby厨であった
266:253
18/11/30 08:36:47.97 VjmtC3o00.net
例えば、WEB+DB 106号の「実践 Android/iOS アプリ設計」を読んでみ
DI, MVVM, Flux とか、なぜこういうデザインパターンを使うのか、
自分で理解して考えないといけないから、こういう概念の話は難しい
デザインパターンを参考にして、Ruby などでいじくり回すのが、最も身につく。
ポインターのバグ取りに、時間を取られないし
267:デフォルトの名無しさん
18/11/30 09:22:30.92 KWzr3gbka.net
DIって外部の設定を使いましょうって話なんですか?
268:デフォルトの名無しさん
18/11/30 09:39:20.17 vcs52++Va.net
>>256
スッキリわかるC言語はパズドラ作りながらC言語が学べるみたいです
269:253
18/11/30 10:35:00.21 VjmtC3o00.net
DI は、C++ の、p-impl パターン。
外部から、後に作られる、依存性を注入する
class A { new B(引数); }
class A { b = 構築メソッド }
上のように、クラスA 内で、直接B を作らず、
構築メソッドで、Bインスタンスを作る
例えば、クラスBの引数の変更が、クラスAに及ばないように、疎結合にしている。
クラスA・Bの作者が、同一でない場合に、効果が大きい
間接的に、Duck Typing, Interface を使う事で、インターフェース・構築メソッドが固定されるが、
同じ構築メソッドを使うことで、似たようなクラスを扱いやすい
270:デフォルトの名無しさん
18/11/30 14:03:17.31 wR5wJL4H0.net
苦Cから入ったけどつまずいて1年くらい何も触らなかったおもひで
271:デフォルトの名無しさん
18/11/30 16:07:52.38 cYaYTjx50.net
何もわからんうちからえり好みしないでK&R
これですんなり入れることが適性試験
272:デフォルトの名無しさん
18/11/30 17:16:53.52 fQ
273:i4U1HQH.net
274:デフォルトの名無しさん
18/11/30 17:20:44.30 wR5wJL4H0.net
アセンブラの入門かじった程度でもイメージはつかめるしCで躓くことはかなり減ると思う
275:デフォルトの名無しさん
18/11/30 18:19:25.99 cYaYTjx50.net
俺はサブルーチンが関数な言語を1つも知らずにK&Rで憶えた
強いて言うならBASICのUSR関数くらいか
276:デフォルトの名無しさん
18/11/30 18:33:32.23 vx8Iixcxa.net
BASICの全てグローバル変数だとか行番号に苦しんでいた時に徐々にMS-DOSでCが使える状態になってきて、PC-98でMS-DOSが使えるようになり、TurboCとかも出て俺は救われた。
しかしその後UNIX関係の仕事になったのでCができて当たり前の環境になってしまった。
277:デフォルトの名無しさん
18/11/30 19:07:15.02 m3TSK4YL0.net
大学でunixでCをやるようになってvim系の操作が気持ち悪かったからノリで大学を辞めた
人生で最悪の選択をしてしまった
278:デフォルトの名無しさん
18/11/30 19:17:21.91 9hh85ykUM.net
>>266
BASICならGOSUBだろ。
279:デフォルトの名無しさん
18/11/30 21:49:44.97 cYaYTjx50.net
>>269
GOSUBが、どのように関数なんだ?
280:デフォルトの名無しさん
18/11/30 22:03:56.69 5CDqtXe60.net
関数と言えるのは、DEF FN かな?
281:
18/11/30 23:31:23.55 MkfLpznc0.net
>>256
>スッキリJava は、250ページにも及ぶ、猿向けにオブジェクト指向を解説した、伝説の書。
私が知りたいのはスッキリC++(そんなものが存在するのですか?限りなく胡散臭いですね)の話です
282:
18/11/30 23:33:27.03 MkfLpznc0.net
>>261
おっしゃることがよくわからないので、ちょっと書いていただけますか?URLリンク(ideone.com)
283:デフォルトの名無しさん
18/11/30 23:34:56.47 PIchVJHi0.net
#define C Java
284:
18/11/30 23:50:06.20 MkfLpznc0.net
>>266
下準備にはPEEK/POKEも重要
私は CALL で呼んでいた記憶がありますが、もしかするとNとN88とN88(86)とでは違っていたかもしれません…
285:デフォルトの名無しさん
18/12/01 07:43:03.30 7EJdQB2R0.net
PC6001でBASICを覚えてPLAY,SOUNDで音楽作ってたな
PSGの音を聞くだけで懐かしい気分になる
そしてMSXでMSX-Cを覚えた
cursesがあったからローグもどきのゲーム作って遊んでたよ
286:デフォルトの名無しさん
18/12/01 07:47:36.67 +NY+xI8A0.net
サブルーチンって用語はもう消えた?
287:デフォルトの名無しさん
18/12/01 09:16:07.78 4Hoi4/y50.net
C言語以降関数と手続きを区別しない言語が増えたこととOOPでは一部がメソッドと呼ばれるようになったので使用頻度は下がったな
なくなってはいないけど
288:デフォルトの名無しさん
18/12/01 09:27:06.02 TOuK5lWF0.net
関数と手続きを総称して、「メインルーチン」に対して「サブルーチン」って
言い方なら今でも使うんじゃないかな。
プログラミング教育の初期の段階での説明。
BASICでの「サブルーチン」は言語仕様での用語だっけ?
289:デフォルトの名無しさん
18/12/01 09:27:25.60 piawvWud0.net
サブルーチンと関数って違うのか(無知)
290:
18/12/01 09:55:16.44 J8cQMvWo0.net
>>279
GOSUB 命令がありました
291:デフォルトの名無しさん
18/12/01 10:14:48.66 /TQ/ikyba.net
ラベルはなかったね
292:デフォルトの名無しさん
18/12/01 10:27:11.17 tI2T+oTI0.net
>>280
処理をまとめたのがサブルーチンで
値を返すのが関数…とかなんかあった気がする
293:デフォルトの名無しさん
18/12/01 16:05:57.68 piawvWud0.net
>>283
その定義だとvoid func(void)
はサブルーチンになるな
ちょっと難癖っぽいけどw
294:デフォルトの名無しさん
18/12/01 16:11:09.57 oMoZEV7I0.net
アセンブラだと値返していようがいまいがサブルーチンっていうよね
今曖昧だってことは元々曖昧だったのかな
295:デフォルトの名無しさん
18/12/01 16:42:04.42 mW7z3f7A0.net
もともとは呼び出しがステートメントであって返値というものが存在しないサブルーチンと、
値を返して式の一部となる関数という区別だね。
式+;が文になるという単純化を行ったCではその区別もなくなってそれが主流になった。
副作用のないものが関数、ありえるのがサブルーチン、と定義を変えて復活はあるかも。
296:デフォルトの名無しさん
18/12/01 16:58:01.89 6zv/O1Bm0.net
void以外は関数って事だな
297:デフォルトの名無しさん
18/12/01 17:11:46.73 FtOkB0gI0.net
言語(VBとか)によっては明確な違いがあったりするけど、概念的にはサブルーチン⊃関数というイメージあるわ。
298:デフォルトの名無しさん
18/12/01 18:36:37.73 qSa8BGaMp.net
副作用のある手続きをほんとは関数とは呼ばないのだろうけど
Cではそんなことに頓着せず全て関数に単純化したからね
ただ本来サブルーチンとはメインルーチンと対立する文脈で語られていたものかと
これは単なる呼び出し関係だけでなく、古い言語では変数のスコープなども異なる
Cではこれも単純化してしまった
main は単にスタートアップルーチンから最初に呼び出されるという以外は
特別なスコープを持つわけでもなく、他の関数と何ら違いがない
他の関数から main を呼ぶことも、普通やらないだけで問題なく可能だ
Cでサブルーチンという名前がしっくりこないのはこの辺が理由でもあるかと
299:デフォルトの名無しさん
18/12/01 19:00:11.99 mW7z3f7A0.net
ああ、関数と対比されるのはサブルーチンじゃなくて正しくはプロシージャ(手続き)だね。
300:デフォルトの名無しさん
18/12/01 19:53:46.70 qSa8BGaMp.net
>>290
そうだけと、その辺の用語も統一されてるとは言い難いところがあるよ
AdaなどのPascal系の言語ではprocedureとfunctionという区別があるよね
まぁ値を返すかどうかという違いでしかないわけだけど
VBではPascalのprocedureに相当するのはSubであって、SubとFunctionをまとめた
上位概念としてプロシージャと言うからね
301:デフォルトの名無しさん
18/12/01 21:37:27.03 piawvWud0.net
mainが特別扱いされてると言えばOSが受け取れる返り値は0--255なのにint型を指定するってところとかかな。
302:デフォルトの名無しさん
18/12/01 22:24:12.87 3EVAE8120.net
Perl ではサブルーチンは sub で始まる。これはCの関数のようにも使える。
303:デフォルトの名無しさん
18/12/01 22:38:01.02 VxENaYkZ0.net
>>289
> 副作用のある手続きをほんとは関数とは呼ばないのだろうけど
> Cではそんなことに頓着せず全て関数に単純化したからね
逆だぞ。関数型が馬鹿やったから「副作用」なんて言葉が必要になったのであって。
元々Cの関数は副作用がない。これは単純に、Cの場合は引数で渡すしかないからだ。
(当たり前だがグローバルは使わないとする)
だからC全盛の時代には「副作用」なんて言っている奴すら居なかった。
関数型の連中が副作用(キリッとか気にする必要がでてきたのは、クロージャを濫用したからだ。
単純に言えば、関数に対しての値の渡し方は、
・引数
・グローバル
・this(OOPの)(=インスタンス内グローバル)
・クロージャ(=レキシカルスコープの場合は階層内グローバル)
とあって、クロージャは使い方を間違えば結合を強めてしまうんだよ。
(thisの場合は最初からクラス界面で切る《=public/privateを意識して設計する》
からそこまで酷くはならない)
Cはそれがないから、便利に書けない反面、無駄に結合するって事もない。
(少なくとも、結合していることは明示的に見える)
伊達に50年近く現役な訳でもないのさ。現役で居続けられた理由がある。
304:>>291 AdaとかPascalとか、最早死んで誰も使わないし使う価値もない言語を持ち出しても、 何の意味も無いと思うぜ。 それらが死んだのは、それなりの理由があるんだよ。
305:デフォルトの名無しさん
18/12/01 22:43:10.84 6zv/O1Bm0.net
>>294
ねえねえ、Fortranは?
306:デフォルトの名無しさん
18/12/01 22:58:40.52 fkjVwInMM.net
なんだCの関数には副作用なかったのか。これで安心してprintfできる
307:デフォルトの名無しさん
18/12/01 23:00:40.61 piawvWud0.net
Cに副作用の概念はないって……それは流石に嘘でしょう。
箇所は失念してしまったがK&Rにも関数を指して「文字列を出力したりする場合もあるので純粋な関数とは呼べない」
みたいな記述あるくらいだし。
308:デフォルトの名無しさん
18/12/01 23:07:56.71 8rj5PksfM.net
void君は今日も平常運転
309:デフォルトの名無しさん
18/12/01 23:11:44.86 VxENaYkZ0.net
>>297
副作用の概念はあるに決まってるだろ。
そもそもプログラミング自体が副作用を伴うものであって、
全てを含んだ「学術的な意味での副作用」を伴わないプログラムなんて、何もやらないプログラムだからだ。
それすら理解出来ない>>296なんてただの馬鹿だ。
そうではなくて、関数型()の連中が言っている意味での「副作用の無い関数」についてなら、
Cは全ての関数が該当する、ということだよ。
だから、「副作用(キリッ」する必要すらなかったって事だよ。
試しに関数型()の連中に、「クロージャ禁止、this禁止、グローバル禁止、全て引数で渡せ」と言ってみろよ。
多分、顔が引きつると思うぜ。
310:デフォルトの名無しさん
18/12/01 23:56:03.97 C49O7CpGa.net
引数voidって初めて見たぞ
311:デフォルトの名無しさん
18/12/02 00:31:53.73 jISJOvCb0.net
void君人気っすね。羨し…くはないなw
312:デフォルトの名無しさん
18/12/02 00:39:59.56 qwr+Mk5T0.net
秋田
313:デフォルトの名無しさん
18/12/02 00:45:19.85 Bx+z5yQP0.net
>>301
まあそれがゆとりが嫌われる理由なんだけどな。
お前も含めて自覚がないのが救いようがない。
お前ら、もう既に老害になってると思うぜ。
314:デフォルトの名無しさん
18/12/02 00:53:05.03 +Qh0SqlG0.net
よく分からん捨て台詞だな
315:デフォルトの名無しさん
18/12/02 00:55:37.62 twRH93OM0.net
URLリンク(ja.wikipedia.org)
ゆとり世代については明確な定義、範囲はなく諸説ある。
小中学校において2002年度施行(高等学校は2003年度)の学習指導要領による教育を受けた世代(1987年4月2日 - 2004年4月1日生まれ)。
小中学校において1980年度以降(高等学校は1982年度以降)の学習指導要領による教育を受けた世代。1966年度生まれ以降。
1966年度生まれ以降。
1966年度生まれ以降。
1966年度生まれ以降。
1966年度生まれ以降。
1966年度生まれ以降。
316:デフォルトの名無しさん
18/12/02 01:01:50.46 Bx+z5yQP0.net
>>304
俺に言ってるのなら説明しても良いが、タダではやらん。
お前が説明に値するだけの頭があることを先に示せ。
具体的には、現状の議論について、何らかの進展があるレスをまずしろ。
317:デフォルトの名無しさん
18/12/02 01:23:06.59 26H0WWJ10.net
>>294
まず、副作用という言葉は C が生まれる前から使われていたし意識されていたことですよ
Lisp をやってれば分かることだけど
C 全盛時にCプログラマが副作用という言葉を使わなかったのは当然でしょうね
C は副作用そのものであるノイマンアーキテクチャを素直に表現できる言語と
目されていたわけで (i++ とか)、それこそ最初はグローバル変数も使いまくりだったのでは
また、引数で文字列を渡すにもポインタを使わざるを得ないので、それが�
318:j壊されることを 防ぐ手立てがなかった (今でもないか) 引数経由でなくても、ポインタが使えるということは、そこに任意のアドレスを設定でき、 任意の場所に書き込めるということなので、C の関数で副作用を防ぐ手立てはないわけですよ C 界隈で副作用うんぬんが取り沙汰されるようになったのは const 引数の導入や、 グローバル変数の弊害が意識されるようになって、むしろ民度が上がってきたと見るべきかと あと、Oracle のストアドプロシジャ PL/SQL をやったことはないですか あの文法は Ada そのものなんだけど
319:
18/12/02 01:24:03.02 xpb/M8Xl0.net
>>305
1966以前と1966以後では教育内容で変化があったのですか?数学に関する限り一時期は線形代数も微積分もやる、という過剰な状況だったと思っています
320:デフォルトの名無しさん
18/12/02 01:41:19.09 1UGGVPSQ0.net
>>294
オラクル社の第一言語は、Ada言語を借用したPL/SQLだぞ。
C言語が例外処理機能を受け入れなかったのは完全な失敗。
321:デフォルトの名無しさん
18/12/02 01:45:35.26 1UGGVPSQ0.net
>>308
そうですよね。いま働いている日本人のほとんどはゆとり教育です。
ただ昔は教科書に載っているだけでまともに教えていないと思います。
学年トップレベルだったという年配の多くが義務教育の範囲さえ、完全に忘れているか、知らなかったりします。
322:デフォルトの名無しさん
18/12/02 01:46:50.51 Bx+z5yQP0.net
>>307
> 引数経由でなくても、ポインタが使えるということは、そこに任意のアドレスを設定でき、
> 任意の場所に書き込めるということなので、C の関数で副作用を防ぐ手立てはないわけですよ
それは「副作用」ではなく「バグ」と言うんだよJava以外では。
その他諸々色々勘違いするのは自由だが、
さすがにそれだと話が通じなさすぎて煙たがられてるだろ。
> あと、Oracle のストアドプロシジャ PL/SQL をやったことはないですか
> あの文法は Ada そのものなんだけど
無いね。
ただ、Oracleがそうなら、Ada文法がまだ生き続けていることにはなる。この点は訂正しよう。
とはいえ、それが「参考にする意味があるか」とは別だよ。
本当に意味がある物は、「オブジェクト指向」や「クロージャ」のように、
ほぼ全ての言語でサポートされる事になる。
現状、procedure/function/Subを区別してない言語がメジャーで、
区別した言語(Ada/Pascal/VB)はことごとくマイナーだし、
最近のクロージャのようにC#/C++/Java等のメジャー言語が
相次いで方針を変更してサポートした、ということもない。
それは不要だった、ということで結論は出てる。
それを反例と持ち出してきても意味がないだろ。
323:デフォルトの名無しさん
18/12/02 01:48:13.42 jISJOvCb0.net
老害がブチ切れてて草
変ったのは世の中じゃなくてお前の脳味噌やぞ老いぼれ
324:デフォルトの名無しさん
18/12/02 01:50:31.40 Bx+z5yQP0.net
>>305
> 小中学校において1980年度以降(高等学校は1982年度以降)の学習指導要領による教育を受けた世代。1966年度生まれ以降。
そういうことをするからゆとりは駄目なんだよ。
325:デフォルトの名無しさん
18/12/02 01:55:27.80 Bx+z5yQP0.net
>>309
Oracleについては308の通り。
例外についてはCで採用しなかったのはとりあえずは正解だろ。
未だに各言語で例外方式が安定しないのは、未だにいい解を見つけられてない、ってことだよ。
326:デフォルトの名無しさん
18/12/02 02:36:57.19 twRH93OM0.net
自分がゆとりであることに気付かずにだからゆとりはと言い出すやつばかり。
それが今の時代。
327:デフォルトの名無しさん
18/12/02 07:38:01.21 3j0ioh6B0.net
>(当たり前だがグローバルは使わないとする)
副作用について議論するうえでこんな変な条件付ける人はいない。
あと当然だが、引数によって参照される関数スコープ外の値を変化させるのも副作用だ。
328:デフォルトの名無しさん
18/12/02 10:14:19.71 Bx+z5yQP0.net
>>316
> こんな変な条件付ける人はいない
君がグローバルを普段から濫用している人だとは理解した。
> あと当然だが、引数によって参照される関数スコープ外の値を変化させるのも副作用だ。
勿論。
というか、まともに議論する気があるのなら、明確に条件を確定させなければならない。
何も言わないのなら、C言語での『標準的な』コーディングを各自が想定することになる。
君が普段からグローバルを濫用しているのは理解したが、それは俺の『標準』ではないし、
君みたいな馬鹿が出てきて無駄に議論が空回りするのが嫌だから、俺は明示的にそれを除外した。
そしてこの条件付けは『標準的』であり、問題ないと俺は考えている。
君がグローバルを含めて副作用を議論したいのならそうすればいい。
俺はその議論には意味が無いと思うから参加はしない。
君の言うように、俺は「参照透過」は以下の2種類に分けて考えるべきだと思っている。
・狭義の参照透過…sin()等
・広義の参照透過…qsort()等やthis
・参照透過でない…その他全部、つまりクロージャやbindやグローバルを用いるもの
通常の文脈で言われる『副作用』はおそらく関数型()言語から来ている。
それは上記「参照透過でない」物を濫用した結果だ。
Cの場合は最初からそれが出来ないから、その議論が発生することはなかっただけ。
それとは別に、意識高い系関数型()の「『狭義の参照透過』だけでプログラミングすべき」、
というのは当たってはいるが、実際の所それは多値を返せないと厳しい。
そして多値返しよりも参照を返してそこからアクセスしろ、というのがメインストリームの言語だろ。
それの方が楽だから。
329:デフォルトの名無しさん
18/12/02 10:48:22.22 3LBO8TR+0.net
少なくともCにおける「副作用」はずっと昔からの規格で定義されている用語だから、
独自定義で話されるのは困る。
URLリンク(kikakurui.com)
> ボラタイルオブジェクトへのアクセス,オブジェクトの変更,ファイルの変更,
> 又はこれらのいずれかの操作を行う関数の呼出しは,すべて副作用(side effect)と呼び,
> 実行環境の状態に変化を生じる。...
330:デフォルトの名無しさん
18/12/02 11:25:56.48 Bx+z5yQP0.net
>>318
FPUのフラグか。なるほどそれは正しい『副』作用だ。
というか、『副』作用というからには当然「作用」(『主』作用)と対比されるべきで、
「printfが副作用」(>>296)というのはHaskellの定義だからな。
スレチというのはごもっとも。
331:デフォルトの名無しさん
18/12/02 12:58:23.54 mXB0v2zh0.net
C言語使う人ってアドレスって言ったほうがわかりやすい場合でもポインタっていうよね
ポインタの意味が多くて混乱する
332:デフォルトの名無しさん
18/12/02 14:18:51.99 uIlAasYL0.net
副作用は、volatile とか、何かの状態を変えること
関数型のmonad とか、
Vuex, Nuxt.js みたいに、1方向のライフサイクルを作って、
状態は、Mutation からしか変えられないとか
どこかのタイミングに、絶対に変化していない、ポイントを作る
WEB+DB 106号に載っている、Flux。
状態管理のデザインパターン、単一方向のデータフロー
333:デフォルトの名無しさん
18/12/02 20:00:19.47 nNQIp+BOM.net
なんだまたvoid君の無知っぷりが露呈したのか
334:デフォルトの名無しさん
18/12/03 06:04:46.06 9nl14toh0.net
C言語はファイルポインターを配列を指すようにして同じように扱うことはできませんよね。
それなので同じように扱うにはファイルポインターと配列のラッパーを自分で作らなければいけませんよね。
335:デフォルトの名無しさん
18/12/03 06:13:41.09 MMlQh9qb0.net
>>323
mmapやfmemopenを調べてみ
336:デフォルトの名無しさん
18/12/03 06:53:46.78 9nl14toh0.net
>>324
調べたらわかりました
ありがとうございます
337:デフォルトの名無しさん
18/12/03 10:00:18.38 KLYQbJ33a.net
fmemopenって何に使うと便利なの?
338:デフォルトの名無しさん
18/12/03 10:10:02.85 98KtjA3l0.net
なんだこれ?引数 void って初めて見たぞ。文法的にありなのかこれ?
339:デフォルトの名無しさん
18/12/03 10:44:00.29 7ySpxLkda.net
>>3
340:26 FILE * 経由の入力や出力をするように書かれているプログラムで使うと便利な場合があると思う。
341:デフォルトの名無しさん
18/12/03 12:19:30.10 dfidJp1A0.net
>>327
晒しage
342:デフォルトの名無しさん
18/12/03 12:27:39.88 7ySpxLkda.net
>>329
それはC言語を知らない初心者が前スレだったかで残した名言
343:デフォルトの名無しさん
18/12/03 13:14:41.09 dfidJp1A0.net
長文の連投で得意がってるあいつな
344:デフォルトの名無しさん
18/12/03 13:29:26.35 UG3pz1BhM.net
プロセスメモリエディタも初めて見たり副作用を知らなかったりする彼ね
345:デフォルトの名無しさん
18/12/03 14:06:18.11 xHLM582p0.net
Ruby には、StringIO と言う、メモリ上だけに存在する仮想ファイルがある。
これは、IO クラスの派生クラスではなく、
文字列クラスに、IO にある関数をDuck Typing したもの(インターフェース)
StringIOインスタンス.read, puts など、ファイル操作と同名の関数を使える
テストの際に、本当のファイルを作らなくても、
メモリ上だけでファイルの振りができるので、楽
346:デフォルトの名無しさん
18/12/03 14:31:36.79 +OGeTNm4M.net
へぇーっ!メモリ上だけに存在する仮想ファイル?Rubyすごぉ~い!
特許取った方がいいんじゃない?
ノーベル賞狙えるかもー!?
347:デフォルトの名無しさん
18/12/03 14:38:57.12 KLYQbJ33a.net
単体テストで使った様な気もしてきた
でもまあストリームは難しいわ。fopenよりopenが好きだよ
348:デフォルトの名無しさん
18/12/03 16:07:39.69 7ySpxLkda.net
ノーベル仮装ファイル賞
349:デフォルトの名無しさん
18/12/03 17:24:12.07 dfidJp1A0.net
C++にもstringstreamがあって
メモリ内でファイルイメージが作れる
しかもcin, cout, ifstream, ofstreamの
メンバ関数・フレンドが全て使える
350:デフォルトの名無しさん
18/12/03 18:30:35.22 +OGeTNm4M.net
なぁんだRubyパクリだったのか。ダッサ。
パクリRuby!
351:デフォルトの名無しさん
18/12/03 19:19:41.79 OHB3X56LM.net
>>329
このスレの初心者乙
352:デフォルトの名無しさん
18/12/03 21:56:42.64 r8O+Z3hZ0.net
>>332
プロセスメモリエディタを知ってる=Cを知ってる、になるのか。
さすがゆとり、だな。
お前らはそんなことばかりするから、お前らの居場所を無くして行ってるんだぜ。
自覚出来てないんだろうけど。
まあ、ゆとりに付ける薬はないって事だな。
三つ子の魂百まで、と同様、ゆとりの魂百まで、なのだろう。
353:デフォルトの名無しさん
18/12/04 00:25:16.59 VVlGsdy50.net
void君怒りのポエム
354:デフォルトの名無しさん
18/12/04 22:17:29.21 YeiHZFGw0.net
彼は自分がゆとりであることに気付かない。超ゆとりである。
355:デフォルトの名無しさん
18/12/05 00:34:11.12 SdYL/PxYZ
URLリンク(altohumano.com)
356:デフォルトの名無しさん
18/12/06 08:22:58.33 cC0kDT7D0.net
勉強始めて半年くらいの初学者だけどenumの便利さに今日気が付いて震えてる
case文がシェルスクリプトとかのと比べてあんなに使いにくいものになってるのはそういうことだったのね……。
357:デフォルトの名無しさん
18/12/06 09:11:25.93 mp97/YFka.net
なんにせよまあswitch/caseはあんまり使わない方がいいですよ。
358:デフォルトの名無しさん
18/12/06 10:46:35.55 y2fvjog80.net
なんで?
359:デフォルトの名無しさん
18/12/06 11:06:46.21 mp97/YFka.net
クソコードに発展しやすいんです。
if文の方がちゃんとしてる。
360:デフォルトの名無しさん
18/12/06 11:09:04.26 qlBG7toFM.net
偏見だしアホとしか思えん
361:デフォルトの名無しさん
18/12/06 12:09:10.95 uFg4otuRx.net
switchは単一の変数(大抵は状態)を比較してることが一目瞭然。
case内が長くなって醜いのは全く別の問題。
362:デフォルトの名無しさん
18/12/06 12:25:09.83 nzH90qpKa.net
まあ今となってはコンパイラが軽く最適
363:化してくれれば全く同じコードになってしまうかも知れず、どちらで書くかは見易さの問題だけかも知れない。 ま、switchはbreakなしで下に抜けるっていうifとの違いがあるからそれ利用してたら別だけどな。
364:デフォルトの名無しさん
18/12/06 14:08:22.67 CZHWXsyR0.net
switch~caseで、char 値の比較の場合、昔のコンパイラでも最適化した時、
条件分岐じゃなくて、テーブルジャンプにしてくれるものがあったなあ。
最近のコンパイラが if~else if~ で記述した時、どう最適化してくれるのかは知らない。
365:デフォルトの名無しさん
18/12/06 14:36:37.49 LNgus+SNa.net
文法に罪はない人が悪いと言って終わるならば、もうなんでもありで良いんです。
C++の方が選択肢が多い分圧倒的に優れてるとも言える。
366:デフォルトの名無しさん
18/12/06 14:39:02.58 LNgus+SNa.net
自分的にアホだと思う書き方はcaseの中身を{}でくくっちゃうやつです。
そんなことするなら関数呼べや。
367:デフォルトの名無しさん
18/12/06 14:59:28.18 dlLKQRwlM.net
case文内に関数にするほどでもない、ちょっとした処理を書きたいとき、その処理内だけで使う変数宣言は{}使ってその中に書いちゃうわ。
368:デフォルトの名無しさん
18/12/06 15:27:35.39 nzH90qpKa.net
そういやswitchのブロックの先頭でも変数宣言できるんだよな。
今はどこでもできるから関係ないとは思うが昔は驚いた。
369:デフォルトの名無しさん
18/12/06 17:17:12.54 cC0kDT7D0.net
地味に都合の良いスコープ範囲だから便利っちゃ便利だよね。
370:デフォルトの名無しさん
18/12/06 17:23:21.26 8Uba5j5za.net
たとえば、caseではクロージャ的なもんが使えて、関数ポインタに代入。
抜けた後でそれを実行、とかできるのなら許容するかも。
371:デフォルトの名無しさん
18/12/06 18:06:57.01 nzH90qpKa.net
それは普通にできるのでは?
372:デフォルトの名無しさん
18/12/06 18:53:53.96 VHVkoIH2M.net
>>355-356
宣言どころか文法的には実行文も書ける
もちろんまともなプログラマはそんなクソコードは書かない
URLリンク(www.jpcert.or.jp)
373:デフォルトの名無しさん
18/12/06 19:39:02.33 rq0vzYZsM.net
初期化されないのかよ。
最初から禁止にしといてくれや…
374:デフォルトの名無しさん
18/12/06 20:21:33.67 2HZFttMva.net
>>358
いや、クロージャ無いじゃん。
あってもいいと思うけど。
375:デフォルトの名無しさん
18/12/06 20:25:38.15 nzH90qpKa.net
のようなもの
376:デフォルトの名無しさん
18/12/06 20:45:48.14 TUEVaed40.net
構文やや変数キャプチャの問題はさておき、関数ポインタは原始的なクロージャっぽく使えるよね。
こんなん書いたらクロージャ原理主義者が反論しそうだけど。
377:デフォルトの名無しさん
18/12/06 20:49:35.87 nzH90qpKa.net
苦労者
378:デフォルトの名無しさん
18/12/06 21:11:52.76 qetyDFhY0.net
GNU拡張だと関数の中で関数定義できたっけ。
379:デフォルトの名無しさん
18/12/06 22:27:01.40 RVfmRZI1d.net
C言語勉強してます。
エラーにOBJが開けませんってでるんだけど、どうしたらいいか教えてください。
コンパイラーはbcpadです
380:デフォルトの名無しさん
18/12/07 02:34:07.16 4kVuFzeP0.net
bcpadって、懐かしい響きだな。
古すぎてなにか特別な理由がない限り使われなくなってるようなものだと思うんだが、なんでそれ使って勉強しようと思った?
381:デフォルトの名無しさん
18/12/07 20:07:09.75 S1fEuKj1d.net
授業で使ったからこれでいいかなーって感じ、これといった理由ないです笑
最近はどんなコンパイラーが主流なんです?
382:デフォルトの名無しさん
18/12/07 20:26:20.52 RTzoABIk0.net
Lattice C
383:デフォルトの名無しさん
18/12/07 20:32:40.15 F84vPdIda.net
MSのVisual Stdioに入ってるVC++か、gcc か、clangだね。
bcpad使った事ないけど、それで使えるbccも地味に生き残ってて進化してた。
(久しぶりに見に行ったらフリーのは最新じゃないけど、地味に進化してた)
エンバカデロがまだインプレス(買収される前)だったり、ボーランド(社名変更前)だったりしてた時代のbccコンパイラ環境設定記事がまんま使えるはず。
384:デフォルトの名無しさん
18/12/07 20:55:30.39 qRyaIDL9a.net
LinuxまたはWindowsのWSLのUbuntu等やCygwinの中でもgccが動く。Macでも中はUNIXなので動く。
385:デフォルトの名無しさん
18/12/07 21:34:48.53 0/x3pMw+0.net
windowsならmsvc
unix、unixクローンならgcc
コレで十分
windowsでいちいちgccでコンパイルする必要なんかない
たまに確認に使う程度
386:デフォルトの名無しさん
18/12/07 21:58:04.56 b95DkfHn0.net
Windowsでネイティブに動かせるGCCもあるし、
無理してVC使わなくても良いと思う
387:デフォルトの名無しさん
18/12/07 22:33:44.42 S1fEuKj1d.net
今調べたらけっこうあるんだな、、
これのここがダメ!とかここが強み!とかあったら教えて欲しい🙏
388:デフォルトの名無しさん
18/12/08 02:14:28.50 5PBkTMHJa.net
Winならmsvc(VC++)かなぁ。。。速いしVS入れれば個人用途に限りMFC(MSのC++ライブラリ)付きで無料で使える。
ただ、最新のC/C++への対応状況は多分一番対応が悪い。
つい先月見た限りでは、bccは地味に対応状況は良いので、Win32APIが付いてて最新のC/C++使いたいってのには一番環境整え易い。(setbccで一発)
Linux/Unix系はclangかな。
gccにはconio.hが無い。(msvc、bcc、clangにはある)
最新のC/C++対応状況じゃclangとgccが2強だけど、Win用にWin32APIは最初から付いてたか分からない。
WinでGUIするのに情報少なかったから、最新のC/C++の勉強にしか使ってない。
389:デフォルトの名無しさん
18/12/08 05:48:44.85 xmV4OmOO0.net
conio ライブラリの ncurses を使った Linux 用の互換ライブラリはあるよ(多分UNIX系OSならLinux以外でも動くような気がするが)。
URLリンク(ja.osdn.net)
ていうか conio と curses ライブラリの両方が存在する状態になってから30年ぐらい経ってるので既に世界中で互換ライブラリは作られてると思う。
UNIX系OSでconioが標準的なものとして取り入れられない理由はもっと昔から curses や termios があって根付いていたからだと思う。
後から出てきた MS-DOS 画面専用ライブラリを組み込む気になる人はあまりいなかったんだろう。
390:デフォルトの名無しさん
18/12/08 08:04:27.69 5PBkTMHJa.net
助かった。
昔読んだ入門書に環境依存と書いてたけど、互換ライブラリあるんだね。
getch関数地味に使うのよ。
調べたらバッファオフしてから普通のgetchar使ってるのか。
そのままLinux流を覚えても良いかな。
どっちにしても良い機会だった。
有り難う。
391:デフォルトの名無しさん
18/12/08 10:14:50.43 +xxwdKok0.net
>>375
> WinでGUIするのに情報少なかったから、最新のC/C++の勉強にしか使ってない。
MFCなんて言ってるから少ないんだよ。それ、20年前の話だし。
MFC -> .NET(Forms) -> .NET(WPF) -> UWPか?もう一つくらい有った気もしたが。
『標準』への対応という意味では遅いけど、
そもそも標準が糞な所はMS独自拡張が行われているからそれなりには困らない。
最新のならC++11にはほぼ対応してたはずだし、「どれがいいですか?」なんて聞く奴には問題にならない。
まあ、お前らは最新の文法を使えることが腕前だと勘違いしているようだから、大問題なのだろうけど。
それも含めて自由にやればいいが。
Borland Builderは一時期Cをリードしたのは�
392:鮪タだが、今だに開発が継続されていたのは俺も今知ったレベル。 Borland信者でなければ普通は地雷扱いで使わない。 というか、win環境ならVS以外を考える意味がない。 無料でGUIのIDEなら第一選択肢がVSで、実際それで十分で終わり、のはず。 無駄なところで苦労したくなければ、とりあえずみんなが使ってる物を使っておけ。
393:デフォルトの名無しさん
18/12/08 10:22:20.61 eB2yg23l0.net
C/C++でFormsやWPFなんて使えないんだからしょうがないじゃん。
394:デフォルトの名無しさん
18/12/08 10:26:03.56 +xxwdKok0.net
普通の人やMSの定義なら「使える」わけだが。
まあどう見ても平行線だからもういいが。
395:デフォルトの名無しさん
18/12/08 10:50:52.94 eB2yg23l0.net
C++/CLIでも持ち出す気か
396:デフォルトの名無しさん
18/12/08 11:51:32.86 PBftE5qw0.net
>>375
bccって揃えやすいか?
ダウンロードするのに個人的なことを根掘り葉掘り聞かれるのが
たとえば俺なんかウゼーと思うが
対応状況が良いって、C++98だぜ?
テンプレート実引数にメンバポインタを渡すとコケるあたり致命的だろ
397:デフォルトの名無しさん
18/12/08 12:13:07.40 +xxwdKok0.net
>>382
いやこっちだろ。一応ClangベースでC++11らしいぜ。
URLリンク(www.embarcadero.com)
Clang標準のGUI環境としてはありなのか?
或いはVSでgccやClangを動作させている奴もいるし、そっちの方がマシなのか?
いずれにしても人柱物件だと思うぜ。勇者に期待だな。
398:デフォルトの名無しさん
18/12/08 12:16:03.45 UjmNmcZda.net
最近はwindowsでもQt使ってくれみたいな話は多いですね
399:デフォルトの名無しさん
18/12/08 13:05:07.00 +xxwdKok0.net
一応訂正(補完)しておく。
× > Clang標準のGUI環境としてはありなのか?
○ Clang標準のGUI環境『のIDE』としてはありなのか?
今更CでGUIアプリを作る意味はないし、Qtも流行らないよ。
やれば分かるが、GUIに関しては今現在はHTML/CSS/JavaScriptが最強だ。
マジでそれ以前のGUIなんて全部ゴミ。
だから全部の環境がHTML/CSS/JavaScriptを追いかけているのではないかな。
WPFもGtkもまだCSS部分が出来てない。Qtも見た目その辺の感じ。
Qtはそもそも今時珍しく仕様を開示してない.。この辺が超絶イケてない。
(例:QMLのビデオを試しにみようとしたが目隠しが出る)
400:デフォルトの名無しさん
18/12/08 15:03:57.91 AnxWbhvF0.net
そうか、じゃあwebglでも使うか。
401:デフォルトの名無しさん
18/12/08 15:27:14.56 AnxWbhvF0.net
あとQtはgpl/lgpl3でもライセンスされてるぞ?ドキュメントも公開されてる。
仕様を開示してないとかどこ見て言ってるんだよ
402:デフォルトの名無しさん
18/12/08 15:59:03.07 +xxwdKok0.net
>>386
WebGLはGUIではなくグラ(フィックス)だし、
それ主体ならMFCでも大して変わらないと思うが。
Canvas自体はむしろ旧インタフェースをHTML側に輸入したものだし。
ただ、GUIやるならマジでHTML/CSSのお手軽さは一度試した方がいい。
今のところ他プラットフォームも同様の場所を目指しているから、無駄にはならんし。
CanvasでGUIやる気なら、背景にjpg貼ったなんちゃって仕様のHTMLの方が楽だし、見た目だけなら同じに出来る。
もちろんCanvasの上や下にHTMLを重ねてそっちでイベントだけ取り扱うことも出来る。
これらは旧来のインタフェース(Forms等)でも出来るが、それ用に設計されてないからいろいろ話が面倒になる。
が、まあ、CでGUIアプリを作ろうとすること自体が若干間違いで、
ビュワー等大きなデータを扱う(=速度がそれなりに必要)でなければ、
60fpsさえ出れば何でもいいし、Cでやる意味はないよ。
>>387
他環境と比べての話だぞ。
以前ドキュメント探してもろくなのが無かったし、
今日チュートリアルビデオを見ようとしても登録しないと目隠しが出るし。
こんなのでQtが流行るわけがないね。考え方が15年以上遅れてる。
それでもQtと心中するのも自由だけど。
403:デフォルトの名無しさん
18/12/08 17:15:39.30 AnxWbhvF0.net
>>388
開示してないって断言してるじゃん。チュートリアルは仕様じゃないよ?
意見変えるならそう言ってよ。
404:デフォルトの名無しさん
18/12/08 17:42:53.93 +xxwdKok0.net
>>389
変えてない。Qtはゴミだよ。
あれで公開していると思うのなら他フレームワーク等見てみろよ。
405:デフォルトの名無しさん
18/12/08 18:40:20.20 hIfZgykd0.net
ほとんどC言語関係ないけどQtは最初,マルチプラットフォームで使えてC++バインディングが公式で提供されているっていう理由で
かなーり期待したんだけどね……。結局今はGTK+に戻ってしまった。
406:デフォルトの名無しさん
18/12/09 09:54:16.91 8tZnBeFG0.net
Cってほんとに実行速度が速いの? 他のコンパイル式の言語に速度で勝る理由が分からん。
インタプリタならともかく。
407:デフォルトの名無しさん
18/12/09 11:07:31.14 dkLieERx0.net
・C言語自体が単純で低水準、変換しやすい
・コンパイラの最適化とそこに投入された人月
というわけでC言語そのものじゃなくてコンパイラで生成された機械語が早い
408:デフォルトの名無しさん
18/12/09 15:36:30.25 e81YHx5p0.net
URLリンク(www.c-tipsref.com)
この辞典の作者はnumeratorを知らないらしいなwww
409:デフォルトの名無しさん
18/12/09 15:56:34.95 LXVWu9Mt0.net
>>314
よくもまあPL/SQLを知らないのに批判できるよな。
PL/SQLの例外処理はOracle DatabaseがSQL、ビルトインパッケージの結果をうまく例外として伝播してくれる。
あなたは単に例外を作り出す方の実装が悪いものを見ているだけ。
410:デフォルトの名無しさん
18/12/09 15:58:53.53 LXVWu9Mt0.net
>>320
アドレスを指しているアドレスがポインタ。
ポインタが指しているアドレスにポインタがあるわけではない。
411:デフォルトの名無しさん
18/12/09 16:03:51.04 LXVWu9Mt0.net
>>392
C言語は低水準言語であるから、うまくやれば速いマシン語になるが、ちょっとしたことでむしろ遅くなるマシン語を生みやすい。
アーキテクチャの知識がない場合は、誤解したアーキテクチャを想定したコードを書いてしまい、実行速度が遅いものができあがる。
412:デフォルトの名無しさん
18/12/09 16:59:21.16 c1W3T6/y0.net
>>396
>>397
ん??
413:デフォルトの名無しさん
18/12/09 18:56:28.62 +IQ+xQud0.net
>>396
>>397
どうやら違う世界線から紛れ込んできたと見える
なんでこういうcrazyなことを言う輩に限って自信満々に断言するんだ
謎
414:デフォルトの名無しさん
18/12/10 15:01:58.63 Yf20pj4f0.net
初心者です。
>>396-397のレスを読んでちょっと混乱しているんですが、
C言語は高水準言語で、
ポインタ変数自体は「アドレスを格納できる4バイト?の変数」っていう認識で合っていますか?
415:デフォルトの名無しさん
18/12/10 15:10:08.76 FyPZmeq6a.net
何バイトかは決まっとらん。
サイズに注意出来るようになったらあなたは中級者。
416:デフォルトの名無しさん
18/12/10 15:44:39.90 Yf20pj4f0.net
あーそうか、
4byte(32bit)だと0x00000000から0xFFFFFFFFまでの?4294967296通りのアドレスが保存できるんですね。
なので処理系?によって変わるってことなんですね。
ありがとうございます。
417:デフォルトの名無しさん
18/12/10 15:58:27.14 4x6+51xya.net
この頃の64bit環境だとアドレスも64bitだと思う。
クロスコンパイルする場合や意図的に32bit用のバイナリを作るようにコンパイルする場合を除く。
418:デフォルトの名無しさん
18/12/10 16:54:58.91 o+toD3xT0.net
ポインタ変数のサイズは32bit幅、
ただしセグメント部16bitのオフセット部16bitで
有効な全範囲はトータルで20bit。
419:デフォルトの名無しさん
18/12/10 16:56:42.73 /sc6zE4j0.net
いつの時代の話だろう
420:デフォルトの名無しさん
18/12/10 17:03:42.11 Ezpzf515M.net
プロテクトモード
何それ美味しいの?
421:デフォルトの名無しさん
18/12/10 17:04:09.37 M7qQG5lGH.net
やべー
あの頃から35年も経ったのかよ
漠然と20数年かなとか思ってたよ
422:デフォルトの名無しさん
18/12/10 17:16:13.17 Yf20pj4f0.net
一体何の話をしているんです!?
教えてくださいおじい・・・紳士さま。
423:デフォルトの名無しさん
18/12/10 17:33:22.27 OF068zeT0.net
16bitCPU時代のアドレスの話
424:デフォルトの名無しさん
18/12/10 19:37:12.53 cqLRK3I00.net
映画タイタニックでも「near far wherever you are」と謳われているほどポインタは面倒
425:
18/12/10 20:20:50.73 NenbAhKQ0.net
>>410
…うまい
でも near far とかもう通じないんじゃないかな?
426:デフォルトの名無しさん
18/12/10 20:29:46.12 4x6+51xya.net
>>408
昔々、8086があったとさ。
めでたしめでたし。
終わり。
427:デフォルトの名無しさん
18/12/10 20:32:35.54 4x6+51xya.net
英語版
A long time ago,in a galaxy
far,far away....
428:デフォルトの名無しさん
18/12/10 23:14:07.07 l83Jt/Qga.net
>>400
OSによる。
4バイトは8ビット(=1バイト)x4なので32ビット。
32ビットOSなら、それで正しい。
じゃあ16ビットOSや64ビットOSの場合は?
429:デフォルトの名無しさん
18/12/10 23:16:39.78 l83Jt/Qga.net
>>404
セグメントは16ビット迄だよね~。
430:デフォルトの名無しさん
18/12/10 23:22:09.98 ADpwiSWg0.net
>>415
つPAE
431:デフォルトの名無しさん
18/12/10 23:38:01.37 l83Jt/Qga.net
いあ、知ってるよ?
でも今でも意味あるの?
Athlon64にPCの64ビット化を先越された時代の、その苦し紛れの拡張。
64ビット標準だけで今後PCに乗り切れる時代は来ないであろうメモリ容量をサポートしてるのに。
(理論上の限界来る前に、製造技術上の限界が来る)
Winはあえて制限してるが、時代とともに緩めるだけっしょ。
432:デフォルトの名無しさん
18/12/10 23:53:27.02 bJUChMIiM.net
このスレッドは妄想コンピュータで話すやつが張り付いているね。昔は単純な話だったけどさ。
433:デフォルトの名無しさん
18/12/11 00:26:54.92 qpk98o5j0.net
8ビットがなつかしいね?
434:デフォルトの名無しさん
18/12/11 07:34:54.16 zUaOIyWC0.net
>>417
> 64ビット標準だけで今後PCに乗り切れる時代は来ないであろうメモリ容量をサポートしてるのに。
32ビットになった時にもそんな話をしてたな w
435:デフォルトの名無しさん
18/12/11 09:17:41.73 7sleUDEz0.net
プロセスルールの限界から実用的で物理的なメモリの上限はあるんだろうけど、何がどう進化するか分からないからねぇ。
単純に超多層化プロセスルールが一般化するかもしれないし、もしかするとクラウドRAMサービスとCPUアーキテクチャが融合してその限界突破なんて時代が来るかもしれん。
人間の創造力は無限と信じよう。
436:デフォルトの名無しさん
18/12/11 10:15:17.85 qpk98o5j0.net
4GBと言う上限は意外に早くたどり着いた
4K動画をオンメモリーで編集したいとなると
途端にぶつかる壁だな
次は誰がこの壁にたどり着くかな?
437:デフォルトの名無しさん
18/12/11 12:57:57.93 ZRU2RXnk0.net
Visual Studio 2017のC/C++コンパイラってどこのフォルダに置いてあるんですか
(もしくはファイル名、あるいは、商標名?)
調べても「VSに付属するVisual C++にC/C++コンパイラが同梱されている」程度の
情報しか出てこない・・・
そのコンパイラは何て名前でどこに置いてあるんだ・・・
438:さまよえる蟻人間
18/12/11 13:14:43.83 CGbAPZXN0.net
>>423
スタートメニューのVSコマンドプロンプトを開いてみい。
439:デフォルトの名無しさん
18/12/11 13:42:28.53 ZRU2RXnk0.net
はい
**********************************************************************
** Visual Studio 2017 Developer Command Prompt v15.9.3
** Copyright (c) 2017 Microsoft Corporation
**********************************************************************
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community
440:デフォルトの名無しさん
18/12/11 13:48:36.76 ZRU2RXnk0.net
\Microsoft Visual Studio\2017\Community\VC の中を compiler で検索した結果
compiler.cpp
ん・・・?これ?
実行ファイルじゃなくてソースファイル・・・?
分からない、もうダメだ(絶望)
441:デフォルトの名無しさん
18/12/11 13:51:50.68 rotYdjfa0.net
その昔は cl.exe に link.exe のフロントエンドで make は別途だったが今はどうなんだろう
442:さまよえる蟻人間
18/12/11 13:55:01.02 1cpVaJ7Sd.net
cl.exeとかcl64.exeなどの名であると思う。
443:デフォルトの名無しさん
18/12/11 14:00:29.46 ZRU2RXnk0.net
ありました!(なぜか4つも)
というかcl.exeってコンパイラだったんですね
コンパイラその他を呼ぶための媒介物かと思ってますた
感謝
444:さまよえる蟻人間
18/12/11 14:18:43.44 CGbAPZXN0.net
最近はx64とかx86とかARMとかARM64とかいろんな環境があるから、コンパイラは複数必要になっている。
445:デフォルトの名無しさん
18/12/11 14:51:38.89 ZRU2RXnk0.net
>とかいろんな環境があるから、コンパイラは複数必要
なるほど 勉強になりました
446:デフォルトの名無しさん
18/12/11 20:20:15.88 3ovMnnL0M.net
CプログラマでいまのCPUを理解しているやつなんてごく僅か。わざわざC言語を作る必要がない。もっと高水準言語で作って、VMと優秀なコンパイラに任せた方がいい。
447:デフォルトの名無しさん
18/12/11 20:46:12.25 g9W94UvY0.net
初心者です。
>>432ののレスを読んでちょっと混乱しているんですが、
>>いまのCPUを理解
というのがまず何を指しているのか分かりません。
パーソナルコンピュータに内蔵されているCPUでしょうか、炊飯器に内蔵されているCPUでしょうか。
>>C言語を作る必要が無い
作らなくてもすでに存在していると思うのですが、自作が必要なものなのでしょうか。
>>もっと高水準言語
C言語自体が高水準言語だと思うのですが、これ以上の高水準とはどういう基準なんでしょうか。
自然言語をコンパイルするとかでしょうか。
>>VMと優秀なコンパイラ
VMというのはVirtualMachineの略でしょうか。VM上で動作するC言語というのがあるのですか?
VMを動かすほどのリソースが無いようなマシン上では何を動かすのでしょうか。
優秀なコンパイラ、ということは Cのコンパイラは優秀ではないのでしょうか。
おじい・・・紳士のみなさま、ご教授お願いいたします。
448:デフォルトの名無しさん
18/12/11 21:55:08.95 ihMfYHRY0.net
Windows でも、ファイル操作なら、Ruby !
画面なしのツールなら、たいていのものは作れる
ポインタで時間を浪費することもない
449:デフォルトの名無しさん
18/12/11 23:16:54.03 j8P28cRB0.net
>>433
嘘を嘘と(ry
450:さまよえる蟻人間
18/12/11 23:27:54.09 CGbAPZXN0.net
相手にするのが時間の無駄。悩む時間で基本情報とITパスポートの勉強するのがはるかにまし。
451:さまよえる蟻人間
18/12/11 23:43:31.10 CGbAPZXN0.net
おじい、とか言って馬鹿にしちゃダメだよ。ワード、エクセルのエキスパートで、原子炉のタービンを設計するような「ものすごい人」も見てるんだからね。
452:さまよえる蟻人間
18/12/11 23:50:36.12 CGbAPZXN0.net
あと補足だけど、30歳定年説は、人件費を削るための嘘だからね。
人不足の今時にこんなことを言ってるアホの取引先は排除すべし。
453:さまよえる蟻人間
18/12/11 23:59:29.31 CGbAPZXN0.net
今時ハードディスク使ってモニターと照明費を削るようなケ�
454:`臭い企業とは取り引きしません!
455:デフォルトの名無しさん
18/12/12 00:19:15.01 ysgUNYaF0.net
Code For Japan というイベント内でも、
PDF, Excel などの表示情報が入ったデータを、
エンジニア(住職)が供養する企画をやっているw
456:デフォルトの名無しさん
18/12/12 06:43:02.35 MN/7vBAt0.net
>基本情報とITパスポートの勉強
何のことかと思って調べてみれば情報処理技術者試験のことか
そう言えば昔に第一種と上級シスアドに合格してたこと思い出したわ
457:デフォルトの名無しさん
18/12/12 11:11:59.11 Fd1X4TAb0.net
マシン性能の限界を突破する為に、関数型プログラミングがある。
458:デフォルトの名無しさん
18/12/12 11:23:33.13 MN/7vBAt0.net
関数型は抽象表現能力は高いが実行効率を追求する様な用途向きではないぞ
生産効率も圏論などの数学的思考に慣れていないと下手すればOOPよりも悪化する可能性が高い
459:デフォルトの名無しさん
18/12/12 12:19:40.64 XAdiQzbba.net
( ´_ゝ`)フーン
460:デフォルトの名無しさん
18/12/12 12:31:12.08 4PEjGm8GM.net
それ以前にマシン性能を言語で突破できたらノーベル賞ものかと w
461:デフォルトの名無しさん
18/12/12 12:38:27.52 b75HkCZx0.net
CPUは関数型言語を直接実行するようにできてないから遅いでしょ。
462:デフォルトの名無しさん
18/12/12 12:42:36.11 x/hCtcVY0.net
フォースとともにあれ
463:デフォルトの名無しさん
18/12/12 12:55:07.41 AGB/ZeXIx.net
CPUの限界を超えれる関数型言語上で関数型言語を作れば元の関数型言語の限界を突破できる。
その作った関数型言語上でまたry
んなわけねーよw
464:デフォルトの名無しさん
18/12/12 13:11:22.57 XAdiQzbba.net
SFのスレはここですか?
465:デフォルトの名無しさん
18/12/12 13:12:45.03 5HIThNOt0.net
【平和を実現するために】 武器調達の中止、格差拡大の抑止、労働移民の禁止、国政からのバカウヨ排除
スレリンク(liveplus板)
466:デフォルトの名無しさん
18/12/12 13:15:11.92 SHf/dQVX0.net
関数型プログラミングはλ計算の時点で全く理想的だから
有限のアドレッシングで動いてる今のCPUには全くそぐわない
だから関数型と今のCPUアーキテクチャは根柢から反りが合わないんじゃねえかと
すると関数型の書法を現状の機械語に書き直すだけでロスが出てくる
理想的なモンを劣化させてるに等しいが技術上はそうするしかない
そもそも関数型を直接実行できるようなCPUを人類が作れるかどうか
無限の再帰と無限のストリームが必要になっている時点で怪しい
467:デフォルトの名無しさん
18/12/12 13:25:42.01 LIx8RHBsa.net
昔どっかがLisp用にスタックコンピュータだか何だか作ってなかったっけ。
それはともかく、関数型言語でも結局どういうマシン語に落とすかだから、最適化技術で高速化は出来るはずなんだがな。
Cは低水準な操作も出来るから速いコード書けるとはいえ、素直なコードは最適化無しだと他の言語と変わらないし、
速度で言えば別に低水準な操作出来る訳でも無いFortranはC並みに速いわけで。
最適化への技術や時間の掛け方が違うってだけ。
468:デフォルトの名無しさん
18/12/12 13:28:27.57 SHf/dQVX0.net
シンボリクスだ
469:さまよえる蟻人間
18/12/12 14:37:12.07 duFENGTGd.net
理論的限界を超えたら、その理論のモデルが事実に反する訳だから、理論の反例になってしまう。
470:デフォルトの名無しさん
18/12/12 15:28:39.64 02Irmhu2M.net
ループに展開されることを期待して末尾再起化にハゲむってギャグだよな。
最初からループ書けよw
471:デフォルトの名無しさん
18/12/12 15:38:07.68 LIx8RHBsa.net
ループだと関数渡せないから。
あとはリストを受け取ってリスト返す関数とか、IOモナドとかは
再帰関数がそのままループになる。
(リストもモナドなので、モナドを返す再帰関数がループになると言える)
472:デフォルトの名無しさん
18/12/13 14:18:51.88 oii7E7F70.net
初心者です。
inline指定子について教えて頂きたいのですが、
関数ポインタからinline関数を呼び出す場合、どのように展開されるのでしょうか。
また、関数ポインタを格納する配列から呼び出すような場合はどのように展開されるのでしょうか。
473:デフォルトの名無しさん
18/12/13 14:32:27.38 1m7XwvCgM.net
inline関数の展開は環境依存
呼び出し方が如何なる方法であれ関数の構造によってはインライン展開される保証はない
ループ構造を含んでいると殆ど期待できない
474:デフォルトの名無しさん
18/12/13 14:56:19.82 oii7E7F70.net
なるほど、ありがとうございます。
まさに、
for (i = 0; i < length; i++) {
func_ptrs[i](hoge);
}
みたいなことを試そうとしているところでした。
こういう場合は展開は期待できないということですね。
今回も勉強になりました。
475:デフォルトの名無しさん
18/12/13 17:31:05.02 jSkPpV300.net
>>422
次は16EBの壁だな
476:デフォルトの名無しさん
18/12/13 18:29:51.36 Bj9kGxVc0.net
gccもclangも最適化を-O3にしても
if(a=='a'||a=='b'||a=='c'||a=='d'||a=='e'||a=='f')
をif('a'<=a&&a<='f')に置き換えてくれないのな
477:デフォルトの名無しさん
18/12/13 18:40:11.12 Fv0+Omexa.net
Tではないと
478:デフォルトの名無しさん
18/12/13 18:48:07.23 Fv0+Omexa.net
>>461
え?gccで -O -S で置き換えられたように見えるアセンブリ言語出力したぞ。(97引いて5以下かどうか見ているやうなやつ)。
-Oなしだと一つ一つ比較していて明らかに違う。
479:デフォルトの名無しさん
18/12/13 18:48:36.88 Gz5l93Ou0.net
GCCの動作環境は特定OSだけではないと思う
480:デフォルトの名無しさん
18/12/13 18:51:31.61 Fv0+Omexa.net
CPUによっては一つ一つ比較するように書いた方が速いなんてこともあるのかも知れないが、普通はそうならないように思う。
481:デフォルトの名無しさん
18/12/13 19:07:27.96 oii7E7F70.net
ソース全体で見たときに(a < 'a') や (a > 'f')の可能性もあるから最適化されないということでしょうか?
482:デフォルトの名無しさん
18/12/13 19:08:30.18 y280e6J90.net
>>461
>>465
a=='a'のときにべたの方が速いからだろ。
a-fが均等な確率だ、というのをコンパイラに対して教えてないし、教える方法もない。
だからコンパイラが勝手にそこを改変するようでは困るだろ。
(大半がa=='a'と分かっていて最速コードが欲しいときに記述出来なくなる)
C言語はそういう言語なんだよ。自動的に勝手にやってくれる言語ではない。
細部まで自分で指定できるからこそ極限までチューニング出来る。
最速コードが欲しければ、a-fの確率まで考えて、自分で指定しろ、でしかない。
483:デフォルトの名無しさん
18/12/13 19:28:54.20 VenLBJVu0.net
ワシのとこでも -O で「即値97を引いて即値5と比較…」が出たわ。
-O なしだと真っ正直に即値との比較が6回。
>>461 に書かれた通りの ('a'<=a&&a<='f') にならないと言っても、
'a'以上か? 'f'以下か? の判定2回よりもっと効率的になってるでしょ。
もちろん gcc のバージョンによる違いかも知れんが。
484:
18/12/13 19:56:57.11 mMIcaeGH0.net
>>458
ときどき夢にみます、inline 指定がどんな場合にも百発百中 inline になるコンパイラがあればどんなに嬉しいか…
485:デフォルトの名無しさん
18/12/13 19:58:30.01 Fv0+Omexa.net
>>467
あー。なるほど。
かといって言語の規格として最適化についてまで決まってたっけ?
その辺は決まってなくてコンパイラしだいのような気がするが。
486:デフォルトの名無しさん
2018/12/1
487:3(木) 20:01:00.67 ID:Fv0+Omexa.net
488:デフォルトの名無しさん
18/12/13 20:23:30.62 y280e6J90.net
>>470
規格云々以前に、適用ヶ所と文化の問題。
C言語がガチで使われている領域はそういうところだから、「書いたとおりのコードを吐け」でないと困るし使えない。
だから適当に改変するコンパイラは嫌われる。
対してC++は「出来るだけコンパイラにやらせる」思想だし、そもそもCほど掘り下げる使い方はされないから、
「可能な限り自動的に最適化しろ」な気はするが。
489:デフォルトの名無しさん
18/12/13 21:03:29.67 Bj9kGxVc0.net
C言語のアセンブリがすぐ確認できるサイトで調べてみたんだけど、
違うみたいだね。
490:
18/12/13 21:27:21.48 mMIcaeGH0.net
>>471
なるほど…
そういうときは、call されたときは inline に展開するけれども、関数のポインタとして渡されたときに動かすためだけに(実際にポインタから呼ばれるかどうかは考えずに)inline の関数を別にバイナリーに展開しておくっていうのはどうですか?
491:デフォルトの名無しさん
18/12/13 21:28:48.05 k+IaCMCPM.net
>>472
この人何言ってるんだろう…
492:デフォルトの名無しさん
18/12/13 21:30:50.24 Pd0B4/Sw0.net
>>472
ん??
493:デフォルトの名無しさん
18/12/13 21:53:47.05 y280e6J90.net
>>475
>>476
お前がな
494:デフォルトの名無しさん
18/12/13 22:39:39.76 fVy8DFiFa.net
>>474
関数内でstaticの変数が宣言されるケースも忘れずに。
495:デフォルトの名無しさん
18/12/13 23:12:49.49 k+IaCMCPM.net
ガイジかな? w ⇒ ID:y280e6J90
496:デフォルトの名無しさん
18/12/13 23:49:06.95 y280e6J90.net
>>479
まずお前がガイジじゃないことを示せよ
ゆとりなら死ね
497:デフォルトの名無しさん
18/12/13 23:54:03.07 Gz5l93Ou0.net
踏まないように気をつけて歩こう
498:デフォルトの名無しさん
18/12/14 05:40:44.32 yDEitqc60.net
うわっ、ガイジと言うよりマジキチやん ⇒ ID:y280e6J90
>>481が意味深になってて笑うわ
499:デフォルトの名無しさん
18/12/14 06:20:30.12 lAbDnTGa0.net
>>468
どうやったらそんなコードされるの?
なにをやっても全部比較しかでないのだが
500:デフォルトの名無しさん
18/12/14 06:26:32.39 lAbDnTGa0.net
いまやったら引き算と比較一回になった。
別の関数の中に比較を入れないと駄目みたいだった。
一個ずつ比較させたいときはvolatileを使えばいいんだな。
501:デフォルトの名無しさん
18/12/14 06:30:05.99 lAbDnTGa0.net
最適化をいれるとaが定数だとaが消されるからaを別の関数の引数にすることで
消されないようにできる。
volatileで消さないようにするとなぜか比較が最適されない。
502:デフォルトの名無しさん
18/12/14 06:46:52.77 gWmPrUHE0.net
>>484-485
それはvolatileの間違った使い方だから止めとけ。
最近そういう投稿も多いが。
503:デフォルトの名無しさん
18/12/14 06:52:31.89 TYVfP/dyM.net
最適化は処理の最中に使う変数が外部(別スレッドや割り込みハンドラ)から変更されないということを前提としてるから、volatileつけるとaの比較途中でaそのものが変更されるかもしれないので逐一比較になる。
まぁスタック上のローカル変数aが外部から変更されるってのは通常は単なるスタック破壊のバグだけどね。
504:デフォルトの名無しさん
18/12/14 06:53:45.77 8u55nHdC0.net
>>472
おまえ4.3BSDのccとかまだ使ってるのか?
505:464
18/12/14 07:50:49.15 FIv/Q2MJ0.net
>>483-484
素直なコードで出るはずだけどなぁ。
サンプル abcdef.c
第1引数の最初の文字が [a-f] なら yes, それ以外なら no と表示
(引数が与えられなかった場合は no を表示)
$ cat abcdef.c
#include <stdio.h>
int main(int argc, char
506:*argv[]) { int a; a = (argc>1) ? argv[1][0] : 'z'; if (a=='a'||a=='b'||a=='c'||a=='d'||a=='e'||a=='f') printf("yes\n"); else printf("no\n"); return 0; } $ gcc -S abcdef.c 最適化なし 比較6回 $ gcc -O -S abcdef.c 最適化 97引いて5と比較
507:デフォルトの名無しさん
18/12/14 09:57:08.83 v3sklYn80.net
volatileは磁気コアメモリ時代の命令じゃねえのか
508:デフォルトの名無しさん
18/12/14 10:14:56.92 lAbDnTGa0.net
>>489
mainで未定の値を作るのがむずかしいんだよ
aを初期化しなければ未定の値になると普通おもうんだけど
何故か何かの値に決められて最適化でaが消えちゃうのよね
509:デフォルトの名無しさん
18/12/14 10:15:15.85 QZB89f550.net
現在でも組み込み開発でSFRを弄るにはvolatile宣言は必須
510:デフォルトの名無しさん
18/12/14 10:28:42.01 lAbDnTGa0.net
結論を言うとvolatile で最適化を調べるために最適化を抑制したのが間違いの原因だっと
ということだな。
511:デフォルトの名無しさん
18/12/14 12:14:57.88 E1rpoA/W0.net
volatileは変数がI/Oポートにマッピングされてることを想定した仕様
コンパイラによる省略とかを許さず書いてある通りにアクセスする
512:デフォルトの名無しさん
18/12/14 12:47:24.45 TZB/LQMkx.net
>>494
I/Oだけじゃないよ。
別スレッドなど異なる実行コンテキスト間で共有する領域へのアクセスはvolatileをつけないといけない。
SFRへのアクセスもソフトとハードという実行コンテキストが異なる。
513:デフォルトの名無しさん
18/12/14 14:14:04.61 7OLXAkOEa.net
静的変数は全部つけないといかんのだろうね。
利用の趣旨としては。
514:デフォルトの名無しさん
18/12/14 15:46:34.42 FWw1nr6R0.net
ID:y280e6J90はvoid君だろ
515:デフォルトの名無しさん
18/12/14 16:07:06.94 cCP3RgWTa.net
volatile の使い所
1. マルチスレッドで他スレッドと共有される変数(ただし、別途ロックも掛けた方が良い)。
2. シグナルハンドラとその他の処理で共有する変数。
3. longjmp() 使う時。
516:デフォルトの名無しさん
18/12/14 16:08:45.11 cCP3RgWTa.net
これ書き忘れてた。
4. 指している先の内容が本当に揮発性の場合(I/Oポート等)
517:デフォルトの名無しさん
18/12/14 16:22:16.94 lsnrrwE80.net
記述された手続き以外の要素によって変数値が変わるなら
518:デフォルトの名無しさん
18/12/14 19:01:54.99 RfUJ40dd0.net
>>498
volatile変数をマルチスレッドに使うとかいう誤った知識を流布しないでくれ
volatileに指定してもマルチスレッド共有変数に求められる
* メモリフェンス
* 演算の原子性
は確保できない
URLリンク(stackoverflow.com)
519:デフォルトの名無しさん
18/12/14 19:20:00.03 td3PjTJAa.net
原子性って全然直交した概念ちゃうか。
確保できるとかできないとかいう話になるのがおかしい。
520:デフォルトの名無しさん
18/12/14 19:41:07.95 gWmPrUHE0.net
>>498-499
×××○
知らない人が見たらマジ議論と勘違いするのも無理はないが、
2chでのlongjmpなんてネタだから無視でいい。
>>501
全くだ。
というかマジな話、何をどこに使うべきかイマイチ分かってないのなら、
とりあえずいわゆる「正しいプログラミング」を目指した方がいい。
ここでの
521:与太話は、ネタをネタと(ry、でしかない。
522:デフォルトの名無しさん
18/12/14 20:47:21.99 8u55nHdC0.net
>>498
マルチスレッドは断じて関係ない
アフォwヴァカwww
523:
18/12/14 21:07:51.74 +oZBuxlP0.net
volatile なんか忘れて素直に pthread とか C++11 とか使っていればいいと思うのです…
524:497
18/12/14 21:15:41.90 6hfmhPbO0.net
>>502
そのはずなのに使えるなんて言う妄言痴言が飛び交っていたんだから重症だよ
>>503
シグナルハンドラに関してはvolatileが必要じゃない?もちろんその変数に対するatomicityも要求されるけど
525:デフォルトの名無しさん
18/12/14 22:13:48.43 gWmPrUHE0.net
>>506
知らんよ、俺はLinuxのsignalなんて使って無いし。
そのページには必要だと書いてあるし、そうなんだろうさ。
が、そもそも、俺に言わせれば
・volataileで実装出来る=ポーリングループ&せいぜいハンドシェーク=糞
・プロセス間通信する意味がない
スレッド間通信でsleep/wakeupで何も問題ないし、その方が自然だ。
この場合に自前でvolatileなんて書くことはない。
ハードウェアを直接叩かないのにvolatileとか、設計を見直した方がいいと思うぜ。
526:デフォルトの名無しさん
18/12/15 00:19:10.79 MJLVMCBK0.net
>>433
Cのコンパイラは環境依存になるため、コンパイラの出来、不出来がある。
527:デフォルトの名無しさん
18/12/15 01:44:33.10 USiGJg2x0.net
必要条件と十分条件の違いが分かってないやつがいるな。
528:デフォルトの名無しさん
18/12/15 09:51:27.56 hAY8T09E0.net
>>507
フェンスがないのにハンドシェークとは、これいかに
529:デフォルトの名無しさん
18/12/15 11:50:06.13 nIs3KSLY0.net
>>510
> 標準シグナルの場合、そのシグナルがブロックされている間に 同じシグナルの複数のインスタンスが配送されても、 1 つだけがキューに入れられる。
> URLリンク(linuxjm.osdn.jp)
しかし実際ハンドシェークだと思うぜこれは。
意識高い系()ゆとり()がCをやるとfenceという『CPU命令』が必要だと思っちゃうのか?
まあ無理も無いとも思えるが。
530:デフォルトの名無しさん
18/12/15 11:53:03.04 qrRqm5Rq0.net
それはC言語の話なのか、OSの話なのか、CPUの話なのか
531:デフォルトの名無しさん
18/12/15 12:22:47.52 nIs3KSLY0.net
フェンスが必要になったのはコンパイラ側の都合だから、C言語の話だね。
これが理解出来ないのはお前がゆとりの馬鹿だからだ。
マジな話、馬鹿の癖に煽るゆとりは死んで欲しいね。
お互いに何も得る物がない。
532:デフォルトの名無しさん
18/12/15 16:08:16.17 uiukVmhyM.net
>>513
533:デフォルトの名無しさん
18/12/15 16:24:43.93 tkQQweukM.net
フェンスが必要なのはCPUとコンパイラ双方のためだ。やっぱvoid君は馬鹿だね。
534:デフォルトの名無しさん
18/12/15 17:21:35.13 hAY8T09E0.net
>>511
ほうほう、fenceはCPU命令ではないんだな
それでそれで? volatileとどういう関係があるんだw
535:デフォルトの名無しさん
18/12/15 18:37:35.51 nIs3KSLY0.net
>>514-516
ゆとりは死ななきゃ直らないと再認識した。
ゆとりが馬鹿であり続ける権利を尊重し、教えてやらないことにする。
つっても、ググればいくらでも出てくるし、ゆとり以外には実害はないはず。
マジな話、上達したい奴は、ググっても疑問が解消しないときのみ、掲示板等に頼るようにした方がいい。
自力で勝手に進んでいけるか、いちいち構ってちゃん状態になるかでは、上達速度に雲泥の差が出る。
こんなところで下らない煽り合いに興じてるから、ゆとりはゆとりのままなのだと思うし。
StackOverflow(英語版)はかなり�
536:Iススメだ。迷ったらそこを頼れ。
537:デフォルトの名無しさん
18/12/15 19:04:30.55 /O2tQ50qM.net
void君は謎の捨て台詞好きだよね。かっこ悪いよ。
538:デフォルトの名無しさん
18/12/15 19:15:51.64 qrRqm5Rq0.net
ここにはお前に用がある人はいないそうだ
539:デフォルトの名無しさん
18/12/15 19:17:41.02 CVS0UY4MM.net
霊界は存在するよね。ググればいくらでも出てくるしww
540:デフォルトの名無しさん
18/12/15 19:40:59.06 nIs3KSLY0.net
以下、C言語について詳しいつもりの、格好いいつもりの粘着君が教えてくれます。ご安心を。
(レベルはあのコードを糞コードと認識出来ないようなので推して知るべし)
マジな話、volatileをスレッド同期に使え、なんてのは世界中の誰も言ってないだろ。
勿論longjmpもgotoもその類だ。
ここはそれを分かってるロートル連中が与太話をするところであって、
マジの初心者が来るのは危険だと思うがな。ネタをネタと(ry
初心者なら、まずは正しいプログラミングを目指すべきだと思うぜ。
本来はリアルで先輩/上司/先生に教えを請えるのが一番いいが、
駄目ならStackOverflow(英語版)を俺はオススメするが。
最近は知恵遅れも知恵袋と化してきていて、例えば以下(PHPのスレより、ただし削除済み)
URLリンク(detail.chiebukuro.yahoo.co.jp)
そこで焼け出された知恵遅れゆとりがこちらに押し寄せてきているのだと推測しているが、
お互いにとって不幸なことになってる。
ただし知恵袋が機能するなら、本来はIDがある分向こうの方がましだから、向こうを使った方がいいと思うが。
知恵遅れゆとりがスクラム組んで押し寄せることに対して、2chは防御手段がない。
実際、こいつらが役に立つことを一回も言ったことがないのも事実でさ。
こいつらは死ぬまでイナゴし続けるんだろうな、って思う。