X



C言語なら俺に聞け 141 [無断転載禁止]©2ch.net
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
垢版 |
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/
0002デフォルトの名無しさん
垢版 |
2017/07/17(月) 21:15:16.42ID:bGVplWmj
< `∀´>ニダー
0004デフォルトの名無しさん
垢版 |
2017/07/17(月) 21:56:04.46ID:PKmAGp8M
>>1


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

できないわけがないってw gotoで飛んでgotoで戻りゃいいんだから
非同期なら別関数にする必要があるが
0006デフォルトの名無しさん
垢版 |
2017/07/17(月) 21:58:43.30ID:n17oqQVv
プログラムカウンタをスタックに積まないでコール元に戻れるわけ無いだろ
プログラムの動作原理を知らなさ過ぎる
0008デフォルトの名無しさん
垢版 |
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しか使って無いからこれが糞だと認識できないんだよ多分。
0009デフォルトの名無しさん
垢版 |
2017/07/17(月) 22:16:47.67ID:LYlgQVUQ
前スレ>>995
990にレスが付いているのはヘッダについてか?
それなら俺はGCCに「自動ヘッダ生成器」を組み込んでくれよと思う。
というかCはヘッダで妙なトリック使いすぎてて自動生成できる状況ではないのだとは思うが、
それなら足りない関数だけでも自動で追加してくれよ、と思う。

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

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

>>7
ないでしょ
ローカル変数でないとできない処理を聞いてるのと同じ
0014デフォルトの名無しさん
垢版 |
2017/07/17(月) 22:53:34.33ID:PKmAGp8M
>>13
だからできるでしょ
俺は同じようには書けないが同じ処理はできると言ってるの
新たにスタック積む話なんか初めからしてないぞw
0015デフォルトの名無しさん
垢版 |
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知らんだけ
0018デフォルトの名無しさん
垢版 |
2017/07/17(月) 23:02:18.10ID:vodzC7WI
           / ̄\
           |    |
           \_/
             | __
            ┴´   ``ヽ   
          /::::::::::|::::::    `ヽ       gotoで戻りゃいいんだから!!
         /:::\::::::::<● >   `ヽ  
    ((   / <●>::::::::::⌒      )   
        |  ⌒(_人__)       ノ | |  
        ヽ    )vvノ:      / ノノ
          ヽ (__ン       人
         人           \
        /
0019デフォルトの名無しさん
垢版 |
2017/07/17(月) 23:07:04.75ID:LYlgQVUQ
>>15
だからそれはできるうちに入らないんだよ。
どうにもPython信者には通じないようだが。
0020デフォルトの名無しさん
垢版 |
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");
}
0022デフォルトの名無しさん
垢版 |
2017/07/17(月) 23:21:10.09ID:4pA3RK/K
>>15で出来るうちに入らないとかいちゃもんつけたいだけやん
それCで関数の外にprintf書いてコンパイル通らなくて発狂してるようなもんだから
0023デフォルトの名無しさん
垢版 |
2017/07/17(月) 23:25:27.16ID:4pA3RK/K
いや、こんなこと書いたら揚げ足とってアホ認定されそうだから重ねておくけど、上のレスではコードの見た目の話に話を絞ってある
その範囲では、関数外に書いても通るだけ有難く思うべきである
0024デフォルトの名無しさん
垢版 |
2017/07/17(月) 23:27:45.16ID:LYlgQVUQ
>>20
まあ俺はそっちの話にあんまり突っ込む気はないんだけどさ、、、

アイデアは理解した。
が、そのラベルの使い方が保障されてるかというと、かなり微妙だと思う。
俺は仕様には詳しく無いからなんともいえないが。
とはいえ、実際はそれで動くケースが大半だとも思う。
0025デフォルトの名無しさん
垢版 |
2017/07/17(月) 23:29:34.59ID:81nqESXy
>>19
さっきからプロトタイプ宣言を書く書かないの話して、中身で使うだけの関数を下に書ければ見やすい的なことを言ってなかった?
その観点から言って、>>15にどんな問題があるの?
0027デフォルトの名無しさん
垢版 |
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は馬鹿用言語だということを自覚しろアホ。
0028デフォルトの名無しさん
垢版 |
2017/07/17(月) 23:55:03.58ID:PKmAGp8M
なんか問題あったかい?
ラベルのポインタはGCCとclangは対応してる
標準じゃなく拡張だけどなw
0031デフォルトの名無しさん
垢版 |
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で出来ない例持ち出して来てら
これアンチしたいだけじゃん
0032デフォルトの名無しさん
垢版 |
2017/07/18(火) 00:08:33.09ID:tZS7qvye
>>28
いや、ラベルって「そこから下」に対しては保証されてるが、
「そこから上」って保証されてるか?
まあこの言い方では通じないと思うから具体的に書くと、

(A)
label:
(B)

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

ただし既に言っているが、俺は仕様には詳しく無いから、なんともいえないのだが。
0034デフォルトの名無しさん
垢版 |
2017/07/18(火) 00:21:58.12ID:tZS7qvye
>>29
子関数を下に書いた方が分かりやすいときに、それが出来ないのが問題。

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

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

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

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

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

オレオレパーサも組めない範囲でもないんだろうけど、
やっぱ誰かががっつりデバッグ済みにしてくれてるのを使いたいよ。
0042デフォルトの名無しさん
垢版 |
2017/07/18(火) 01:00:22.85ID:NDJOFNKG
>41
その用途に最も近いのは例外処理のtry-cattch構文だろうな
C言語では使えないけど
0045デフォルトの名無しさん
垢版 |
2017/07/18(火) 01:03:12.76ID:r4nh1nKp

そのCスタイル22k行のコードはどういう書き方をしてたから読みやすかったんだ?
0047デフォルトの名無しさん
垢版 |
2017/07/18(火) 01:09:17.66ID:zmpO/wkd
>>46
あー、遅かった気がするのはC++の話だわ
まあ例外処理が速い言語なんてないと思うけどさ
0048デフォルトの名無しさん
垢版 |
2017/07/18(火) 01:10:26.49ID:sjXtAWuw
setjmp, longjmp はペア
0049デフォルトの名無しさん
垢版 |
2017/07/18(火) 01:11:57.66ID:tZS7qvye
>>42
いやtry-catchはだいぶ違うぞ。

てかあれはC的エラー処理とは逆を行っている。
ただ最近は非同期が流行りだしてtry-catchでは対応できなくて
値埋め込み≒C的にはなってきてる。
個人的にはtry-catchは要らないなあ。

マルチレベルブレークはまあ、フラグ使って書けはするが、
見た目汚いから何とかならんのか、といったところ。
どっちかというとショートカット論理に使う。
0050デフォルトの名無しさん
垢版 |
2017/07/18(火) 01:21:43.38ID:yLpc3eXF
>>34
Pythonがゴミだからなんなの? わざわざCスレでPythonアンチしていい理由にはならないよね
しかもあんな的外れで何も知らないこと丸わかりなアンチ書き込みしたら対象がどんな言語であっても荒れるに決まってるよね?
帰るのは君だよ
0051デフォルトの名無しさん
垢版 |
2017/07/18(火) 01:32:30.51ID:/ZeLwNbO
>>39
すごいコードってのが分からんが、Haskellのprintfはコード見れるけど全く分からん。
(Hoogleでprintfで検索してソース覗く)

型推論出来れば普通のprintfにも、フォーマット済の文字列欲しい時はsprintf的にも使える関数なんだが。。。
0052デフォルトの名無しさん
垢版 |
2017/07/18(火) 02:23:27.20ID:tZS7qvye
>>51
おうサンクス。見てみたがなるほど分からん。
つっても俺はHaskellの文法も覚えてないレベルなんだが。

ただまあ、その仕様なら、確かに短いのかもね。
GNUのprintfって確か400行程度でgotoが20個くらいあるトンデモコードだったはずだが、
(探したけどすぐには出てこなかった)
それよりも仕様は大きいからねえ。
0053デフォルトの名無しさん
垢版 |
2017/07/18(火) 02:24:26.42ID:tZS7qvye
>>51
> すごいコード
これな。
俺が思うに問題はこういう「下位コード」ではなくて、
printfやオブジェクトを呼び出す「中位コード」の書きやすさだと思うんだよ。
関数型の連中と話していて違和感を感じるのはそこで、
奴らは10行のコードを5行にすることに精を出しているが、
10k行のコードを5k行にすることには興味が無いように見える。

実際のアプリを書いていて差が出るのはそこで、
Cはその点、最適なデータ構造を目指す、という方向に特化している。
だから構造体ポインタの塊になってしまうわけでさ。
それをもうちょっと自動的に取り扱おうとするとオブジェクト指向になり、C++になる。

で、そこらへんの「中位コード」のサンプルが無いんだよ。
具体的には10k-数万行を必要とするOSSアプリ。
Cの場合はこれはいくらでもあって、既に書いた通りlinuxやGit等。
C++ならFireFoxでもchromeでも、OSSで開発されているからいくらでも読める。
JavaScriptは最近atomエディタというのが出てきた。まあそれ以前から見放題ではあったが。
これに対して、「Haskell製の有名アプリ(OSS)」ってないよね?
(というか俺が知らないだけではあるが)

関数型の連中はCみたいな手続き型を悪く言うのだけど、それは全て下位コードなんだよ。
そして現実的には、下位コードなんて短く書けても大して意味無いんだよ。
どうせ読まないから。(名前がprintfな時点で読み飛ばし決定だし)
ただ、短く書けること自体はやはりすごくて、ポテンシャルがあるのは認めるが、
それが本当に使い物になるのか?については俺はちょっと疑問なんだ。
だから実際に動いているものを見て、どうなのか確認したいわけでさ。

というわけでHaskell製の有名OSSアプリあったら教えてください。
0054デフォルトの名無しさん
垢版 |
2017/07/18(火) 02:49:55.27ID:FK0nGZqt
>>27
LLで関数をオブジェクト扱いするような言語だと宣言前の関数を呼び出せるの相性悪いんだよね

一応確認して見た(シェルスクリプトみたいな特殊なものは無視)
Ruby→呼べない
perl→呼べない
lua→呼べない

PHP→呼べる(ただし、条件分岐内などの文脈で宣言されていない関数のみ)
JavaScriptl→呼べる(関数宣言「文」のみ)

JavaScriptの「巻き上げる」っていう仕様は結局わかりにくくて、ECMAScript以外で採用してる言語はないはず
0055デフォルトの名無しさん
垢版 |
2017/07/18(火) 03:10:01.00ID:FK0nGZqt
>>53
Pandocは現状かなり知名度あるんじゃないかな
https://github.com/jgm/pandoc

適当にググったらMoongiftのHaskellタグのやつそこそこあった
http://www.moongift.jp/tag/haskell

Pythonに関しては現物を見たことないの常識的にやばいと思うが・・・
機械学習とか数値処理とかの学術系はpython無双だし、Ansibleやyumみたいな管理系統、GUIソフトですらお前Python通って時がちらほら
Googleも社内標準言語にPython入ってて、Githubにもいくつか公開されてるな
0058デフォルトの名無しさん
垢版 |
2017/07/18(火) 08:27:43.78ID:qfl2Yypx
>>57
はあ?
ローカル関数でも再起は普通に使うし心配いらんって言われても困るわ
むしろお前の頭の方が心配だよ w
0061デフォルトの名無しさん
垢版 |
2017/07/18(火) 10:00:20.99ID:9AYHL0AJ
>> https://mevius.2ch.net/test/read.cgi/tech/1494508803/990

> しかしヘッダファイルを用意するなんて完全に二度手間だし、

失笑
仕様と実装に分けて管理することが何の二度手間なんだよボケ
APIだとかインターフェイスだとかみんなそうだろうが


> コンパイラが自動的にやれよマジで、と思ったことは無いのか?

あああるよ
内製でサクッと作れてしまうほど簡単なことだからなおまえには簡単じゃないかも知れんがw


> 面倒ならなしでよし、

そうなってるだろうが、まさか知らんのか?


> その場合はコンパイラが勝手に探してくる、

これがおまえの言う「自動化」か
ワードやエクセルが「自動で」いらんことしやがるようなのがコンパイラにもついていて欲しいのかw
俺は反対、ライブラリをバージョン管理してるときなど断りもなく最新だか旧版だかとやられたら殺意がわく


> お前みたいに疑問を持ってない奴

疑問は持つぜ
おまえみたいに間違った正義を説くアホは見逃してねえだろ
0064デフォルトの名無しさん
垢版 |
2017/07/18(火) 12:41:58.87ID:IlqGlOEF
まだ続いてたのか……
仕様に不満があるのは理解できた。同意できるかどうかはともかく。
そろそろ、「不満があるから何をしてるのか」という話を聞きたいな。
0065デフォルトの名無しさん
垢版 |
2017/07/18(火) 14:49:00.45ID:D0vI4DI2
そもそも個人的にPythonをプログラムと呼ぶのに違和感ある
Pythonはスクリプトだろ
0066デフォルトの名無しさん
垢版 |
2017/07/18(火) 15:27:18.14ID:P4sGRRLT
お願いします。どうしても、課題ができません。どなたかわかる方いませんか?

text.txtというファイルに以下のような個人情報が保存されているとする。これを読み込み、実行例のように画面に出力するプログラムを作成しなさい。

ヒント: 氏名の読み込みでは"name: %s\n"のような変換仕様を用いると良い。

▼text.txtの内容
name: Ichiro
age: 20
weight: 65.5
e-mail: ichiro@foo.bar
▼実行例
氏名: Ichiro
年齢: 20
体重: 65.5
Eメール: ichiro@foo.bar
0067デフォルトの名無しさん
垢版 |
2017/07/18(火) 15:27:59.32ID:P4sGRRLT
#include <stdio.h>

int main(void)
{
int x;
double b;
char str[100];

FILE*fp;
fp=fopen("test.txt","r");

if(fp==NULL){
printf("ファイルをオープンできませんでした。\n");
return 1;
}else{
printf("ファイルをオープンしました\n");

}
0068デフォルトの名無しさん
垢版 |
2017/07/18(火) 15:28:25.02ID:P4sGRRLT
fscanf(fp,"name:%s",&str);
printf("氏名:%s\n",str);
fscanf(fp,"age:%d",&x);
printf("年齢:%d\n",x);
fscanf(fp,"weight:%d",&b);
printf("体重:%.1lf\n",b);
fscanf(fp,"e-mail:%s",&str);
printf("Eメール:ichiro@foo.bar\n",str);

printf ("ファイルを読み込みました\n");
fclose(fp);
printf("ファイルをクローズしました\n");
return 0;


}
0069デフォルトの名無しさん
垢版 |
2017/07/18(火) 18:43:44.87ID:/pPGIQYg
Makefileの書き方で質問なんだけど

all: hoge piyo fuga

みたいな行があるとして、 依存ファイルを変数みたいに使いたいんだけど
どう書いたらいいの? いちいち

HOGE := hoge piyo fuga
all: $(HOGE)

みたいに書かないとだめなの?
0071デフォルトの名無しさん
垢版 |
2017/07/18(火) 21:58:43.01ID:zbCywyZZ
>>66
課題なら、>>68で十分なのだろうけど実務で使うときは幅指定必須なので、先生に聞いとけ〜

%100s%*とかね。
0072デフォルトの名無しさん
垢版 |
2017/07/18(火) 22:05:43.42ID:zbCywyZZ
>>69
変数みたいにつかって何したいかわからんな。
makefileってそういうものだとしか、言えない。

依存関係は依存するファイルをコンパイラが出力してくれるから、それをincludeするなんてのも良くある。
0073デフォルトの名無しさん
垢版 |
2017/07/18(火) 23:26:17.54ID:fPBWIN/L
>>68
惜しいな。

> fscanf(fp,"weight:%d",&b);

ヒント: % の後。
0074デフォルトの名無しさん
垢版 |
2017/07/18(火) 23:30:58.21ID:fPBWIN/L
>>68
もう一箇所。

> fscanf(fp,"e-mail:%s",&str);
> printf("Eメール:ichiro@foo.bar\n",str);

惜しいな。strに読む所は良い。その後、それを出す所。これだと固定の文字列が出るだけだよね。
0075デフォルトの名無しさん
垢版 |
2017/07/18(火) 23:36:18.53ID:Th9l296P
専門学校一年です
プログラム言語っていくつも必要?応用性ある最強言語一つあればいいんでないの?
0077デフォルトの名無しさん
垢版 |
2017/07/18(火) 23:49:23.68ID:tZS7qvye
>>54
Perlは出来るぞ。
Rubyは出来ないようだが。これは予想外だった。つかMatzはこっち側のはずだが。
luaは出来ないね。LiveDemoで確認した。
http://d.hatena.ne.jp/perlcodesample/20080615/1213501216
https://soudan1.biglobe.ne.jp/qa776599.html

JavaScriptが文だけなのは全く問題ない。以下コードは動く。
代入は他文と同様上から順に評価されるだけであって、シンボルは見えてる。

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

> JavaScriptの「巻き上げる」っていう仕様は結局わかりにくくて
これは俺は「分かりにくい」というのが理解不能で、単に関数スコープなだけだ。
Cで言うANSI以前の「ド頭で全部宣言しとけ」でしかない。(C89と言うのか?)
ここで間違ったらCはSyntaxErrorだったはずだが、
JavaScriptの場合はそこらへんがユルくて、
「どこで宣言しても頭で宣言したことにして、エラー無しで動作」となるだけ。

Rubyが出来ないのはMatzが方針を間違えてるね。
「全部先に宣言した方が読みやすい」ってのはMatzの意見であって、
全員がそう思っているわけではない。だからRubyの思想なら制限しては駄目だ。一貫性がない。
逆にPythonはユーザーごとのばらつきこそが可読性を低下させるという思想だから、
制限するべきだし、実際にそうなっているから問題ない。こちらは一貫性がある。
結果、俺にとってはRubyも糞だと判明しだだけだな。
0078デフォルトの名無しさん
垢版 |
2017/07/18(火) 23:50:25.98ID:tZS7qvye
>>55
> 機械学習とか数値処理とかの学術系
あまり詳しくはないが、MLとかは当てにならん。
あれらはループがえぐいだけで中身は大した事はない。
大半が下位コード、1k行か精々3k行程度のはずで、俺なら使い捨てにする。
しかも自分の環境で動けばいいだけのイージーモードだ。
がっつり保守されてる奴を見ないと実用上の向き不向きは分からん。
ウォーターフォールで作ればアホでも綺麗に作れるのは当たり前であって、
問題はそこからの耐性だから。
本来のOOPもそこからのスタートだったろ。
最近のOOPは若干暴走気味で、設計の設計の設計みたいな感じになっている奴も多いが。

で、教えてもらって文句を言うのも悪いんだが、、、
> pandoc
マークアップコンバータは再帰で実装できるからHaskell向きかもしれん。
ただこれもかなり簡単で、しかもどの言語でも実装できる代物でしかない。
要するに再帰とストリング系が強ければいけるから、
LL言語ならどれを使っても問題ないし、苦労もしないだろう。
Haskellを使ったからこそ生きる、というものではないと思う。

Cが使われている現場は、Cでしか書けないから、だ。
それはお世辞にも生産性が高いとはいい難いことの裏返しではあるが、
linuxKernelについてはLinus自身がC++では無理だったと言っているし、
Gitについても同様だ。
> gitのような、効率を第一の目的としたのには、C++の「利点」とやらは大失敗なんだよ。
> 実際のところ、LinuxではC++を試したことがある。1992年のことだった。
> 結果はクソだった。マジで、カーネルコードをC++で書くのは、ド低脳の考えだ。
> https://cpplover.blogspot.jp/2013/05/linus-torvalsc.html
実際Git全盛だし、Linuxについても
「安全なOOPでカーネルを書き直そう!」という話が10年程前には在った筈だが、
今全く聞かないので、完全にポシャったのだろう。
結果的にLinusの意見の正しさを証明している。
0079デフォルトの名無しさん
垢版 |
2017/07/18(火) 23:51:25.94ID:tZS7qvye
Haskellの売りは遅延評価だろ?
ならば、遅延評価がビルトインで提供されているからこそこれだけ簡単に実装できる、
そうでない言語ではかなり辛いことになる、というところで戦わなければ意味が無い。
マークアップコンバータは違うし、そこに挙げられている他12種も同様だ。
Linusの言葉を借りるなら、
> (c) 授業でそういう課題を与えられた者
でしかない。他言語を既に十二分に使えるときに、それらアプリでHaskellを選択する理由がない。

遅延評価の利点は、俺が思うに、適当に書いても速いことだ。
具体的には、超大富豪プログラムを動的に貧民プログラムに変身させられる事だ。
だからチャキチャキ書けないと意味が無いのだが、Haskellはお世辞にもそういう感じではないだろ。
だからHaskell使いがあの程度のアプリしか作れない時点で将来性はないよ。
彼らもそれなりに優秀なはずで、仮に俺が学んだとしても、彼ら以上のものを作るのは容易ではない。
それで作れるものがあの程度?そそられねーな、って感じ。
あのラインナップなら今でも他言語で作れるし、多分そんなに苦労もしない。

とはいえこれはサンプルとしては素晴らしい。ありがとう。
保守されているし、俺が確認したい中位コードは大量に含まれているはずだ。
俺自身が他言語で実装できるだろうというのもいい。オレオレ実装と比較できる。
つまり、言語比較という意味ではかなりいい素材だ。
ただそれ以前に俺はHaskellをほぼ読めないので、読むのはずいぶん先になりそうだ。
これについては申し訳ないね。
0080デフォルトの名無しさん
垢版 |
2017/07/18(火) 23:52:11.26ID:tZS7qvye
> Ansibleやyum
お手軽スクリプトの域を出ないと思う。最悪、シェルスクリプトでも出来る範囲だろ。
C++の現場、たとえばブラウザでは、本当にエグイほど仕様変更が入って、
結果的にソースコードはぼろぼろになっていって、それでも保守している。
だからやっぱりLL言語はLL言語なんだと思うよ。
これだからスクリプターは、、、というのも当たってる。戦場の厳しさの次元が違う。

一通り動かすところまではどの言語を使っても出来る。
その過程で、例えばHaskellの遅延評価のような言語独自のフィーチャーがあり、
それを生かせれば素晴らしい。
しかしPythonにはそもそもそれがない。特に可もなく不可もなく、的な言語だ。
そして問題はそこから先で、
当初想定してなかった仕様変更が入ってきたときどこまで耐えられるかなのだが、
これに関してはPythonは不可も無いのだからそれなりではある。(悪くはない)
(なおJavaScriptはデタラメなパッチで一時しのぎする方法には事欠かないため、
俺はこの点も気に入っている)

エコシステムが云々、というのはおいておいて、
言語自体の能力で言えば、Pythonを積極的に選ぶ理由が一つもない。
とはいえ他言語は色々尖っていることも多いので、消極的にPythonってのもありだとは思うし、
実際そこにポジションしているとも思うが。Javaに近いというか。
両言語ともそれで繁栄しているのだから間違いでもないわけだが。
0082デフォルトの名無しさん
垢版 |
2017/07/19(水) 00:53:51.97ID:PZqfvVeo
>>75
そーいう発想は大事
大きいプログラムも小さいプログラムも
スケーラブルに書けるほうが良い!
というのが動機で出来た言語があるにはある
0084デフォルトの名無しさん
垢版 |
2017/07/19(水) 01:28:24.97ID:q7UYRLiM
確かにCはなんでも書ける。
きめ細かくハードウェアに密接するようなのも書ける。
OSやデバイスドライバも書ける。
OSなし環境向けの組み込み用マイコンボードのROMに書くプログラムなんかも書ける。

逆にいうと、きめ細かくしか書けない。それなりのライブラリが用意されてないと作るのが大変。
0086デフォルトの名無しさん
垢版 |
2017/07/19(水) 03:29:33.92ID:YP+Z6klr
>77
perlのやつは勘違いだった、すまん

>「分かりにくい」というのが理解不能で、単に関数スコープなだけだ。
関数の巻き上げは、ブラウザの種類、バージョン、strict modeの有無の組み合わせで位置と動作が不安定になったりするのはかなりわかりにくいと思う
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions_and_function_scope

>Rubyの思想なら制限しては駄目だ。一貫性がない
Rubyは「その場にメソッドを定義する」という機能を持つ文が用意されているだけ
「すべてはオブジェクト」という思想的に一貫してる

その結果、javascriptではできない関数の中身や別ファイル、if文の中とかでもメソッド定義が比較的自然に行える
hoge = □

def hoge
 ■
end if true

みたいなこともできないと仕様上不自然。
javascriptみたいにifをつけると巻き上げが起こらないみたいにすると、この場合では
ifなし→□
ifあり→■
みたいに非直感的な挙動になって一貫性が失われる。そう考えると、言語全体の仕様の見直しが必要になって・・・
と考えてくと、評価時に定義されるというのはそれはそれで合理的。
0087デフォルトの名無しさん
垢版 |
2017/07/19(水) 03:52:13.57ID:q7UYRLiM
>>85
それの場合CPU毎に覚える必要があって面倒。
C言語コンパイラはだいたいのCPU向けに素早く実装される傾向にあると思うのでアセンブリ言語よりは良いと思う。
0088デフォルトの名無しさん
垢版 |
2017/07/19(水) 04:35:20.40ID:YP+Z6klr
>>78-80
Haskellはちょうど具体例を知ってたから上げただけで全然わからないから詳しくはわからんので申し訳ない
人から数学系とHaskellを極めればいろんな界隈で需要があるらしいという噂だけ聞いたことはあるが


他の話は結局何が言いたいのかわからん
PythonはLL言語なんだから「お手軽スクリプト」として使うのは当たり前じゃん
機械学習とかの研究分野は、実装を素早く作って考えた手順を評価してを高速に繰り返すんだからC言語では無理。

それこそgitでも最初期の仕様を考えてるときはperlとか使ってたし
http://gihyo.jp/dev/serial/01/alpha-geek/0040


>消極的にPythonってのもありだとは思うし、実際そこにポジションしているとも思うが
大体の人はそれを理解してるのに突然「Pythonはクソ!使ったことないけどクソ!」ってやつがわいてきてみんな頭の中???
Haskellについてのやつを見ても思うけど、断片的な経験と情報、ネットで見た内容とかを元に理解したと思いこむ癖があるんだろう
個人のソフトはともかく、Googleとかパッケージマネージャとかで積極採用されるからにはそれなりの評価点があるはずなんだから、自分の考えは常に疑って更新したほうがいいぞ
0089デフォルトの名無しさん
垢版 |
2017/07/19(水) 04:42:21.33ID:I/2F8nLs
要するに「なんでも書ける」は言い過ぎだということ
C言語がハードウェア寄りの記述が得意な言語であることは確かだけれど
それでも大抵はわざわざインラインアセンブラという抜け道を用意している
その理由はどうやっても書けないこともあるから
0091デフォルトの名無しさん
垢版 |
2017/07/19(水) 05:21:02.93ID:2gF8BL9h
>>89
割り込み関係みたいに特権命令を使うところは
「きれいなC」だけじゃ絶対書けないな
0092デフォルトの名無しさん
垢版 |
2017/07/19(水) 08:01:13.73ID:/uBE13O5
使ったこともない言語をディスり、同意しない相手は無知だと思っているガイジに汚染されたスレはここですか?
0093デフォルトの名無しさん
垢版 |
2017/07/19(水) 08:13:15.18ID:q7UYRLiM
>>89
ああ。書けないものもあるな。
そうなるとインラインアセンブラで無理矢理埋め込んだりする事になるとは思うが、そういうのは普通は全体からすればほんの少しだよな。
0094デフォルトの名無しさん
垢版 |
2017/07/19(水) 08:23:52.23ID:4WYjcaP8
>>53
Haskell処理系のGHCがまさにHaskellで書かれてるし、モナディウスっていうゲームはHaskeller界隈じゃ有名。
そもそもHaskellが有名になったのはPerl本家より早くPerl6の実装したのがキッカケ。
それまで知る人はほとんど居なかった。
0095デフォルトの名無しさん
垢版 |
2017/07/19(水) 08:29:05.26ID:I/2F8nLs
>>93
その通り

>きめ細かくハードウェアに密接するようなのも書ける。
>OSやデバイスドライバも書ける。
>OSなし環境向けの組み込み用マイコンボードのROMに書くプログラムなんかも書ける。

こういうのは全体からすればほんの少しだよ
0097デフォルトの名無しさん
垢版 |
2017/07/19(水) 08:42:04.13ID:PZqfvVeo
>>92
そうだよ
こいつにレス返すと終わりが見えないぞ?っていうタイプ
それを無邪気に触っちゃうのがこのスレだよ

みんなさすがに今回ので学習したと思うけどw
0098デフォルトの名無しさん
垢版 |
2017/07/19(水) 09:21:43.24ID:NslmVuOC
>>72
変数を使いたくない ってことです
0101デフォルトの名無しさん
垢版 |
2017/07/19(水) 10:35:07.29ID:Fe8jikVu
プラットフォーム依存のレジスタいじったりする必要があるから
綺麗なCってのは難しい
綺麗なCの定義にもよるけど
まぁ関数化するなどして隠蔽化はできるけど
0102デフォルトの名無しさん
垢版 |
2017/07/19(水) 10:41:07.44ID:4WYjcaP8
>>75
誰かが自分には分かりやすく書いた言語が、他人には分かりやすいとは限らない。
で、書ける奴は他人の言語押し付けられるなら自分用言語作っちゃう。
今も増え続けてる。
0103デフォルトの名無しさん
垢版 |
2017/07/19(水) 10:50:02.60ID:4WYjcaP8
>>100
組み込みはPICアセンブラで遊んだだけだけど、PC向けよりもハードがまだ完成してないと言うか、SoCでCPU(MPU)とメモリは用意するから後は自分で追加してねって感じだし、返って文法としては単純かもね。
結局CPUとしては計算以外じゃポートやメモリに読み書きするだけだし。

ハード作りながら入出力の関数も自作する感じですかね?
0104デフォルトの名無しさん
垢版 |
2017/07/19(水) 11:04:35.78ID:NslmVuOC
>>99
HOGE := hoge piyo fuga
all: $(HOGE)
clean:; rm *.o $(HOGE)

みたいなのをたとえば

all: hoge piyo fuga
clean:; rm *.o ★(all)

みたいにすっきり書きたい
0105デフォルトの名無しさん
垢版 |
2017/07/19(水) 11:06:41.55ID:PmVzrrzS
コンパイルするときにmakeとかcmakeとかありますけど他にもあるのかもしれませんけど
今ならどういうのが定番ですか?
0107デフォルトの名無しさん
垢版 |
2017/07/19(水) 11:49:17.31ID:HHR/5Ry0
>>104
ターゲットの依存ファイルを再帰的に展開すると言う事になるが、途中で止めたいとかわがまま言いだすだろ .hとか
例えそれが可能になったとしても、依存ファイルは、そのアクションを実行するために必要なので
削除するために作成すると言う極めて頭の悪い状況が発生する
0108デフォルトの名無しさん
垢版 |
2017/07/19(水) 12:36:53.34ID:BDmDUIr4
>>104
うーん正直上の方がわかりやすいと思うけどなあ
とりあえず下みたいなことをする方法は知らんわ。力になれなくてすまんな
0110デフォルトの名無しさん
垢版 |
2017/07/19(水) 21:27:36.88ID:WSo7MpMs
cleanは、固定的に削除したほうがいいよ。でないとその内ゴミが混ざる。

まぁ、無理矢理やるなら
allに含めるターゲットを処理するときに中間リストへもファイル名を追加しといて、xargsに食わせるのが無難かと。
0112デフォルトの名無しさん
垢版 |
2017/07/19(水) 23:40:47.89ID:87ZFTsAE
>>86
JavaScriptについては、Webリソース(というか個人ブログが多いが)も間違いが多いから注意した方がいい。
> strict modeの有無の組み合わせ
これが要らん。実際見りゃわかるが、全員 strict mode 使っている。
MDNは準仕様書みたいなものだから、非strict modeについても言及する必要もあるだけ。

> javascriptではできない関数の中身や別ファイル、if文の中とかでもメソッド定義が比較的自然に行える
いや、できるぞ。ただしやる必要もないし、意味もないが。
(strict mode の場合はif文中では禁止)

動的にクラス構成を変える必要があるケースはまずないが、(手抜きパッチを除く)
やる場合はプロパティとして差し込むので、それはただの文だ。どこにでも書ける。
function定義そのものではなく、関数ポインタを差し替える。
というか、ここら辺の流儀は他言語と同じだ。
俺は特に疑問を持ったこともなく、分かりにくいとも思わないが。
0113デフォルトの名無しさん
垢版 |
2017/07/19(水) 23:41:35.90ID:87ZFTsAE
> javascriptみたいにifをつけると巻き上げが起こらないみたいにすると
これが違う。(内容自体ではなく、考え方が違う)
プログラミングを暗記で済ませようという馬鹿はJavaScript界隈に多いが、
そうとしか捉えられないのなら、向いて無いから止めた方がいい。(君が上達することはない)
それは「数学は暗記だ!」と言っているようなものだ。
或いはどうにも高校の物理に全く付いていけなかった奴とか。
あれは今にしたら分かるが、抽象思考が出来ない奴には無理だったということだ。
そしてプログラミングではその抽象思考こそが重要であり、逆に、それ以外は大して必要ない。

順に評価されるべきものは順に評価され、(巻き上げなし)、
そうでないものはC的に静的に評価されるだけ。(巻き上げあり)
俺は疑問を感じたことはない。
「巻上げという仕様ガー」とか言い出すから余計に意味不明になるのであって、
そもそも最初から直感的だ。後方参照できるだけでしかない。
JavaScriptはC(正確にはC++)以上に文法が抽象化されているから、暗記には向いてない。
結果的にC++並みのことがC並みの文法で出来るようになっている。俺はここも気に入っている。

それとは別に、君が「全部上から順に評価してくれなきゃヤダ」ならRubyの仕様をマンセーすればいいが、
JavaScriptの仕様はC等コンパイル言語を使ったことがあるやつにとっては非常に直感的だ。
俺にとってはRubyの仕様はウザいだけだね。
0114デフォルトの名無しさん
垢版 |
2017/07/19(水) 23:42:29.67ID:87ZFTsAE
>>88
要するにスクリプト言語はラピッドプロトタイピングには向いているんだよ。
そしてPCの能力が十二分に上がったので、
その遅いコードでも十分実用的だし、問題ないからそのまま使われてる。
俺も、もう低位コードだけCのDLLにして、
中上位コードは全面的にスクリプト言語で行った方がいいと思っている。楽だから。
NumPyはまさにこれでしょ。俺からみてもgoogleの動きは全然不思議じゃない。
ていうか多分、マトモなプログラマならgoogleの動きを不思議に思う奴はいない。
君がそんな言い方をする時点で君は色々分かってないと自白しているようなものなんだが。

> Googleとかパッケージマネージャとかで積極採用されるからにはそれなりの評価点があるはずなんだから
評価点はないね。ビジネス上の観点でしかない。
googleは社内言語を絞ってる。C++/Java/JavaScript/Pythonだ。この中ならPythonだろうさ。
だから、仮にRubyやHaskellがgoogle社内で評価されたとしても、
それらで書かれたツールが出てくることはない。
0115デフォルトの名無しさん
垢版 |
2017/07/19(水) 23:43:14.27ID:87ZFTsAE
>>94
> GHC
サンクス、そうであったか。これもサンプルとしてはいいね。
> モナディウス
Haskellってexeかよ!やってみた。グラディウスにしては速すぎる、、、左手が辛い、、、

> Perl6
つかそれってどういうことだ?
構文解釈等に関しては、実は圧倒的に単純に実装できたりするのか?
pandocもそっち系だ。俺には遅延評価とは無関係としか思えないのだが。
0117デフォルトの名無しさん
垢版 |
2017/07/19(水) 23:51:34.81ID:b4rxwY3N
C始めるためにVS2017インストして苦C見ようとしてるんだけどどこをどうすればソースを書けるのかちんぷんかんぷん
そもそもCの内容をC++で書けるのか怪しい
スレチかもしれないけど助けて詳しい人
0118デフォルトの名無しさん
垢版 |
2017/07/19(水) 23:52:22.89ID:D2iudQ65
な、長ぇ…
0120デフォルトの名無しさん
垢版 |
2017/07/20(木) 00:08:04.51ID:hVyvHmVu
ラピッドプロトタイピング用に作られたのがスクリプト言語なんだから向いてて当たり前
ハードではFPGAなんかがASIC前のラピッドプロトタイピング用だね
しかし中上位コードしかかけん奴らがプログラマ気取る風潮はいかがなものかと危惧する
Cでの低位コードもスクリプト言語での中上位コードも書けんとな
0121片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/07/20(木) 00:09:55.72ID:m6IHlIP+
>>117
適当な場所(フォルダ)にプロジェクトファイルを作成します。
プロジェクトにソースファイルを追加します。
ソースファイルにソースを書きます。
ビルドします。
デバッグ実行して、正しく動作するか確認します。
バグがあれば修正します。
リリースビルドして、EXEを作成。
exeを配布します。
0123デフォルトの名無しさん
垢版 |
2017/07/20(木) 00:16:25.56ID:u2xEebDY
>>116
にわかなやつほど語りたがる、ってやつだな
何が動機なんか知らんけど
愚にもつかない長文いっぱい書いちゃう子おるよな
これはもう、定期的に出てくるとすら言っていい現象だけど

>>121みたいな簡潔なレスのほうがよっぽど好感度あるわ
0125デフォルトの名無しさん
垢版 |
2017/07/20(木) 00:32:44.03ID:AEwXV/7G
>>120
上二行は後付。sed->awk->Perl->その他もろもろ、だろ。PLD->FPGAでもあるし。
下二行は時代の要請。
> MITがSICPを教えなくなった理由
> https://cpplover.blogspot.jp/2016/05/mitsicp.html

俺は中上位コードだけでもいいと思うけど、書き捨てばっかやってるのは駄目だと思う。
こういうことをすると保守ではまるのかーがないと、回避する能力が育たない。
0126デフォルトの名無しさん
垢版 |
2017/07/20(木) 00:36:40.77ID:lc7WOVge
>>115
関数型全般に言えるけど、言語やテーブルゲームの問題解かせたりし易い。
遅延評価はwebアプリでHTMLの長さを気にしないで読み込める無限リスト便利って読んだことあるな。
んなのどの言語でもそんな変わらんとは思うが。
どっちかと言うとIO部分分離してるから自然とMVCとかMVVMな設計になるってのがメリットに感じる。
0127デフォルトの名無しさん
垢版 |
2017/07/20(木) 01:40:25.59ID:AEwXV/7G
>>126
なるほど言語向きなのは関数型の特性か。
確かにbisonが一体化しているようにも見える。

遅延評価で無限リストがーってのは多分Webライタのデタラメ。
実際、無限リストなんて使おうと思ったことないだろ。
HTMLは多分頭からパースしないと悲惨なことになるだろうし。
(一部曖昧なところがあるらしい)

遅延評価は後払い方式のため、
読み込んだものの、結果的に使わずに捨てたデータが多い場合に負荷が軽くなる。
もちろんオーバーヘッドはあるので、全部使うのなら正格評価の方が軽い。
だから理想的にはどれを使うかきっちり管理して正格評価することだが、
これが面倒な場合は遅延評価にしておけば勝手にそうなる。
ノリとしてはGCと似てる。(管理が面倒なら遅延評価にしとけ)

で、マークアップコンバータとかも、全文書を評価することが分かりきっているのだから、
管理も要らず、普通に考えて正格評価の方が適している。だからあのラインナップは謎だった。
関数型言語の特性だということなら納得だ。

> 自然とMVCとかMVVMな設計になる
これはなあ、、、Cでも苦労するわけでもないので、言語特性ではなく、意識付けの問題かと。
実際にHaskell使おうって奴らはここら辺についても意識高いだろうし、
いい方向に寄与しているとは思うよ。
0128デフォルトの名無しさん
垢版 |
2017/07/20(木) 03:16:53.07ID:X0EJcA/q
>>112-115
>全員 strict mode 使っている。
新しいソースはね。破壊的変更だから古いソースはstrictじゃない場合も多い。

>俺にとってはRubyの仕様はウザいだけだね。
俺もメインでやってるのは静的言語だけど、JavaScriptもPythonもRubyも関数に関してはうざいと思うことはないな
単純に慣れの問題でお前のRubyやPythonの経験が不足してるだけだと思う

Pythonやる前はインデントって不便だろうって思ってたけどすぐなれたし、使ったこともない言語を適当にディスるのはよくないぞ

>最初から直感的だ、後方参照できるだけでしかない
初心者なら直感の理解でいいかもしれんが、ちゃんと仕様を理解するに越したことはない
undefinedが予約語じゃない、typeofの結果が意味不明みたいにjavascriptも含めどの言語にも直感に反する仕様が存在するし、それを利用したライブラリとかのソース読むときにある程度理解してないと困る

>俺からみてもgoogleの動きは全然不思議じゃない。
ID:LYlgQVUQとかID:tZS7qvyeとは別の人?
「Pythonは馬鹿用言語」「Pythonなんてキチガイ馬鹿用言語」っていう人にそんならGoogleみたいなところも使ってるよって言っただけなんだが

>googleは社内言語を絞ってる。C++/Java/JavaScript/Pythonだ
知識が更新されてないな。現在はC/C++、Java、JavaScript、Python、Go、TypeScriptのはず

>評価点はないね。ビジネス上の観点でしかない。
ビジネス上の観点も大事な評価点でしょ
0129デフォルトの名無しさん
垢版 |
2017/07/20(木) 03:42:11.85ID:X0EJcA/q
そもそも「文法が抽象化されている」ってどういうことだろう
javascriptはIE6時代から見てるからかもしれんが、文法からライブラリまで欠陥だらけで、現在の具体的な実装こそが正義な言語というイメージなんだけどな
クラスやプロトタイプチェーンの仕組みとか、thisがどこを指すかとか、for inとオブジェクトや配列がらみの仕様とか直感で完全に理解できる人はいないはず

言語仕様に関しては、C言語も//コメントは使うのに関数先頭以外で変数を宣言できないと思い込んでる人とか結構多いんだよなぁ・・・
0130デフォルトの名無しさん
垢版 |
2017/07/20(木) 09:24:07.80ID:VLxfq0H/
複合文の中で変数を宣言できるのを知らないやつはたまにいるが
printf("aho");
int boke;
これ知らねえやつはいねえだろ
逆に制限のある環境でこれをやってエラー吐かれるアフォがいるくらいで
0132デフォルトの名無しさん
垢版 |
2017/07/20(木) 11:37:31.64ID:Gk3qg8E2
for( int i=0; i<10; i++) {
print i;
}

で、「i のスコープは for ブロックの中」って言うけど
ブロックって、中括弧の中だよね?
0133デフォルトの名無しさん
垢版 |
2017/07/20(木) 11:48:22.63ID:VLxfq0H/
i++ が中括弧の外にあるようだが?
0134デフォルトの名無しさん
垢版 |
2017/07/20(木) 12:04:35.30ID:Gk3qg8E2
そうそう。
だから、中括弧の外にもう一つ別のスコープがあるんだね。試してみた。
0139デフォルトの名無しさん
垢版 |
2017/07/20(木) 15:47:57.27ID:VLxfq0H/
>>134
ああそうか、i++が中括弧の外にあるのに
ブロックの中という説明はおかしいだろうと
言いたかったのか

あんまり関係ないけどISO/IEC9899:2011 6.8.5 Iteration statements を
読んでいたら、
for (expression opt; expression opt; expression opt) statement
って書いてあってびっくりしてる
改行の位置は単なるtypoとしても、それを修正すると
for (declaration expression opt; expression opt) statement
になる
制御式のセミコロンが1つって、いつそうなったんだ?
0140デフォルトの名無しさん
垢版 |
2017/07/20(木) 15:48:59.77ID:VLxfq0H/
訂正
for ( expressionopt ; expressionopt ; expressionopt ) statement for
( declaration expressionopt ; expressionopt ) statement
って書いてあってびっくりしてる
0141デフォルトの名無しさん
垢版 |
2017/07/21(金) 10:48:58.02ID:C+EZcupv
unsigned int を uint32 みたいに書くやつ
あれの標準ヘッダができたの C99 から?
0143デフォルトの名無しさん
垢版 |
2017/07/21(金) 23:40:03.14ID:K6oF7/iC
>>141
そう。C99から。stdint.hね
自分もありがたく使わせてもらってる。
というか、もうintとか使わなくなった。
0144デフォルトの名無しさん
垢版 |
2017/07/22(土) 13:45:26.72ID:jxtKz7JV
C11とかC99とか似合わせてチェックしてくれるツールってありませんか?
0147デフォルトの名無しさん
垢版 |
2017/07/22(土) 17:15:23.73ID:4ZNVKbnD
お隣はもうC11ですってよ!
うちも11にしましょうよ。ボーナスでたんでしょ。
0148デフォルトの名無しさん
垢版 |
2017/07/22(土) 17:42:54.52ID:TVAxaytW
C++を使えないかあるいはあえて使わないポリシーなのでなければ、C++をbetter Cとして使う方が
いろいろ楽だと思うがな。
0151デフォルトの名無しさん
垢版 |
2017/07/22(土) 19:03:04.98ID:yf/DliCJ
俺はstdint.h相当のヘッダファイルを自作してるけどな。
C89コンパイラだったら自作をincludeするようにしてる。
0152デフォルトの名無しさん
垢版 |
2017/07/22(土) 22:05:24.77ID:0HjhMGYw
>>148
betterCとしてC++使ってたら今度は「今時生ポインタなんてありえない、unique_ptr使え」と圧力がかかって、どこまでC++の機能使うか悩む
0153デフォルトの名無しさん
垢版 |
2017/07/22(土) 22:20:17.19ID:XcmtOt3t
ベターCとしての使い方は、C++という名のとおり、設計どおりの使い方だ
基本的にCとの共通部分だけ、C++のみの拡張機能は欲しいところだけつまみ食いは、邪道ではない
unique_ptrも例外ではなく、欲しければ使い、いらなければスルー
それでいい、至極真っ当な使い方だ
0155デフォルトの名無しさん
垢版 |
2017/07/23(日) 00:22:49.43ID:yjtelfLq
>>154
それならスクリプト言語の方が手っ取り早いと思うがな。
全部shared_ptrやRAIIならほぼGCだろ、とも思うし。

というかC++erの生ポ嫌いは一体なんなんだ?
元々メモリリーク自体はそんなに苦労しないよな?今時ツールで検出できるみたいだし。
Cで何らかのタスク(演算等)をこなす場合、
構造化プログラミングだから同一関数内での確保&解放が多いし。
(というか、そのように書きたければ大概の場合はできる)
0156デフォルトの名無しさん
垢版 |
2017/07/23(日) 00:32:19.27ID:2YxatxBr
>>155
そう
作り方が下手なだけで言語やツールのせいする奴多すぎ
技術屋としてのレベル/精度が低いだけ
0157デフォルトの名無しさん
垢版 |
2017/07/23(日) 01:06:53.41ID:yjtelfLq
ちょっと補足しておく。

俺が思うに、容量的に問題がないのであれば、
大体の場合はmallocではなくallocaで実装でき、当然、管理する必要もない。
だからCはもうちょっとalloca推奨でもいいとは思うし、
そのためにもうちょっとスタック領域に多めに割り当ててくれとも思う。
(コンパイラがallocaをmalloc+freeに分解し、呼んだ関数の末尾でfreeしてくれてもいい。
そうすれば容量の心配ないallocaが手に入るから。
てかこれやってるコンパイラないんか?誰でも思いつきそうだが)
0158デフォルトの名無しさん
垢版 |
2017/07/23(日) 01:43:34.81ID:Juol04gL
んー、イメージ的には、組み込み系が多そうだしcならヒープ使った方がいいきがする。

小メモリで済むのはc最大のアドバンテージだと思うんだ。
0160デフォルトの名無しさん
垢版 |
2017/07/23(日) 08:51:27.89ID:bC6CfLCk
> 構造化プログラミングだから同一関数内での確保&解放が多いし。

このフワフワした一文だけで、今後こいつからは何の情報も得られないのが分かる
0161デフォルトの名無しさん
垢版 |
2017/07/23(日) 11:07:58.09ID:EA1ZzpWz
>>155
生でもきちんと管理していれば問題は起きないが
いちいち気にしなければならないことが多いので
もうずっと付けてた方がいいよね という話ですよ
0163デフォルトの名無しさん
垢版 |
2017/07/23(日) 16:32:54.76ID:yjtelfLq
>>162
これか。
https://stackoverflow.com/questions/18731707/why-does-c11-not-support-designated-initializer-list-as-c99
つか入れない理由ないし、ClangとVSでは使えるとも書いてあるが、
C++仕様自体は無駄に意識高くて無視しているといったところか。

一部C++がCの完全上位互換ではない部分があると聞いたが、これか。
他にあれば、キーワードだけでも教えてくれれば助かる。
0164デフォルトの名無しさん
垢版 |
2017/07/23(日) 16:48:41.41ID:hUTftRXy
tentative
restrict
_Imaginal
_Thread_local
_Generic
_Bool
extern const
storage class "auto"
pointer to register
0165デフォルトの名無しさん
垢版 |
2017/07/23(日) 17:18:38.88ID:yjtelfLq
>>164
サンクス。感想は以下。
俺には我慢できる範囲だな。

tentative <- 要らん、つか廃止の方がいい
restrict <- ねえのかよ!しかし自動並列化とかしない限り要らん
_Imaginal <- class があるから要らん
_Thread_local <- これはC++にあってもいいと思うが、、、
_Generic <- マクロがらみか?価値は俺にはよく分からん
_Bool <- boolが既に拡張済みだから要らん
extern const <- 個人的にはconst派ではないからいいや
storage class "auto" <- なんだこれ?いわゆる自動変数って全部これだと思うが、、、
pointer to register <- registerそのものが最早要らんし
0169デフォルトの名無しさん
垢版 |
2017/07/23(日) 19:30:48.75ID:hUTftRXy
>>165
tentativeがないくせにテンプレート具現化の統合という
同じベクトルでもっと面倒くさいのがあるわけだが
0171デフォルトの名無しさん
垢版 |
2017/07/23(日) 20:01:31.75ID:1KmUXPg0
「ベターC」を名乗るのになんか条件ってあるのかね?
個人的には、K&Rは時代遅れのC、C89が普通のC、それより改善されているのがベターC、ってな感覚だが。
0172デフォルトの名無しさん
垢版 |
2017/07/23(日) 20:09:09.26ID:yjtelfLq
>>171
俺の理解では、C99がC、
それにC++の機能(class等)をつまみ食いした「ほぼCだけど、、、」がbetterC。
0173デフォルトの名無しさん
垢版 |
2017/07/23(日) 20:26:36.42ID:hUTftRXy
>>171
条件はない
"Cの後置増分"とは、"最初はC"でよいという意味だ
そこから段階的にソフトランディングで移行できることが
C++の売りなので、気まぐれにつまみ食いすることは
実はC++らしい使い方の1つといういことだ
0174デフォルトの名無しさん
垢版 |
2017/07/23(日) 20:35:47.04ID:GpgYjQaH
C99以降の機能を使いだすとC++でビルド通らなくなるし
Cを使わずベターCとしてC++使うなら、C99/C11を知るは必要ないでしょ
Cっぽいものが書ければ十分
0176デフォルトの名無しさん
垢版 |
2017/07/23(日) 21:05:01.13ID:1KmUXPg0
あぁなるほど、C99が基準だとC++は劣化Cに見えるわけか。
ただ、一般には「ベターC」という言い方がされたのはC++に対してだと思うがなぁ。
0177デフォルトの名無しさん
垢版 |
2017/07/23(日) 21:06:32.74ID:hUTftRXy
ヒント: 煽り耐性
0178デフォルトの名無しさん
垢版 |
2017/07/23(日) 21:14:20.95ID:yjtelfLq
>>175
よく分からんが君は生C派なのか?
正直俺はbetterC派とC++派しかもう居ない(生C派は絶滅済み)と思っていたのだが、
昨今のC++の暴走を見てると生C派が健在なのも分からんでもない。Linusもそのようだし。

ただ、classとかtemplateとかは「控えめに使っている限りは」便利だと思うぞ。
C++erは無理に活用しようとしておかしなことになっているが。

>>176
俺の理解では、
Cでは機能が足りないが、C++の機能は行き過ぎ(やりすぎ)、と思う人達が、
CとC++のちゃんぽんをbetterCと呼称している。
0180デフォルトの名無しさん
垢版 |
2017/07/23(日) 21:25:32.16ID:yjtelfLq
>>176
あ、もしかしてそれ以前のことか?
それなら、Objective-CとC++の対比で使われ、以下wikiの通りだ。
> Objective-CはCを拡張してオブジェクト指向を可能にしたというよりは、
> Cで書かれたオブジェクト指向システムを制御しやすいようにマクロ的な拡張を施した言語である。
> したがって、「better C」に進んだC++とは異なり、「C & Object System」という考え方であり、
> ある意味2つの言語が混在した状態にある。
> https://ja.wikipedia.org/wiki/Objective-C

ただし、Objective-Cはかなり前から実質的に死亡していたので、
最近「betterC」って言われているのは「CとC++のちゃんぽん」のはず。
要するに「いいとこ取り」をしようとしているのがbetterC。
C++の流儀で全部書け、というのがC++。
うるせえC++なんて全部ゴミだ、というのがC。
0181デフォルトの名無しさん
垢版 |
2017/07/23(日) 21:34:26.02ID:hUTftRXy
>>178
今のC++は、かつてのC++の暴走に対する反省でできているぞ
void func() throw(std::bad_exception); みたいな馬鹿げた話が
void func() noexcept(false); で済むとか
std::bind1stだのstd::bind2ndで3rdや4thがないなんて馬鹿げた話が
std::bindだけで済むだけでなくstd::mem_funとstd::mem_fun_tもクビ
char* port = (char*)0x40044000; みたいな二度手間も
auto port = (char*)0x40044000; で済む
0182デフォルトの名無しさん
垢版 |
2017/07/23(日) 22:02:06.01ID:qzsJDNze
C++普及始めはベターCって言うとC++使いこなせなくてC++でもC文法を良く使うって意味だったみたいなんだが、今はオブジェクト指向も浸透して、その長所短所も洗い出されて来たからいいとこ取りって意味って理解。
でも、今も昔も両者が混在してるんだと思う。
0183デフォルトの名無しさん
垢版 |
2017/07/23(日) 22:04:03.65ID:yjtelfLq
>>181
上2つはそれでも暴走中だとは思うがな。
GC無いと関数型は辛くね?
例外は俺は積極的には使ってないのでよく分からない。

下1つは、俺はC的記述、
> char* port = (char*)0x40044000;
の方が好きだな。
キャスト無しで書かせてくれとは思うが、型は左辺側に書きたい。
それとは別に、autoの価値も認める。リフレクションとかでマジで死ねる。(VC++/CLI)
だけと他言語と揃えてvarにしろよとは思うよ。なぜauto?
0185片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/07/23(日) 23:29:44.60ID:Y7iSLLwh
>>183
昔、autoというキーワードがあったが、あまり使われなかった。そこで新しいキーワードを作るよりも、
使われていないキーワードを再利用した方がいいと判断された、らしい。
0187片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/07/23(日) 23:35:53.82ID:Y7iSLLwh
キーワードが増えると、キーワードと同じ変数名や関数名はコンパイルできなくなるという問題がある。
0188デフォルトの名無しさん
垢版 |
2017/07/23(日) 23:53:29.52ID:hUTftRXy
>>183
さあ? 俺はGCがないことにストレスを感じたことがない
あんなもんいらねえ、つーか却って迷惑
機械という奴隷は完全に支配したいんで
0189デフォルトの名無しさん
垢版 |
2017/07/23(日) 23:58:37.14ID:yjtelfLq
>>185,187
> 記憶クラス指定子としての auto の使用が非常に少ないとの調査結果などから、当該用途は直ちに廃止となった。
> https://cpprefjp.github.io/lang/cpp11/auto.html
> storage class "auto" (>>164)
K&Rも確認して、なるほど状況は分かった。autoはまあ許せる範囲か。

しかしこれ、autoとregisterがあったということは、
元々のコンセプトのデフォはもっと遅い外部メモリかよ。(コアメモリとか?)
0190デフォルトの名無しさん
垢版 |
2017/07/24(月) 00:18:45.69ID:gGHXalJd
>>189
autoは記憶クラスのデフォルト
省略可能で、むしろつける理由がなかったのでだれもつかわなかった

registerは変数をレジスタに置いたほうがいいというコンパイラへのヒント
しかし、コンパイラの改良が進みコンパイラに任せたほうが良くなった
人間による指定は不要なばかりか、むしろ最適化の邪魔になるのでコンパイラは無視するようになった
0191デフォルトの名無しさん
垢版 |
2017/07/24(月) 00:28:47.24ID:gGHXalJd
betterCは明確な定義はないだろうけど、
http://www.kijineko.co.jp/tech/betterc/1
で言われてるのが大体の認識なんじゃない?

(ライブラリの内部だけとかではなく)クラスとかを使うならそれはもうC++でしょ
メモリ管理とかvtableの仕様とかもしっかり確認する必要があるので適当にクラスを使うのはおすすめしない
0192デフォルトの名無しさん
垢版 |
2017/07/24(月) 01:07:47.78ID:8vEBfSZH
>>188
君はおそらくbetterC派だよな?(ただしほぼC++の)
ちなみにどういう組み合わせで使ってる?

GC言語と非GC言語ではそもそも組み方が違う。これは全く>>156の指摘どおりで、
しかもその後3匹馬鹿が現れて(159-161)彼の言い分が証明されてしまったw

さて関数型だが、どれくらい使っている?
俺はマトモには関数型をやってはいないが、それでも分かる範囲で言うと、
関数型言語はGC+型なし(型推論)が多い。
これに対しC++で関数型的アプローチを取ると、
型が爆発してtemplateで書くにしても大変でウザい。マジでvarくれよ、になる。
そして決定的に異なるのは資源のライフタイム管理で、GC言語はこれをやらない。
C++は一応自分でやることになっているのだが、
上記の通り、他関数型言語はGC前提なので組み方が異なっており、本来は参考にならない。
そしてC++のラムダはスタック方式に強引に載せている、なんとも中途半端なものだ。
これは全く他関数型言語のスタイルにはフィットしない。

だからC++で関数型アプローチをする現実路線としては、
C++をGC言語側に寄せる手法、つまり、
・ラムダは完全に関数オブジェクト扱いで、クロージャ変数は主にヒープ上
・スマポ、RAII徹底
という、いわゆる今のC++erが目指しているものに近くないと辛いはず。
ほぼC++寄りのbetterCというべきか。

君のスタイルはこれで合ってるか?合ってたらGCイラネってのも納得だ。
合ってなければ、どの組み合わせで使っているのか教えて欲しい。参考にする。
0193デフォルトの名無しさん
垢版 |
2017/07/24(月) 01:33:19.39ID:8vEBfSZH
>>190
autoがデフォか。なるほど了解だ。

>>191
> クラスとかを使うならそれはもうC++でしょ
> メモリ管理とかvtableの仕様とかもしっかり確認する必要があるので
ここはちょっと微妙。
まずvtableはプログラミングモデルとしては見えないので知っておく必然性はない。
(もちろん知っておいたほうがいい)
次にメモリ管理だが、C++に関してはclassとstructがほぼ同一なので、
C的に自前classをnewして自分でdeleteするという使い方も出来る。(A)
そうではなくて、デストラクタとかやりだすとややこしくなってくるが、(B)
最終的なC++erの目標、コンテナ等にも問題なく載るように、となると、
ムーブコンストラクタ等のC++的お作法を全て実装しておかないといけない。(C)
俺は(A)ならC、(B)ならbetterC、(C)ならC++と呼ぶね。

多分CとC++のコンセプトの根本的な違いは、
Cは厳密に「書いてないことはやらない」なのに対し、
C++は「出来る限り全自動を目指す」だと思う。
だから、「どこまで自動化しようとしているか」で測ればよいと思う。
0194デフォルトの名無しさん
垢版 |
2017/07/24(月) 02:16:26.89ID:gGHXalJd
>>193
うーん、その定義のbetterCは誰向けなんだ

初心者はC++の仕様(fwriteをvtableのあるクラスに使っちゃったり、newしたのをfreeしたりみたいな)にはまるだろうし
中級者はどこまでがbetterCなのかで混乱しそう(参照は?とかスマートポインタは?とかstringは?とか)
上級者はbetterにすることなく快適にCかC++で満足してそう

クラスとかデストラクタだけ使うみたいな方針で書かれてるソフトって何があるの?
0196デフォルトの名無しさん
垢版 |
2017/07/24(月) 02:59:30.11ID:RBhDn3mI
基本Cで行きたいけど、クロージャが作れないことだけはどうしようもないのでそこだけC++って考えるんだけど、上級C使いはクロージャいらんのだろうか?
0198デフォルトの名無しさん
垢版 |
2017/07/24(月) 05:34:01.73ID:L3SJIM9i
>>192
あ? 俺はバリバリC++使いだよ
ベターCをやっている認識は全くない

GCの話に型推論が出てくるのは悪いが意味わからん
varが欲しいんならtemplateは関係ない(脇役にすぎない)し
typeidやvoid*で特注品を作ればいい(COMとかみたいに)
ラムダ式もGCには関係ない(脇役にすぎない)し
ステートレスラムダみたいにスタックを使わないのまである

クロージャ変数はヒープ上って何だ?
auto closure{[&]{}};
auto heap{std::make_shared<decltype(closure)>()};
みたいなことすんのか?
ちょっと変態すぎて俺はついていけないなあ

俺はスマポ使うが生ポも普通に使う
状況で使い分けだ

RAIIつまりunwindingはGCとは全く無関係

RAIIだとかpImplだとかは一応知ってるが
そういのの原理主義にとらわれて
自分の頭で考えるのをやめたらいかんと思っている
0200デフォルトの名無しさん
垢版 |
2017/07/24(月) 10:04:09.53ID:UK7ErBJ5
>>189
ttp://zdnet2.cbsistatic.com/hub/i/r/2015/12/01/5e3590e7-725a-4d77-97cf-a64768d759a1/resize/1170x878/501ecb90884df8d47e13f80dffc6b0a7/42-53033264.jpg
水銀メモリ程度だろ
0201デフォルトの名無しさん
垢版 |
2017/07/24(月) 11:30:39.90ID:xutwb2BM
>>189
今だってレジスタに比べればメモリは十分に遅い
キャッシュや最適化技術の進化で通常の利用では考慮する必要性が薄いだけ
0203デフォルトの名無しさん
垢版 |
2017/07/24(月) 23:14:38.57ID:8vEBfSZH
>>194
俺的には「C++へのかぶれ具合」でC/betterC/C++を判断しようとしてる。
もちろんclassだけではなく、他の機能でも同様に判断して、
どれが一番近いか(どう表現すると一番誤解が少ないか)という話だ。

classはC->C++時におそらく最初に使用する機能であり、
classを使った時点でC++ならbetterCってほぼなくなるよ。
文法でしか判断出来ない馬鹿も最近は多いけど、本質は組み方でしょ。

> クラスとかデストラクタだけ使うみたいな方針で書かれてるソフトって何があるの?
知らんよ。
では逆に聞くが、作者やその他大勢がbetterCだと認識している有名OSSってあるのか?
あるのなら、みんなでそれを見に行けば終わる話だ。
なお俺はこれも知らんよ。
V8のコードがC++流じゃないって言っている奴はいるが、俺は詳細確認してないし。
http://steps.dodgson.org/bn/2008/09/07/
0204デフォルトの名無しさん
垢版 |
2017/07/24(月) 23:15:12.97ID:8vEBfSZH
>>198
全面マニュアル派か。まあそういう使い方も出来るわな。
俺は嫌いではないよ。
というかC派からは割と賛同されるだろうね。C++派からは異端視されるだろうが。

> クロージャ変数はヒープ上って何だ?
ステートレスとか、キャプチャがなければどうでもいいし、
或いは糖衣とか、ローカル関数っぽく「その場で」使うのなら全く問題ないが、
一般の関数型と同様に可搬的に使おうとすると、生存期間はスタックとは独立にする必要があり、
スタック上の変数を参照キャプチャするのはまずい。
結果、クロージャ内変数の実体はスタック上ではなくヒープに置かれることになる。
これをそう表現した。関数オブジェクトは常にこうだろ。

> RAIIつまりunwindingはGCとは全く無関係
ユーザ側には無関係だが、システム側は密接な関係がある。
GCを効率化する場合、参照カウントというのは一つの代表的手段で、
この場合、ランタイム上で同じことをやるからだ。
だから「全面RAII+shared_ptr」ってのはよく出来たGCと実行効率は同じになる。
だったら最初からGC言語使えよC++erはアホなのか?ってのが俺の感覚だ。
効率ガーとか言いながら完全な二度手間してるのはテメーらだよ、ってこと。
ただし君はこれには該当しない。生ポも普通に使う派だからだ。

まあここら辺の「どうとでも書ける」という懐の広さもC++の魅力ではあるのだろうけども。
本来は君のような全面マニュアル派が正統C++派でもおかしくないんだが。
そういうコンセプトの言語ではあるから。
ただ最近おかしくなっている(気がする)のはやっぱり意識高い系の暴走なのかな?
0205デフォルトの名無しさん
垢版 |
2017/07/24(月) 23:54:33.43ID:gGHXalJd
>>203
betterCの定義をしてる機関があるわけじゃないから人それぞれの定義で良いとは思う
俺の認識だとbetterCはC言語をC++モードでコンパイルする程度でもbetterCだと思ってる

#include <stdio.h>
int main(void){
int a = 1000000;
char *b = a;
}

Cだと(昔の寡黙なコンパイラは)そのまま通過。 C++だとエラーで停止。
今は警告出してくれるからこういう意味で使う理由はなくなったんだけどね
(ちなみに、VSで適当にプロジェクト作ると.cppファイルができてC++モードでコンパイルされる)

>classを使った時点でC++ならbetterCってほぼなくなるよ。
betterCってどういう意味合いにせよ現代だと初心者や趣味用で、もうほぼ存在しないってイメージだな
0206デフォルトの名無しさん
垢版 |
2017/07/25(火) 00:58:02.32ID:4zQ1WqHr
void sendMessage(const char *message) {
char c;
for (const char * p = message ; c = *p; p++)
SPI.transfer(c);
}

このようなメソッドを実行する場合、他の単語のアドレスと繋がってバグが出る恐れはありますか?

--例--
const char *cd = "CD";
sendMessage("pen");

アドレス 文字
1000000 p
1000001 e
1000002 n
1000003 C
1000004 D
0208デフォルトの名無しさん
垢版 |
2017/07/25(火) 07:58:05.16ID:HU3ZW3Qs
>>204
全面マニュアル派って何だ?


> スタック上の変数を参照キャプチャするのはまずい

え? え??
自動記憶域期間の変数以外の何をキャプチャするんだ?
クロージャ内変数がヒープ?? いったい何を言っている?
struct closure{
int& reference_to_capture;
closure(int* capture) : reference_to_capture(*capture) { }
void operator()() {
int internal_variable_of_closure;
}
};
こうなってるだけだぜ? どこにヒープが出てくるんだ?
0209デフォルトの名無しさん
垢版 |
2017/07/25(火) 07:58:22.10ID:HU3ZW3Qs
>>204

> システム側は密接な関係がある。

関係ねえって
some_class obj1;
jmp_buf jb1;
if(setjmp(jb1) == 0) {
obj1.construct(jb1);
some_class obj2;
jmp_buf jb2;
if(setjmp(jb2) == 0) {
obj2.construct(jb2);
obj2.destruct();
}
obj1.destruct();
}
こうなってるだけだぜ? どこにヒープが出てくるんだ?

> 最近おかしくなっている

C++11以後は正気に戻る努力をしてるぞ
0211デフォルトの名無しさん
垢版 |
2017/07/25(火) 16:02:02.91ID:fB9o/YjK
全面マニュアル派って何だろう。
悪魔的<>全面マニュアル派 みたいなニュアンスなんだろうか。

あんまり聞いたことない言葉だな
0213デフォルトの名無しさん
垢版 |
2017/07/25(火) 17:24:31.31ID:HU3ZW3Qs
<>を何と読むかで、C++寄りかBASIC寄りかわかるな
0215デフォルトの名無しさん
垢版 |
2017/07/25(火) 21:09:32.97ID:4zQ1WqHr
>>207
回答ありがとうございます
そのような仕組みになっているとは知りませんでした!
詳しく調べてみようと思います
0216デフォルトの名無しさん
垢版 |
2017/07/26(水) 15:57:11.34ID:rrdsxIH3
age
0217デフォルトの名無しさん
垢版 |
2017/07/27(木) 03:13:21.18ID:2TFMLUhu
>>206
ない。ダブルクォーテーションで括った場合は最後に \0 入るから。
0221デフォルトの名無しさん
垢版 |
2017/07/27(木) 13:22:08.96ID:HCdXe105
>>219
実名晒せよ、その下痢糞コンパイラ
0222デフォルトの名無しさん
垢版 |
2017/07/27(木) 18:39:00.21ID:ZSUs8tWw
素朴な質問で悪いが、C言語ってなんで多くが挫折すんの? JavaやC#なら、派遣でも生き延びていくのに・・・
0223片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/07/27(木) 19:09:17.24ID:LWV2Yf86
Cは、ポインターとかマクロとか落とし穴が多いんだよね。文字列を扱うのも難しいし。しかもセキュリティ上の欠陥がある。
0226デフォルトの名無しさん
垢版 |
2017/07/27(木) 19:17:38.76ID:/VCkXAgy
Cは環境依存が激しくて、何やるにもめんどくさいからだと思うな。
コピペプログラマが生きていけない。
0227デフォルトの名無しさん
垢版 |
2017/07/27(木) 19:24:01.58ID:pZs9Jdf1
ポインタとかもだけど、リストの使い方は知ってても作り方知らない子とか多そうだぬ。
0231デフォルトの名無しさん
垢版 |
2017/07/27(木) 19:49:40.05ID:pZs9Jdf1
ごめん。
ただの偏見。
JavaやC#はListクラスで連結リスト使えるから、作り方知らない若者多そうって思ってた。
そうかレアか。
安心した。
0234デフォルトの名無しさん
垢版 |
2017/07/27(木) 19:55:40.06ID:pZs9Jdf1
>>232
Cにリストって有ったっけ?
ANSI C止まりだから、最近のは入ってるのかな。

>>233
ホントごめん。
0236デフォルトの名無しさん
垢版 |
2017/07/27(木) 20:11:05.11ID:pZs9Jdf1
初期化リストってなんだろ。。。

あれかな。

int a[] = {1,2,3};

みたいな奴か?
あんなん、数が100とか200になったらループで初期化とかになるから違うかな。
JavaやC#もその辺は変わらなかった気もするけど。

まあいいや。
迷惑かけたみたいだし、ROMるわ。
0237デフォルトの名無しさん
垢版 |
2017/07/27(木) 20:28:21.83ID:DDfF3pSC
>>222
C言語は同じことをするのにもいろんな書き方ができる。無駄に難しくも書ける。
0238デフォルトの名無しさん
垢版 |
2017/07/27(木) 21:58:49.46ID:HCdXe105
セキュリティ上の欠陥がある。
セキュリティ上の欠陥がある。
セキュリティ上の欠陥がある。
0240デフォルトの名無しさん
垢版 |
2017/07/27(木) 22:02:42.86ID:DDfF3pSC
>>238
それ、欠陥じゃなくてそこまで理解して使用するものだから。本気で言ってんの?
0241デフォルトの名無しさん
垢版 |
2017/07/27(木) 22:09:44.77ID:HCdXe105
リーナス君ならどんな暴言吐いてくだろうかね
0242デフォルトの名無しさん
垢版 |
2017/07/27(木) 22:10:30.95ID:P8zzUyc0
リストの「作り方」って書いてあるのに初期化リストを持ってくる奴ってマジで近くにいてほしくないわ
0243デフォルトの名無しさん
垢版 |
2017/07/27(木) 22:20:24.47ID:KBJFSsyK
>>241
リーナスくんがメビウスに暴言?
0244片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/07/27(木) 22:22:40.74ID:LWV2Yf86
拳銃は危ないよなあ。原子炉の制御にC言語を使われたら、それは拳銃のように危ない。
Cを安全に使うには、安全装置とか哲学とか人工知能みたいなものが必要になる。
さもないとどこかの国みたいにハッキングされるだろう。
0245デフォルトの名無しさん
垢版 |
2017/07/27(木) 22:31:06.10ID:KBJFSsyK
>>244
原子炉の制御にC使ってるんじゃない?
むしろ、C以外の方が危ない気が。
0246デフォルトの名無しさん
垢版 |
2017/07/27(木) 22:34:40.88ID:pZs9Jdf1
>>238
今時の言語の例外処理の相当する部分も自分で書くからねぇ。
安全じゃないと言えばそうだし、元々プロ向け言語って言われてたし。
そこに憧れて火傷する人は昔から多かった。
(自分含む)
0248片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/07/27(木) 22:41:49.10ID:LWV2Yf86
あ、「C言語にセキュリティ上の欠陥がある」は、国家機密だからな。絶対に他のヤツに言うなよ。
0250デフォルトの名無しさん
垢版 |
2017/07/27(木) 22:43:40.04ID:HCdXe105
何がどう危ないのかわかってないやつが、ふわっと危機感もってるだけだろ

↓これと同じこと
http://zip.2chan.net/6/res/3050541.htm
0251デフォルトの名無しさん
垢版 |
2017/07/27(木) 22:52:42.24ID:9W3wkZQm
>>222
JavaやC#の方が簡単だから。

というか常識的に考えて分かるだろ。
世界は一旦Cで統一された。
その後出てきた言語はCの駄目なところを改善している。
それだけ。
0252片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/07/27(木) 22:56:04.01ID:LWV2Yf86
ダンディ坂野は危険。sprintfの代わりにsnprintf使え。セキュアバージョン(_s)を使え。とか色々あるよな。
0253デフォルトの名無しさん
垢版 |
2017/07/27(木) 23:06:09.60ID:wZCn8yX+
(σ・∀・)σゲッツ!!
0255片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/07/27(木) 23:41:43.77ID:LWV2Yf86
標準文字列関数では安全に書けない、安全に書ける人がほとんど居ない。これ、完全にワナですから。
0257デフォルトの名無しさん
垢版 |
2017/07/28(金) 00:08:15.50ID:YMdBIxtz
>>256
それはその通りだけど、個人が責任を取れる問題じゃないし。
0258デフォルトの名無しさん
垢版 |
2017/07/28(金) 00:14:30.22ID:QdICXo3Y
>>218
そうだった。Cだとエラーにならんな。C++だとエラー。
0259片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/07/28(金) 00:19:41.65ID:N/JNnipJ
文字列の連結だって安全にやろうとすれば、長さがわからない文字列にstrcatなんて使えないじゃん。
0262デフォルトの名無しさん
垢版 |
2017/07/28(金) 02:06:17.70ID:zRJpQFXf
1ビットの変数同士を比較する場合
& ビット演算子
&& 論理演算子
どっち使った方がいいの?

---例---
input mem_ack, cpu_ack
wire mem_ack, cpu_ack




if (~(mem_ack & cpu_ack))
state <= 2
--------
0264デフォルトの名無しさん
垢版 |
2017/07/28(金) 06:32:14.27ID:X5sNiV59
>>257
版権が会社にあるコードなら
もちろん会社の責任でテストするが
だから何?
0266デフォルトの名無しさん
垢版 |
2017/07/28(金) 10:25:49.30ID:X5sNiV59
おいVerilog使い、なぜここに来た?
0267デフォルトの名無しさん
垢版 |
2017/07/28(金) 10:43:31.58ID:KAkdfNJb
Cスレでは初期化リストは「書く」とか「記述」するものであって「作る」ものじゃ無いな
ツールやマクロで生成したり作ったりする事はあるが、そう言うまれな場合は「マクロで作る」と書くだろう
0270デフォルトの名無しさん
垢版 |
2017/07/28(金) 12:35:43.09ID:WvgdGCet
>>269
だから、データ構造としてのリスト構造しかないでしょって話では?
以下ネバーエンディングストーリー
0272デフォルトの名無しさん
垢版 |
2017/07/28(金) 13:28:06.90ID:KAkdfNJb
文法上でリストと呼ばれているものは初期化リストの他にもたくさんあるぞ
一々あげないが、パラメータリストとか
0276デフォルトの名無しさん
垢版 |
2017/07/28(金) 18:33:35.00ID:2hIYBPjn
>>269
>>231
0278デフォルトの名無しさん
垢版 |
2017/07/28(金) 18:55:04.96ID:mbT3OJMo
1からの定義というか
0からではないんだよね?というか
まぁそのへんフワフワだけど

学校でプログラミング習ってるやつらは
一回はそれ「作らされてるから」
今でも作れって言われたら作れると思う
0281デフォルトの名無しさん
垢版 |
2017/07/28(金) 19:14:48.96ID:0EVBlpnp
脱初心者の登竜門の定番だね
自己参照構造体とポインタを理解していればそれほど難しくはない
0282デフォルトの名無しさん
垢版 |
2017/07/28(金) 19:17:50.96ID:LlfbS2K5
えちょっと待ってジェネリックなリストとかじゃなくて、doubleのリストとか、なんか自分で決めた型のリストとかだよね?
初心者向けのCの本で書いた記憶があるんだけど、最近は載ってないの?
0283デフォルトの名無しさん
垢版 |
2017/07/28(金) 19:21:50.85ID:/bI4c4xS
苦CとやさしいCには載ってなかったな。
自分もCのアルゴリズム本でリストは覚えたし。
0286デフォルトの名無しさん
垢版 |
2017/07/28(金) 20:04:12.64ID:qWRZaL/E
>>277
struct List_t {
struct List_t *Previous;
struct List_t *Next;
double Data;
};
のDataの型変えるだけだし
まあいろんな型が必要だとテンプレートが欲しくなるけどマクロでもそこそこ行けるしね
0288デフォルトの名無しさん
垢版 |
2017/07/28(金) 20:06:46.98ID:SfCHZxYK
そこはテンプレートが遅くなる要因だから、性格の違いって事で。
0290デフォルトの名無しさん
垢版 |
2017/07/28(金) 20:21:38.71ID:SfCHZxYK
型検査引っ掛からなくなるんだから、実用なら必要な型でリスト作らんと怖いだろ。
元々かっちり作る用途向けで、そう言うのはどうしてもって時だけ。
0292デフォルトの名無しさん
垢版 |
2017/07/28(金) 20:33:05.95ID:WViVOgsq
いずれにしろリストなんて簡単
setになると途端にレベルが上がる
それこそ、
使えても作れない人は多い
0293デフォルトの名無しさん
垢版 |
2017/07/28(金) 20:50:39.02ID:KAkdfNJb
>>280
バーカ、それらは「記述」するもので、「作る」ものじゃねーと言ってるだろ

わかんねーのか死ねバカ
0297デフォルトの名無しさん
垢版 |
2017/07/28(金) 21:12:41.92ID:SfCHZxYK
LL用のライブラリCで書いたりとかで普通に書くだろが。
0298デフォルトの名無しさん
垢版 |
2017/07/28(金) 21:21:31.63ID:Mk6h7bQQ
ならLLで全部やれ。
Cでやるのなら主に高速化なのだから、高速に演算できるようにあらかじめLL言語側で並べ替えるだろ。
0299デフォルトの名無しさん
垢版 |
2017/07/28(金) 21:26:15.12ID:SfCHZxYK
リストで並べ替え?
そもそも、その並べ替えも遅いからCで。。。
どこから突っ込んで良いのよ。。。
0301デフォルトの名無しさん
垢版 |
2017/07/28(金) 21:32:03.07ID:SfCHZxYK
LightwaitLanguageの略で、PythonとかRubyとかの総称。
趣味グラマ含めて、LL知らない奴に初めて会ったわ。
0303デフォルトの名無しさん
垢版 |
2017/07/28(金) 21:43:29.87ID:0EVBlpnp
データ間の関係が直線構造のリストはこれといった使いどころを見つけるのが難しいのはまあ分かる
階層構造のバイナリツリーや網目構造のグラフにまで拡張するといろいろ応用範囲が広がる
0306デフォルトの名無しさん
垢版 |
2017/07/28(金) 22:09:25.05ID:wtp1eGJk
おれの感覚がズレてるのかと思ったら、英語のwikipはそのままの意味だな。
LL言ってのは日本だけだという。こんなのバズワードでいいよ。

> A lightweight programming language is one that is designed to have very small memory footprint,
> is easy to implement (important when porting a language), and/or has minimalist syntax and features.
0308デフォルトの名無しさん
垢版 |
2017/07/28(金) 22:18:36.85ID:Mk6h7bQQ
>>299
エアプ死ね。

> そもそも、その並べ替えも遅いからCで。。。
LL言語側のリスト等の物理配置は公開されてないんだから、これは無理だろ。
仮に公開するにしても当然アクセス用API関数であって、内部構造は隠蔽されるだろ。
0311デフォルトの名無しさん
垢版 |
2017/07/28(金) 22:53:05.56ID:Mk6h7bQQ
>>310
> 拡張モジュールをサポートするため、Python API (Application Programmer’s Interface) では
> 一連の関数、マクロおよび変数を提供していて、
> Python ランタイムシステムのほとんどの側面へのアクセス手段を提供しています。
> Python API は、ヘッダ "Python.h" をインクルードして C ソースに取り込みます。
お前は日本語が読めないということが分かった。

それで、お前はいつ>>286みたいな記述が必要なんだ?
普通はPyxxxを使ってPython側から読み出して、
C側の演算高速化用フォーマット(通常はただの配列)に最初から変換するんだよ。
お前はC側でもリストを実装してPythonと同じ事をするアホのようだが。
0313デフォルトの名無しさん
垢版 |
2017/07/28(金) 22:59:57.49ID:wtp1eGJk
>>309
本気で言ってるのか?日本語ドキュメントなんて限られてるから技術者はググるときは英語だろう。
しかもwikipの日本語のIT用語の項目なんてほとんどないぞ。日本はIT後進国だから。中国語のほうが充実してる。
その中にあってLLだけば日本語版だけが異常に充実してるという。
まぁ、日本語でググったけどLL言ってるのはWEB2.0、クラウド、AI言ってる輩だね。
C言語使わない、使えない輩だからおれには接点はないわ。どっちがズレてるかよく考えてほしいね。
0314デフォルトの名無しさん
垢版 |
2017/07/28(金) 23:05:09.92ID:wndodTEE
とりあえずお前は「無知でごめんなさい」から始めようか w
> LL言語側のリスト等の物理配置は公開されてないんだから、これは無理だろ。
> 仮に公開するにしても当然アクセス用API関数であって、内部構造は隠蔽されるだろ
0316デフォルトの名無しさん
垢版 |
2017/07/28(金) 23:11:29.26ID:Mk6h7bQQ
>>314
> 仮に公開するにしても当然アクセス用API関数であって、内部構造は隠蔽されるだろ
お前マジで日本語読めないのな。Python.hってまさにこれなんだが。
日本語読めない奴と議論するのは無理だからもう諦めるが。

>>313
LLって海外でも普通に通じるよ。
0319デフォルトの名無しさん
垢版 |
2017/07/28(金) 23:20:19.95ID:wtp1eGJk
>>315
そうなんだよ。聞いてくれよ。怒り心頭だよ。
日本語のwikipのLLの内容はマジで恥ずかしい。こんなアホ議論してるのは世界で日本だけ。

> この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。
> この節には独自研究が含まれているおそれがあります。
> 日本独自の用語・分類への批判
> 比較対象がないことへの批判
> 誤解を招く用語であるという批判

なんだこれ。こんな完全なバズワードを偉そうにLLすら知らないのかって言われたんだよ。

こんな用語使ってる輩の脳がLightWeightなのに。
0320デフォルトの名無しさん
垢版 |
2017/07/28(金) 23:26:08.74ID:Mk6h7bQQ
まあ俺が突っ込みたかったのは、

> 連結リストを一から作れるってそんなにいないんじゃないかな (>>277)
これはLL言語(=習得が簡単な言語=馬鹿用言語)ならそうだが、
Cなら作れない奴は殺される。ただしそれ以前に、

> 苦CとやさしいCには載ってなかったな。 (>>283)
のように、そもそもCではリストを使う機会はあまり無い。
だから載ってないのも妥当。
0321デフォルトの名無しさん
垢版 |
2017/07/28(金) 23:32:35.71ID:e9WYMOex
仮にバズワードとしてもわざわざ2chで知らないアピールせずに黙ってググれば馬鹿にされることもなかったろうに
0322デフォルトの名無しさん
垢版 |
2017/07/28(金) 23:42:53.57ID:wtp1eGJk
確かにLL知らないで馬鹿にされた。だが今はもう違う。おれが馬鹿にする番。

LLなどという日本限定バズワードを使う胡散臭い輩がC言語スレで能書き垂れてんじゃねーよ、
英語もできんLightWeigt脳の低スキル技術者どもが。
0323デフォルトの名無しさん
垢版 |
2017/07/28(金) 23:58:33.49ID:Mk6h7bQQ
>>322
「LL(言語)」ってのは通じる言葉だ。だから使う事自体は悪くない。
(正確にはLL言語だと「言語」が被るのだが、俺は「言語」付けた方が通じやすいと思う)

ただし通じる界隈は違っていて、LL言語と纏めて呼ばれるのは通常、
Perl/Python/Ruby/JavaScript等だから、ここら辺のユーザーなら確実に通じる。
実際、Perl/Python/Rubyなんて使用範囲もできることも同じで、区別する必要ないだろ。
だから纏めてLL言語と呼ばれるし、彼らもそれに慣れている。
C/C++/Java/C#等はこれらとは全く違うため、
この界隈では「LL言語」という言葉が使われることは少ない。
それだけ。
0326デフォルトの名無しさん
垢版 |
2017/07/29(土) 00:16:53.64ID:vlC06Wfm
(lol)

こうすると顔文字のようだ。
0327デフォルトの名無しさん
垢版 |
2017/07/29(土) 00:22:54.09ID:gxbujSGs
>>324
いやそれはちょっと違う。日本語版Wikiはちょっと広めに取りすぎている。
https://ja.wikipedia.org/wiki/%E8%BB%BD%E9%87%8F%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E
実際のところ、俺の感覚では、以下だ。
Perl/Python/Ruby/JavaScript <-100%LL言語に含まれる
PHP/Lua <- LL言語に含める奴もいる。割合は50%位か?
AWK/bash <- LL言語に入れる奴はいない。これらはスクリプト言語と呼ばれる。

旧来の「スクリプト言語」はフルセットの機能を持っていなかった。
ところがPerl以降はプログラミング言語としても遜色なくなってきている。
とはいえC++やJavaとは明らかに違う。
ということでこれらを呼ぶために生まれた言葉が「LL言語」だ。(と思う)
よく分からなければ「Perl/Python/Ruby/JavaScript/その他」の理解で問題ない。
0328デフォルトの名無しさん
垢版 |
2017/07/29(土) 00:27:01.78ID:E9tUO4Ko
LLという日本語だと思えば別に恥ずかしくないだろうに。
0329デフォルトの名無しさん
垢版 |
2017/07/29(土) 00:29:11.14ID:vlC06Wfm
これからは BASIC

10 PRINT "ぷ"
0330デフォルトの名無しさん
垢版 |
2017/07/29(土) 00:31:57.73ID:gp3BUyJn
C#だろうとJavaだろうとFotranだろうと多くのライブラリはC、C++で書かれてる。
スクリプト系言語に限定して議論する理由は?
0334デフォルトの名無しさん
垢版 |
2017/07/29(土) 00:48:16.16ID:gxbujSGs
>>330
何が言いたいのか分からんが、エスパーするとこれで答えになるか?

LL言語 ⊂ (君の言う超広義の)スクリプト言語

C#/Java/FortranをLL言語と呼ぶ奴はいない。
つか、知らない言語の話なんてしないんだし、
自分の知っている言語のどれがLL言語と呼ばれるかフラグ立てておけば済む話だぞ。
出現頻度だけで言えば、LL言語≒Perl/Python/Ruby/JavaScriptでいい。
0335デフォルトの名無しさん
垢版 |
2017/07/29(土) 01:53:34.44ID:YB2Y7dkJ
LL言語という物の中身は分かりましたが
そのように分類する事で、
得るものがあるようには感じませんでした
0337デフォルトの名無しさん
垢版 |
2017/07/29(土) 04:04:40.21ID:TpFswTs0
>>295
バーカ C言語すれだから初期化リストだと思ったとか寝言ほざいてるID:tCxrViSfのバカさを指摘するために
他の文法要素でリストばたくさんあるぞと指摘してやったんだろ

死ねバーカ
0338デフォルトの名無しさん
垢版 |
2017/07/29(土) 05:24:03.96ID:sjwibnJ3
既存のCのコードをUnicode対応に書き直したいんだけど、
char を wchar_t に置換したり、文字列リテラルにプレフィックス付けてくれたり、
関数を wchar.h 版にしてくれる便利なツールは無いですか?

もしくは予約毎と文字列リテラルだけを対象にしたいので、
パースして品詞情報を出してくれるスクリプトなんかあれば改造するかも。
0340デフォルトの名無しさん
垢版 |
2017/07/29(土) 05:34:46.32ID:u24XiLoF
>>337
> 他の文法要素でリストばたくさんあるぞと指摘してやったんだろ
そんなもんは既に>>267で指摘されてるのに周回遅れでなにドヤッてんだよ w
0345デフォルトの名無しさん
垢版 |
2017/07/29(土) 07:55:34.60ID:TpFswTs0
>>340
バーカ それもオレなんだが
往生際悪く日が変わってID変わったID:WViVOgsqが絡んできたから止めを刺してやったに過ぎないが
バカには理解できないようだ さすが救いようのないバカ
0348デフォルトの名無しさん
垢版 |
2017/07/29(土) 08:09:17.20ID:N+YJafLA
ていうか、
>>228の書き込み自体が皮肉なわけだけど
C言語自体にリスト構造なんて物はないっていう
本気で初期化リストだと主張してると思ったわけじゃ無いよな?
「初期化リスト?」だし
0351デフォルトの名無しさん
垢版 |
2017/07/29(土) 08:15:35.54ID:zJVnUUbX
>>345
ひょっとして同じこと繰り返してるバカって言われてることに気づいてないのか?
>>265>>280 でわざと同じように指摘してやったのに w
0353デフォルトの名無しさん
垢版 |
2017/07/29(土) 08:25:35.65ID:N+YJafLA
>>289
使う側でいちいちメモリ確保、解放をするの?
それとも、Data自体が実体でキャストして使う?

いずれにしろ使いにく過ぎる
0355デフォルトの名無しさん
垢版 |
2017/07/29(土) 08:26:55.49ID:ULoSSJ2b
>>353
いちいちmalloc()/free() するんだよ
malloc()/free() でミスするようでは仕事にならん、というか検査用ラッパぐらい手持ちでもっとけよ
0357デフォルトの名無しさん
垢版 |
2017/07/29(土) 08:31:19.71ID:ULoSSJ2b
連結リストの中に連結リストとか自由にやりたいのだったら void *data 一択だよ
0359デフォルトの名無しさん
垢版 |
2017/07/29(土) 08:33:04.08ID:zJVnUUbX
>>354
> まあいろんな型が必要だとテンプレートが欲しくなるけど
マクロでもそこそこ行けるしね
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
0360デフォルトの名無しさん
垢版 |
2017/07/29(土) 08:35:18.93ID:ULoSSJ2b
どっちが書きやすいか試せば一発だが‥これは二分木でも一緒
誰か三重の連結リストなり二分木なりを自分のやりかたで書いてくれないか?
0361デフォルトの名無しさん
垢版 |
2017/07/29(土) 08:36:09.59ID:N+YJafLA
リストのノードとは別にメモリ確保が必要なら、パフォーマンスにも影響するし
0362デフォルトの名無しさん
垢版 |
2017/07/29(土) 08:40:17.35ID:N+YJafLA
腐るほど使うなら使いやすくないと

メモリ確保、解放を自分でやれ?
あり得ない
0364タグもいるかな
垢版 |
2017/07/29(土) 08:41:31.77ID:zJVnUUbX
>>357
せっかくの静的型付を安易に捨てるのはバカにありがちな行動
struct List_t {
struct List_t *Previous;
struct List_t *Next;
union {
struct List_t *Child;
double Double;
} Data;
};
0365デフォルトの名無しさん
垢版 |
2017/07/29(土) 08:44:54.55ID:N+YJafLA
>>363
使いにくくてバグの元でパフォーマンスも悪いモジュールを強要する

お前とは仕事をしたくない
0366デフォルトの名無しさん
垢版 |
2017/07/29(土) 08:52:21.05ID:ULoSSJ2b
>>364
出た!union 野郎が出た!
そんなところで共用体をつかってコードを一本化できるのか?続きを書いてみろよ
0370デフォルトの名無しさん
垢版 |
2017/07/29(土) 09:20:46.96ID:zJVnUUbX
>>366
続きってなんだよ w
2分木なら双方向リストと同じだぞ w
struct List_t {
struct List_t *Left;
struct List_t *Right;
double Data;
};
0373デフォルトの名無しさん
垢版 |
2017/07/29(土) 09:29:28.03ID:dTbBo9oQ
>>364
お、標準ライブラリのソート全否定か?
Cではちょいちょい捨てるよちょいちょいね
常に型を保存したかったらC++使うしかない
0375デフォルトの名無しさん
垢版 |
2017/07/29(土) 09:43:22.80ID:N+YJafLA
>>364>>370 も、何の構造?

親をたどれないとポインタを一個進めることも出来ない

C++でいうsetの話をしたわけじゃないの?
0379デフォルトの名無しさん
垢版 |
2017/07/29(土) 09:54:12.77ID:N+YJafLA
ポインタを進めたり戻したりする必要がなければ
親にリンクを張らなくてもいいけどさ

std::setと同等なものをイメージしたけど、
まったく違うものが突然出てきたわけね
0382デフォルトの名無しさん
垢版 |
2017/07/29(土) 10:08:25.24ID:RY+TGg1x
>>381
>>286 >>287 にある通り、previousとnextと書いてると、大抵は双方向リストを意味してるものだと取る
ここがleftとrightと書いてると、意味上は全く同じなんだけれども、単語の上からはまずは二分木を連想する
next一つだけだと、一番単純な連結リストであることを期待する
0384デフォルトの名無しさん
垢版 |
2017/07/29(土) 10:14:10.31ID:gxbujSGs
>>379
君以外はみんな「リスト」の話をしている。
君もそうだったのだがなぜか勝手に君だけsetだと言い出してる。

>>380
「リストの中のリスト」ってのは、配列で言うとジャグ配列、
つまりジャグリスト。(という言い方は普通しないが)

>>381
君の頭が悪すぎるだけ。
君以外はみんな噛み合っている。つまり、必要十分な説明はなされている。
つか、>>364,370を読めない奴が議論参加するな、という話でしかないが。

個人的には>>364でunionは使わない。マクロで量産だね。(手動テンプレート)
0385デフォルトの名無しさん
垢版 |
2017/07/29(土) 10:17:23.70ID:N+YJafLA
>>286は、
双方向を利用して作ったから名前が変なのかと思った
でも、追加したのが Child なのはどっちみち変だな
2分木だとしたら

>>370は2分木だろうけど、
これで何をしたいのかわからん
双方向と2分木が同じ発言の意味も不明
0391デフォルトの名無しさん
垢版 |
2017/07/29(土) 10:36:49.65ID:gxbujSGs
>>385
>>286は「双方向リスト」だぞ。名前もかなり妥当。
つか、君だけまったく付いて来れてないが。

> 双方向と2分木が同じ発言の意味も不明
抽象化して「ポインタの数」という意味で捉えると同じ、ってことだよ。
これについてこれてないのは、「抽象思考出来ない馬鹿」だね。最近はよく見かけるが。

>>387
いや、そういう意味だぞ。


ふむ、なるほど、君は「リスト」を作れない馬鹿のようだ。君は何言語使いなんだ?
C言語使いなら、ド頭>>230でも否定されている通り、普通はリスト程度ならサクッと作れる。
(ただしそもそもリストなんて使わないが)
0392デフォルトの名無しさん
垢版 |
2017/07/29(土) 10:37:38.60ID:zJVnUUbX
>>384
> 個人的には>>364でunionは使わない。マクロで量産だね。(手動テンプレート)
ん?
ノードに値とリストのどちらかを入れられるリストと言う要件だと思ったが?
0398デフォルトの名無しさん
垢版 |
2017/07/29(土) 10:47:50.62ID:N+YJafLA
>>391の上半分

トポロジーがまったく違う
よって必要な処理もまったく違う
ポインタの数も、普通は2分木は3方向にリンクを張る
0400デフォルトの名無しさん
垢版 |
2017/07/29(土) 10:58:06.68ID:N+YJafLA
>>370
結局これで何をしたいのかわからん

親へのリンクが無い、色が無い
って時点で汎用化とは程遠い
0401デフォルトの名無しさん
垢版 |
2017/07/29(土) 11:00:17.42ID:gxbujSGs
>>392
> ノードに値とリストのどちらかを入れられるリストと言う要件だと思ったが?
いや、そう明示されているわけではないよな?
次に、それが要件だったとして、或いは汎用化するために void* だろってのが皆の意見だ。
ここについては俺はいちいちキャストがウザいからデータはめ込み派(君と同じ)だが。
0403デフォルトの名無しさん
垢版 |
2017/07/29(土) 11:11:38.53ID:N+YJafLA
void* の問題はキャストもそうだけど
外部でメモリを管理する必要があるってところが大きいかと

多重リストだろうがunionだろうが
マクロでどうにでもなるんで
わざわざ不便な作りにする必要は無いかと
0404デフォルトの名無しさん
垢版 |
2017/07/29(土) 11:13:16.21ID:N+YJafLA
>>402
C++が使える環境なら素直にC++を使えって話だけど
いまだにCしか使えない環境ってのもあってね
0405デフォルトの名無しさん
垢版 |
2017/07/29(土) 11:14:41.46ID:eThbJX9n
(単方向)リストは先頭から終端の方向へ順にポインタを辿る、逆方向のポインタは無くても可(逆方向があるのは双方向リスト)
二分木は根から葉の方向へ再帰でポインタを辿る、親方向のポインタは無くても可(むしろ無いのが普通)
0406デフォルトの名無しさん
垢版 |
2017/07/29(土) 11:16:39.02ID:gxbujSGs
>>398
何度も言っているが君だけ付いて来れてない。いちいち全部なので端折るが、

> ポインタの数も、普通は2分木は3方向にリンクを張る
これについては既に回答済みで、引用すると、
> 根や親を各ノードに持つか別に管理するかは要件次第 (>>378)
で、全くその通りだ。

俺は君が何故これを理解出来ないのかもわかるが、
君は俺の質問に答える気がないようだから、教えてやらないことにする。
馬鹿のままで死ね。
0407デフォルトの名無しさん
垢版 |
2017/07/29(土) 11:16:58.24ID:N+YJafLA
Cってパフォーマンスを落としてまで汎用化するような使い方ってあまりしないしね
基本組み込み用

リストも片方向で済むなら片方向にするし、
そもそもリスト構造自体頻繁に使うようなものじゃない
0408デフォルトの名無しさん
垢版 |
2017/07/29(土) 11:18:34.04ID:N+YJafLA
だから、
Cで挫折する理由が「リスト」とかいう主張、
まったくチンプンカンプンで
0409デフォルトの名無しさん
垢版 |
2017/07/29(土) 11:19:32.62ID:zJVnUUbX
>>401
> いや、そう明示されているわけではないよな?
で、君は
> 連結リストの中に連結リストとか自由にやりたい
をどう解釈してマクロでやるって言ってるの?

> 次に、それが要件だったとして、或いは汎用化するために void* だろってのが皆の意見だ。
皆の意見? w
0412デフォルトの名無しさん
垢版 |
2017/07/29(土) 11:26:20.62ID:gxbujSGs
>>409
俺なら型ごとにstructを用意、つまりテンプレートと同じことをする、ということ。

ただしvoid*にしろって言う意見も分かるし、C的にはそれもありだと思うぞ。
ここら辺は好みの範囲だとは思うが。
0413デフォルトの名無しさん
垢版 |
2017/07/29(土) 11:30:42.93ID:N+YJafLA
>>405
無いのが普通って
世の中を知らなすぎる

汎用のコンテナとしての2分木で
そういう実装な例があるなら
示していただけると
出来れば有名どころで

親がないと、ポインタを一個進めるのもコストがかかる
挿入した時に左右のバランスを保つのにもコストがかかる

もちろん、そういう処理がいらない
コンテナとして使わないような
特殊用途の2分木ならいくらでもあるだろうけど
今はコンテナの話だよね
0414デフォルトの名無しさん
垢版 |
2017/07/29(土) 11:30:53.18ID:zJVnUUbX
>>412
マクロの話がよくわからんがまあいいや
あんたが要件どう解釈したかもわからんからどうしようもないしな
0416デフォルトの名無しさん
垢版 |
2017/07/29(土) 11:36:13.86ID:gxbujSGs
>>414
インラインマクロでゴリゴリに対応するのではなくて、
structの宣言部分をマクロ化して、
MyList(MyListDouble, double)
MyList(MyListInt, int)
で量産する、ということ。つまりテンプレートだろこれは。
0417デフォルトの名無しさん
垢版 |
2017/07/29(土) 11:44:36.57ID:N+YJafLA
コードサイズが大きい時は、
名前と型をdefineしてからinclude
とか良くやる
defineやincludeは上のMyListみたいなマクロで
0422デフォルトの名無しさん
垢版 |
2017/07/29(土) 12:13:39.65ID:14mINgXT
ていうか
コンテナじゃない2分木はあるけど、
コンテナじゃないリストなんて無いだろ

初期化リストか?
0424デフォルトの名無しさん
垢版 |
2017/07/29(土) 12:24:27.13ID:vlC06Wfm
このスレは1000までリストの話で埋まりそうだね。物凄いスピードで。
0425デフォルトの名無しさん
垢版 |
2017/07/29(土) 12:35:38.98ID:gxbujSGs
>>418
俺は>>286派だって事。(>>370もあり。)
>>364は無し。てかどうでもいいところでunion使ってもろくな事にならないし。
void*も無し。主にキャストが面倒だから。でもunionよりはvoid*を選ぶ。

とはいえここら辺は好みの問題でしかないが。
俺なら、型固定>void*>unionだね。
0427デフォルトの名無しさん
垢版 |
2017/07/29(土) 12:51:34.43ID:QBDV3ETd
あんなあおまいら・・
これ、コレクションをライブラリとして持てという
あるいはそれをどう作るかという話なんだわ
例をあげれば、AppleのCFMutableArray
Win32ならなんだ?
0429デフォルトの名無しさん
垢版 |
2017/07/29(土) 13:09:06.48ID:TYuY3Yui
>>425
> 俺は>>286派だって事。(>>370もあり。)
> >>364は無し。
要件違うものを持ってきてそんなことを言われてもなぁ

> てかどうでもいいところでunion使ってもろくな事にならないし。
> void*も無し。主にキャストが面倒だから。でもunionよりはvoid*を選ぶ。
unionになんかトラウマでもあるのか?
まあ好みの問題と言うのには同意する
0431デフォルトの名無しさん
垢版 |
2017/07/29(土) 13:11:30.55ID:gxbujSGs
>>427
C的には、
> コレクションをライブラリとして持て
いらんわ
> あるいはそれをどう作るか
必要なら自分で作るし苦労もしない

だと思うぞ。もちろんC++使ってもいいし、今更だろ。
ただそれ以前に、現実として、動的キー(辞書)が必要な用途はあまりないだろ。
Cの担当範囲なら、ほぼ全ての場合で構造体(静的キー)と配列で間に合う。(鶏と卵ではあるが)
もちろんこれら含めて汎用化したほうが楽だが、その分遅いのがLL言語な訳で。
0433デフォルトの名無しさん
垢版 |
2017/07/29(土) 13:27:26.48ID:gxbujSGs
>>429
> unionになんかトラウマでもあるのか?
いやお前少しは他言語もやれよ。
unionは他言語では廃止されている。理由はいろいろまずいから。
ググれば出て来るからやってみ。

まあそれ以前に君はunionの使い方を間違っている。
あれは、リード/ライトで型が違うときに使うものであって、
型違いだがサイズが同じだから突っ込む、という為の物ではない。
というか後者ならvoid*で受けていちいちキャストするというのが正しい。
しかしこれだと型チェックできなくなるからテンプレートにしろというのがC++だ。
0439デフォルトの名無しさん
垢版 |
2017/07/29(土) 13:41:10.88ID:gxbujSGs
>>432
Cは大前提としてそれがあるんだよ。
不満があればC++で大体事足り、それがbetterCだ。(俺の認識では)
つまり、リストが欲しいけど自分で作るのは面倒、だったらここだけC++使うか、って場合。
0440デフォルトの名無しさん
垢版 |
2017/07/29(土) 13:53:49.23ID:E5EEKRTu
>>433
> あれは、リード/ライトで型が違うときに使うものであって、
> 型違いだがサイズが同じだから突っ込む、という為の物ではない。
まあ確かにお前はunion使わない方がいいわ w
一応言っておくけど読み書きで型が違ったら値は保証されないよ
0442デフォルトの名無しさん
垢版 |
2017/07/29(土) 14:04:10.84ID:uK1pt60X
unionて、メモリを節約できるのとそのメンバが同時に使われないってことがわかりやすいくらいだよな。
>>364もべつにunion使わなくてもいいわけだし。
0444デフォルトの名無しさん
垢版 |
2017/07/29(土) 14:20:45.06ID:gxbujSGs
>>440
> 一応言っておくけど読み書きで型が違ったら値は保証されないよ
値の保証はされてるだろ。
処理系に依存する(エンディアンが見えることが多い)というだけで。

いずれにしても、これが問題だと思う>>440のような馬鹿はunionを使うべきではない。
こんなの当たり前だろ、と理解できる奴だけがunionを使っていい。
そして現実として、unionを使わなければならない機会はほぼ無いから他言語では廃止されてる。
例えば、>>441とかは今なら継承で実装される。
0445デフォルトの名無しさん
垢版 |
2017/07/29(土) 14:21:28.04ID:ULoSSJ2b
union を使ったら見通しよく書けるのか?そうなのか?不思議な気分だ
よかったらサンプルコードを書いてほしい
0448デフォルトの名無しさん
垢版 |
2017/07/29(土) 15:15:38.90ID:ULoSSJ2b
>>447
それだけではわからないよ、実際に union の Child や Double の値を設定するところを見たいものだ
個人的にはうまくいかないと思っている
たぶんマクロを使うことになるし、マクロを使うんだったら共用体なんか使わないほうがよかった、という結果になりそう
0450デフォルトの名無しさん
垢版 |
2017/07/29(土) 15:35:05.11ID:14mINgXT
unionは、
普通に同時使用しないメンバに対して使われることもあるが
実際に使う環境を把握した上で
同じアドレスに対して複数のアクセス方法を
用いる場合にも良く使われる

一番あるのが、レジスタの定義
チップメーカーなどがヘッダとして提供したりする
ビットフィールドアクセスやワードアクセスなど、
複数のアクセス方法を使えるようにするため
あとは複数の型へのポインタをunionで定義したり
0452デフォルトの名無しさん
垢版 |
2017/07/29(土) 15:41:58.78ID:14mINgXT
メモリをケチる為のunionは
時代とともに使う頻度は減っているが

複数のアクセス方法の為のunionは普通に使われる
もちろん環境依存コード
例えばWindows APIのLARGE_INTEGERも
この使い方のunion
0453デフォルトの名無しさん
垢版 |
2017/07/29(土) 15:46:20.38ID:gp3BUyJn
アセンブラじゃ共用が当たり前。だからCにある。それだけ。
x86のレジスタはまんま共用体。ワイヤー数、バス幅に制限があるんだから共用して当たり前。
本来、ハードの仕様を実装するためのもの。
0455デフォルトの名無しさん
垢版 |
2017/07/29(土) 16:11:44.21ID:gxbujSGs
>>449
まず大前提としてコードを再利用する仮定だ。
ベタにコピペした場合は関係ない。

>>364のunionは今なら継承で実装されることが多いはずだ。
当然Dataはテンプレート化され、
Previous,Nextへの書き込みは基底クラス、Dataへの書き込みは派生クラスに配置される。
これがC++的解決。

unionだと一見何でも書けるように見えるが、
実際は派生型を手動で扱っているのと同等なので、
共通書き込みルーチンを用意できない。これが>>448の言う、
> 個人的にはうまくいかないと思っている
で、俺もそう思う。
マクロを強引に使えば出来るかもしれんが、それなら上記C++的解決の方がマシ。

>>452
> メモリをケチる為のunionは
> 時代とともに使う頻度は減っているが
これって>>364の使い方、ということでいいのか?
それならC++的に言えば、
糞だからクラステンプレートと継承で対応できるようにして廃止した、というところだろう。

> 複数のアクセス方法の為のunionは普通に使われる
多分これ以外のunionは必要ない。
そして俺はこれについてはリート/ライトで型が違っても値が保証されていると認識している。
(一応言っておくが同じ値が読めるという意味ではない。《>>446の馬鹿は多分この勘違い》
プログラマから見て値が確定的、という意味だ。)
仕様に詳しい奴がいればよろしく。
0456デフォルトの名無しさん
垢版 |
2017/07/29(土) 16:26:09.19ID:mj0H/MXI
初期化リストの話は終わったのか?
0458デフォルトの名無しさん
垢版 |
2017/07/29(土) 16:51:08.52ID:ULoSSJ2b
>>453
たしかに遥か昔の DOS コールラッパではそうしていたけれども…なんか違うきがしないでもない
共用体の適切な使い方はおもいつかないね…
0462デフォルトの名無しさん
垢版 |
2017/07/29(土) 17:29:39.44ID:Xv3aO8mX
トリコロシ
0464デフォルトの名無しさん
垢版 |
2017/07/29(土) 17:35:29.83ID:zJVnUUbX
>>461
まあそうだね
もっと早くにその突っ込み入るかと思ったけどunionをとうとうと語る奴とか低レベルすぎて笑うしかない状態なのよ w
0465デフォルトの名無しさん
垢版 |
2017/07/29(土) 17:37:42.13ID:14mINgXT
>>364は自由な型じゃない
doubleのリスト
doubleのリストのリスト
doubleのリストのリストのリスト
...


他の型が必要ならunionに追加する
0466デフォルトの名無しさん
垢版 |
2017/07/29(土) 17:41:42.52ID:gxbujSGs
>>461
その場合も今は継承で実装されるのが普通で、それで何も問題ないだろ。
だからもう共用体は古いんだよ。それが俺の言った、
> JavaやC#の方が簡単だから。
> その後出てきた言語はCの駄目なところを改善している。(>>251)
であって、JavaもC#も共用体は廃止済み。
0467デフォルトの名無しさん
垢版 |
2017/07/29(土) 17:45:12.94ID:gp3BUyJn
JavaもC#もハナからOSやドライバを書く気ない。もちろんPascalで書く馬鹿もない。頓珍漢。ナンセンス。
0468デフォルトの名無しさん
垢版 |
2017/07/29(土) 17:45:49.99ID:eThbJX9n
#include <stdio.h>
typedef union {
unsigned char byte;
struct {
char bit0:1;
char bit1:1;
char bit2:1;
char bit3:1;
char bit4:1;
char bit5:1;
char bit6:1;
char bit7:1;
} bit;
} SFR;

int main(void) {
SFR sfr;
sfr.byte = 0x00; // All Clear
sfr.bit.bit7 = 1; // bit7 set
printf("%x", sfr); // sfr = 0x80
return 0;
}
0470デフォルトの名無しさん
垢版 |
2017/07/29(土) 17:55:22.53ID:gxbujSGs
>>467
JavaOSェ、、、

ただまあ、ハードが見えるレベルをC以外の言語で書くのは狂気の沙汰なのは同意する。
とはいえ、旧来のイベントオブジェクトがunionで出来ているのは、
・それがCの時代だったから
・古いから
であって、便利だからではない。
実際、新しいAPIは全部継承で実装されてるだろ。そういうことだよ。
0473デフォルトの名無しさん
垢版 |
2017/07/29(土) 18:01:47.45ID:gxbujSGs
>>471
つかお前C#知らんだろ。
それはレガシー用であって、レガシー以外でそれ使ったら殺されるぞ。
0476デフォルトの名無しさん
垢版 |
2017/07/29(土) 18:10:06.13ID:vlC06Wfm
union 使っても
いいじゃないか
C言語だもの
0478デフォルトの名無しさん
垢版 |
2017/07/29(土) 18:17:23.76ID:gxbujSGs
>>474
だから、レガシー以外は使われてないんだよ。
とはいえ、OSのAPIが共用体を返してくるんだから、
それを受け取れないのはまずいから手段も用意してはある、という話で。

>>364はC++/Java/C#なら継承で実装される。
その他の言語でも大体こうなる。理由は共用体がそもそも無いから。
俺は逆に、何故お前らがunionを使いたがるのかが分からんね。メリットは何もないだろ。

>>477
レガシー=obsoleteという意味ではないぞ。
0479デフォルトの名無しさん
垢版 |
2017/07/29(土) 18:26:02.72ID:eThbJX9n
C言語での組込み開発では共用体は普通に使われてる
>>468で示唆したような特殊機能レジスタの多重定義などが代表例
0480デフォルトの名無しさん
垢版 |
2017/07/29(土) 18:26:39.61ID:vlC06Wfm
レガC
0482デフォルトの名無しさん
垢版 |
2017/07/29(土) 18:27:46.17ID:vlC06Wfm
>>479
てか、あると便利だよね。
よくわからないまま使うとハマるだけのことで。
0484デフォルトの名無しさん
垢版 |
2017/07/29(土) 18:29:51.58ID:zJVnUUbX
>>478
> レガシー=obsoleteという意味ではないぞ。
バカってなんで言ってもないことに突っ込むんだろう?
みずから恥の上塗りすることもないだろうに w
0486デフォルトの名無しさん
垢版 |
2017/07/29(土) 18:32:39.97ID:eThbJX9n
>>483
ビットフィールド構造体の定義にはunsignedどうでもいいだろ
共用しているchar型変数の方にはunsigned付けたけど
0487デフォルトの名無しさん
垢版 |
2017/07/29(土) 18:33:12.58ID:vlC06Wfm
>>481
そうそう。わかってて使うなら gogo もありだ。

ていうかC言語だと使わないと変な書き方になってかえって読み辛くなることあるな。
try catch みたいな例外処理が書けないから。複数個所でエラーが出る可能性が
ある場合に処理を飛び越えて先に進ませる方法が for(;;) ブロックの中で break
使うぐらいしかなかったりして、ループでないのに for (;;) 使うぐらいなら goto 使った
方がまだ分かり易い。
0488デフォルトの名無しさん
垢版 |
2017/07/29(土) 18:34:01.67ID:14mINgXT
char, unsigned char, signed char
この辺は規格がいまいち

文字をunsignedにしなかったのもいまいち

あとは演算子の優先順位にも不満がある
ビット演算が弱すぎる

代入が = / 比較が ==
なのもいまいち

いろんな歴史的な理由があるんだろうけど
0489デフォルトの名無しさん
垢版 |
2017/07/29(土) 18:34:26.21ID:zJVnUUbX
>>481
> 使いどころでは使えって話
まあそういうことだね
環境も目的も制約も様々だから絶対unionでないとダメとかunionはレガシーしか使っちゃダメとか言う奴はたいていちょっとアレな人なんだと思う
まあ引っ込みつかなくなっちゃったんだろうね
0493デフォルトの名無しさん
垢版 |
2017/07/29(土) 19:02:45.32ID:A0tSwWs4
バークレーソケットのソケットアドレス等で使わされてる感じだけど
自分から積極的に union を記述することは少ないな
0494デフォルトの名無しさん
垢版 |
2017/07/29(土) 19:18:41.24ID:gxbujSGs
というかマジで急にエアプ増えてね?

FieldOffsetを数字でベタ書きとか、かなり最悪のコードだぞ。(>>471内URL)
保守する場合は全部書き直しになる。(今更そこが変更されることもないはずだが)
真面目にこれを言っているID:zJVnUUbXはエアプだろ。
引っ込みつかないのはお前だ>>489

>>492
型を取るなら普通はC++的テンプレート解決だよな。
型なしがよければvoid*でいいし。
0496デフォルトの名無しさん
垢版 |
2017/07/29(土) 20:48:24.50ID:vlC06Wfm
エアプってなに?
0499デフォルトの名無しさん
垢版 |
2017/07/29(土) 21:53:33.37ID:qAu/jA2x
>>468
ANSI C 規格への Microsoft 拡張機能を使用すると、ビット フィールドに対して char および long 型 (Signed と unsigned の両方) が許されます。
0500デフォルトの名無しさん
垢版 |
2017/07/29(土) 23:41:43.43ID:KxGqyxM3
知らない書き方だと思ったら、MSのCコンパイラの独自仕様なのか
どうやらそのビットフィールドをchar境界に制約するものみたいだけど、
こういう書き方だとビットフィールドの幅に見えて気持ち悪い
0501デフォルトの名無しさん
垢版 |
2017/07/29(土) 23:46:26.91ID:14mINgXT
マイクロソフト以外でも結構良くある
型指定可能なコンパイラ

enumの型指定とかも
0502デフォルトの名無しさん
垢版 |
2017/07/29(土) 23:49:52.99ID:14mINgXT
signedとunsignedはビットフィールドでも意味がある

1bitでsignedだと、符号ビットしか存在しない
値でいうと 0と-1
0504デフォルトの名無しさん
垢版 |
2017/07/30(日) 00:02:03.96ID:1+DcPeTw
1bitで表現できるのは0か1しかないのでは?
意味的には-1だろうが値としては1以外に表現する方法がない
0505デフォルトの名無しさん
垢版 |
2017/07/30(日) 00:25:20.56ID:FGe2lUf3
sizeof(int)==4とすると
468のsizeof(SFR)==1だが
468のcharをintに変えると sizef(SFR)==4 になる
(略)
アクセス違反でbitfieldが使えん可能性あり
0507デフォルトの名無しさん
垢版 |
2017/07/30(日) 02:36:29.18ID:FQwxQ4LP
初学者なんだが教えて欲しい

状況:作ったプログラムが思うように動かないから途中の値をprintfで出力して検証中

コードの内容を大雑把に書くと

A[1] = 12
・・・
for( j = x - 1; j >= 0 ,--j ) (jは最初1)
・・・
if ( j != 0 )
printf( "a1=%d, j=%d\n", A[j], j )
if
 ・・・
 else
 if
printf( "a2=%d, j=%d\n", A[j], j )
   ・・・
みたいな処理をさせると出力結果が

a1=12, j=1
a2=0, j=1

階層が深くなると値が変わるんだが、何が原因かわかる人いる?
0509デフォルトの名無しさん
垢版 |
2017/07/30(日) 02:45:37.97ID:LfAaUMEW
変な状態が発生する状態を保ったまま
処理を削っていく
削っていって発生しなくなったら
その削ったところに何かヒントがあるかも

1レスに収まる範囲になったらここにすべてアップ
0510デフォルトの名無しさん
垢版 |
2017/07/30(日) 03:02:39.88ID:FQwxQ4LP
そんなに簡単にバグるものかと思って聞いてみたけど、汚ねえプログラムを添削してもらうのも申し訳ないからそういうものだと納得するよ、thx
0511デフォルトの名無しさん
垢版 |
2017/07/30(日) 03:29:48.70ID:KxWScrhl
>そんなに簡単にバグるものかと思って聞いてみたけど
次はコンパイラのバグとか言い出して大騒ぎして
そのうち人間のいい加減さに絶望する

普段から人間がどれだけ間違えてるか思い知るがいい
0512デフォルトの名無しさん
垢版 |
2017/07/30(日) 04:54:25.66ID:0PJrZm1n
>>507
初心者がやりそうな間違い。

1. 配列の A の要素数が足りない。
2. A を int *A; 等と宣言しておきながらメモリ確保していない。
3. メモリ確保しているがバイト数が足りない。
4. if 文を多重に使っているが階層を誤解している。
5. 自分で変数や配列の内容を書き換えている事に気付いていない。

4は例えば if (...) ...; if (...) ...; else ...; のようになっている場合に if (...) { ...; if (...) ...; else ...; } となると勘違いしている場合。
実際は if (...) { ...; } if (...) { ...; } else { ...; } になって最初の if と次の if は別物。
インデントがおかしいと騙される。しかしCコンパイラはインデントなど見ていない。
0514デフォルトの名無しさん
垢版 |
2017/07/30(日) 05:07:33.79ID:7dS2HrxN
じゃあ俺のあてずっぽうの勘だと主たる原因はフォントサイズが小さすぎること
メインの原因はA[i]が紛れ込んでいること
0516デフォルトの名無しさん
垢版 |
2017/07/30(日) 05:50:22.55ID:3UqYvyNk
>>507
for( j = x - 1; j >= 0 ,--j ) (jは最初1)
--j の前が ; であるべきなのに , てことはないよな。
投稿時のtypoだろうな。

if ( j != 0 )
printf( "a1=%d, j=%d\n", A[j], j )
if
の感じから見て、元のifのthen節を{}で囲ってなかったところに
printf() を挿入したから実行条件が変わっちゃった、かな。
「ぶらさがりif文にまつわる問題」てやつ。
(>>512 の指摘 4.)
0517デフォルトの名無しさん
垢版 |
2017/07/30(日) 06:32:09.81ID:bW/sP0k9
>>515
C++訛りとは限らんぞ
機械語のオートインクリメントは++が後置で--が前置になっていて
それが透けて見えるように書いていると--は前置だし
0518デフォルトの名無しさん
垢版 |
2017/07/30(日) 06:41:47.40ID:9ZftmVJd
オーバロードした++やイテレータは前置と後置で速度が違うのか。後置使うやつがいなくなるじゃないか。

C++は欠陥品だな。++Cって名前にしろよ。
0519デフォルトの名無しさん
垢版 |
2017/07/30(日) 07:03:49.82ID:1+DcPeTw
>>517
機械語の仕様や挙動はCPUの種類による
昔の話だけど8ビットCPUの頃は、インテル(ザイログ)とモトローラでは逆になっていた記憶がある
0520デフォルトの名無しさん
垢版 |
2017/07/30(日) 07:39:01.94ID:bW/sP0k9
>>519
LDIとLDDは逆じゃなく両方後置だ
そんな重箱の隅じゃなく本当に逆な例を挙げられるか?
0523デフォルトの名無しさん
垢版 |
2017/07/30(日) 08:18:53.67ID:1+DcPeTw
Z80と6809でスタックポインタを弄るときのPUSH/POPでポインタの増減が前置後置逆になってたはず
0524デフォルトの名無しさん
垢版 |
2017/07/30(日) 08:36:50.77ID:1+DcPeTw
少し調べてみたらやはり逆っぽい
C言語風に表現すれば
6809のPUSHは前置 *--SP、POPは後置 *SP++
Z80のPUSHは後置 *SP--、POPは前置 *++SP
0525デフォルトの名無しさん
垢版 |
2017/07/30(日) 09:05:35.12ID:bW/sP0k9
スタックポインタを意識してCのコードに--rとか書かねえよ
0526デフォルトの名無しさん
垢版 |
2017/07/30(日) 13:04:06.19ID:0PJrZm1n
ま、そういうのは最近のコンパイラなら最適化で跡形もなく消えちゃう事もあるので普通は考えても意味ないと思う。
0527デフォルトの名無しさん
垢版 |
2017/07/30(日) 13:29:40.49ID:bW/sP0k9
そういう問題じゃねえんだよ
話についてこれないならROMってろ
0528デフォルトの名無しさん
垢版 |
2017/07/30(日) 14:11:56.37ID:W8z6HKGT
C言語始めるためにいろんなサイトを転々としてVScodeとかVS2017とかをインストールしてみたんだけど訳がわからん
サイトに沿って設定とかしたけどどうすればいいかわからなくてどうしょうもない
Javaも少しやっててメモ帳に書いてたんだがあれくらい簡単じゃないのか
つまりどうしたいかというと
助けてくださいお願いします
0530デフォルトの名無しさん
垢版 |
2017/07/30(日) 14:47:05.86ID:bW/sP0k9
>>528
Javaはどんな環境でやってるんだ?
それに近いC環境がとっつきやすいと思うぞ
0531デフォルトの名無しさん
垢版 |
2017/07/30(日) 14:48:46.05ID:1+DcPeTw
>>528
とりあえずプロジェクトを新規作成して、テンプレートからWin32コンソールアプリケーションを選択、オプションで空のプロジェクトをチェックする
その後、ソースファイルに新しい項目を追加してC++ファイルを選択
この時デフォルトではC++(*.cpp)が選択されるので、気になるなら拡張子を*.cに変更すればC言語のソースが記述できる
0534デフォルトの名無しさん
垢版 |
2017/07/30(日) 17:51:36.41ID:AatiOL5G
有名な土方プログラマーの、T Umezawa の動画だろw

Java, C# を、テキストエディタで書いて、端末でコンパイルする
0536デフォルトの名無しさん
垢版 |
2017/07/30(日) 20:43:35.11ID:OOsADo1S
>>528
gcc入れろ。
0539デフォルトの名無しさん
垢版 |
2017/07/30(日) 23:12:47.40ID:W8z6HKGT
>>536
>>538
やっぱGCCがいいのかな
でもなんかVS2017使いたいんだよね
一回入れてみたことあるけどなんかよくわからんというか
その点VS2017は安心するというか
使ったことないけど
0540デフォルトの名無しさん
垢版 |
2017/07/31(月) 00:11:52.08ID:M3mLjUUM
clコマンド使えばいいんじゃねえのか

IDEの機能なんて初心者は1%も使えない
普通のエディタでも初心者だと5〜10%くらいの機能しか使えない
0541デフォルトの名無しさん
垢版 |
2017/07/31(月) 05:37:23.56ID:VZjnFU9V
>>539
普通のコマンドプロンプト出して、↓のバッチファイルを実行するとclが使えるようになる。
"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat"

cl your_program.cpp /EHsc
0545kadesu
垢版 |
2017/07/31(月) 10:32:48.65ID:RVdenN8P
Selenium WebDriverでHTTP refererを設定する方法をご教授下さい。
chromeを使用しています。

■やりたい事
http://referer.com/http://target.com/

■実装イメージ
options->AddArgument("--referer=http://referer.com/";);
driver->Navigate()->GoToUrl("http://target.com/";);

■環境
Win7 64bit
visual studio
Chrome driver
0547デフォルトの名無しさん
垢版 |
2017/07/31(月) 18:53:16.57ID:Y/tHh3+o
>>539
別にVSでも良いけど、差し当たっては新規作成とビルド->実行くらいは覚えんと。
(デジタルネイティブって言葉はどこ行ったんだろう。。。30代の自分が子供の頃でも迷った記憶は無いのに)

新規だけど、何も無いところから初めたい。
新規作成で空の何とか選べば意図通りに行きそう?とか、直感が働くのがデジタルネイティブの筈なんだが。

最初はcppファイルでCの勉強とかでも良いと思う。
むしろその方が型にうるさいから好都合だし。
0549デフォルトの名無しさん
垢版 |
2017/07/31(月) 21:53:07.86ID:VZjnFU9V
トラ技世代はどうなるんだよ
0550デフォルトの名無しさん
垢版 |
2017/07/31(月) 22:05:43.56ID:v4rHNYrD
ネイティブになるには小中学生時代に大量のコードを読む必要があるから。
その頃からトラ技読んでたらリアルデジタルネイティブになれるだろうな。
おれは回路はスラスラ読めない、書けない。このコンデンサは何用で〜とか考えないと無理。
母国語と同じ感覚、ネイティブになるには高校からじゃ遅すぎるよ。
0552デフォルトの名無しさん
垢版 |
2017/07/31(月) 22:12:45.15ID:VZjnFU9V
>>550
ごめんな、俺は社会人デビュー後だ
学生時代はhFEすら知らなかった
0553デフォルトの名無しさん
垢版 |
2017/07/31(月) 22:18:29.43ID:h/AGTSOY
バックアップ活用テクニック
0555デフォルトの名無しさん
垢版 |
2017/07/31(月) 22:29:30.63ID:nnrvrhsw
学生の頃はZ80や6809のアセンブリを手書きしてハンドアセンブルしてたなあ
>>523で書き込んだスタックの構造の違いに気付いたのもその頃
0558デフォルトの名無しさん
垢版 |
2017/08/01(火) 06:09:11.07ID:CJO4kzTH
ざべ
0559デフォルトの名無しさん
垢版 |
2017/08/01(火) 06:45:19.65ID:bsIAKS/0
ハード指向なら トラ技
ソフト指向なら Interface

最近はかなり曖昧になってきてるけど…
0561デフォルトの名無しさん
垢版 |
2017/08/01(火) 14:36:29.29ID:CJO4kzTH
ざべ=THE BASIC 技術評論社
元々は名のとおりBASICの雑誌だったが
いつしかオタッキーなPC雑誌へと変貌していった
http://ikura.2ch.net/test/read.cgi/i4004/1010850340/
0563デフォルトの名無しさん
垢版 |
2017/08/01(火) 22:24:59.83ID:DyBYTlGz
547だけど、ごめん。。。
変なおっさん呼び込んじゃったね。。。
0571デフォルトの名無しさん
垢版 |
2017/08/03(木) 02:45:12.28ID:CXemL7CS
x^2+y^2=5をみたすx、yを求めたいんだけどどんなプログラムがええのかな
0572デフォルトの名無しさん
垢版 |
2017/08/03(木) 02:45:35.24ID:CXemL7CS
ミス
x^2+y^2=25をみたす自然数x、yを求めたいんだ
0573デフォルトの名無しさん
垢版 |
2017/08/03(木) 03:13:34.90ID:2Hqooo+i
#include <stdio.h>
int main(void) {
int x, y;
for (x = 1; x <= 5; x++) { /* 与式の右辺が25なのでxの値は高々sqrt(25)=5、xの定義域は5以下 */
for (y = 1; y <= 5; y++) { /* 同じくyの定義域は5以下 */
if (x * x + y * y == 25) printf("x=%d y=%d\n", x, y); /* 求める解は x=3 y=4 または x=4 y=3 */
}
}
return 0;
}
0574デフォルトの名無しさん
垢版 |
2017/08/03(木) 06:50:15.59ID:84Bc5dj3
数学的には {3, 4}, {4, 3} なんてことはわかってるんだからそのまま表示するプログラムでもいい

なるべく応用が効くようなコードにしたいなら
>>573は色々と突っ込みどころが

sqrt(25)は手計算じゃなくてコードで示そう
素直にsqrtを使っても良いし、
x * x < 25
y * y < 25
という条件でもいい

計算オーダー的に二重ループもない
25がちょっと大きくなっただけで計算量がヤバイ
int y = (int)sqrt(25-x*x+.5);
としてから条件を満たすか調べると計算オーダーが減る
0577デフォルトの名無しさん
垢版 |
2017/08/03(木) 07:35:44.75ID:84Bc5dj3
だからこれで良いって言ってるだろ

#include <stdio.h>
int main(void) {
printf("x=4 y=3\n");
printf("x=3 y=4\n");
return 0;
}
0580デフォルトの名無しさん
垢版 |
2017/08/03(木) 07:56:39.62ID:2Hqooo+i
YAGNIとKISSか
そこまで意識した訳では無いけど>>573は適当そのもののコードだからな
汎用性は皆無と言ってもいいよ
正直、質問者の意図もよく分からんしな
0581デフォルトの名無しさん
垢版 |
2017/08/03(木) 08:25:09.96ID:3OMIPeoe
単なる課題だろう
ただ、発展形としてはいろいろ考えられる

ペル方程式 - Wikipedia
ttps://ja.wikipedia.org/wiki/%E3%83%9A%E3%83%AB%E6%96%B9%E7%A8%8B%E5%BC%8F

ベル数 - Wikipedia
ttps://ja.wikipedia.org/wiki/%E3%83%99%E3%83%AB%E6%95%B0

カタラン数 - Wikipedia
ttps://ja.wikipedia.org/wiki/%E3%82%AB%E3%82%BF%E3%83%A9%E3%83%B3%E6%95%B0
0582572
垢版 |
2017/08/03(木) 09:02:23.62ID:i8hgiPVK
うおおおおおおおおお答えてくれた人ありがとう

適当にスレ検索してここにたどり着いたけどスレチだったようだ ほんとにごめん 100万年ROMるわ
0584デフォルトの名無しさん
垢版 |
2017/08/04(金) 23:42:56.37ID:RX2ZdH5Q
ガチ初心者の僕にポインタの使い道を教えてください
0591デフォルトの名無しさん
垢版 |
2017/08/05(土) 05:11:53.62ID:dUt+j3iS
>>584
printf("Hello, C world!\n");
この一文でもう既にポインタを使っているわけだが?
0593デフォルトの名無しさん
垢版 |
2017/08/05(土) 05:53:46.66ID:AmDvMFkm
ポインタの使い道を答えたら逆ギレするガチ初心者。
おそらくポインタを勘違いしてるからキレてんだろうな。
0595デフォルトの名無しさん
垢版 |
2017/08/05(土) 09:44:09.47ID:B4rhQgJR
>>591
初心者にありがちな間違い
ポインタと配列は区別しよう

関数に配列を渡した時の解釈について言及しているなら、ガチの初心者に対しては不適切
0596デフォルトの名無しさん
垢版 |
2017/08/05(土) 09:59:39.56ID:dUt+j3iS
>>595
おまえも仮引数と実引数を区別しろ
0597デフォルトの名無しさん
垢版 |
2017/08/05(土) 10:02:18.44ID:xVRX2iSI
void * に1を足す記述がエラーも警告も無しでコンパイル通ってしかも何事もなく1足されてたのを発見した時は驚いた。
gccってそういう仕様だったんだね。
0600デフォルトの名無しさん
垢版 |
2017/08/05(土) 11:15:51.54ID:B4rhQgJR
>>598
Cの規格にはない用語だな
きっと別の言語なんだろう

文字列リテラルがポインタ wな謎言語
0602デフォルトの名無しさん
垢版 |
2017/08/05(土) 11:32:07.13ID:jiOahgu4
仮引数と実引数はJIS X3010にも定義されている用語
仮引数はparameter、実引数はargument
ただ>>596が何を言いたいのかはよく分からん

要するに仮引数はプロトタイプ宣言などで仮に与える引数(型さえ明確なら何でもいい)のことで
実引数は式の中で実際に使われる引数(関数で実際に利用するので名前は重要)のこと
0603デフォルトの名無しさん
垢版 |
2017/08/05(土) 11:34:21.17ID:hIPGEPA7
>>600
アセンブラのオペランドにイミディエイト出来ないものはRO領域に格納されるのでアドレスが割り振られポインタ管理できる

>>601
言語固有の用語ではなく構造化プログラミングの用語
0606デフォルトの名無しさん
垢版 |
2017/08/05(土) 11:40:54.82ID:B4rhQgJR
なんか、昔はポインタと配列の区別を知らない筆者の書いた入門書で障害児が量産されたと聞いたが
その中の一人かな
0608デフォルトの名無しさん
垢版 |
2017/08/05(土) 11:50:23.17ID:B4rhQgJR
>>607
> アセンブラのオペランドにイミディエイト出来ないものはRO領域に格納されるのでアドレスが割り振られポインタ管理できる
知っているとは思えない発言なんだが
0610デフォルトの名無しさん
垢版 |
2017/08/05(土) 11:59:40.46ID:hIPGEPA7
>>608

>文字列リテラルがポインタ wな謎言語

なぜ文字列リテラルがポインタだと謎な言語なのでしょうか?
また>>608のその文のどの辺りが間違っていますか?

後学までにご指摘頂けるとありがたいです。
0612デフォルトの名無しさん
垢版 |
2017/08/05(土) 12:32:48.74ID:B4rhQgJR
>>610
文字列リテラル即ち配列
配列とポインタは異なるもの
∴ それを同じとするのは謎言語

> 後学までにご指摘頂けるとありがたいです。
ROなんて決まってねーし
即値で表現できない(struct foo){1,2,3}なんてのはアドレス欲しかったら&で取らなきゃいけねーし

何もかにもがデタラメ
0614デフォルトの名無しさん
垢版 |
2017/08/05(土) 12:38:15.34ID:AmDvMFkm
処理系も指定せず意味不明杉。どっかで頓珍漢な呼出規約の説明してた人と同一人物じゃないのか。
0615デフォルトの名無しさん
垢版 |
2017/08/05(土) 13:12:31.66ID:hIPGEPA7
>>612
>それを同じとするのは謎言語
Cの文字列はcharの配列
それはリテラルでも変わりませんよ?
それ自体が謎というならもうCは無理でしょう

>ROなんて決まってねーし
特殊なリンカでない限り大抵のリンカは定数はROに配置しますよ?

>即値で表現できない(struct foo){1,2,3}なんてのはアドレス欲しかったら&で取らなきゃいけねーし
即値とリテラルが区別出来ていないのでは?
リテラルだろうとメモリ上に配置されたものはアドレスが振られています

>何もかにもがデタラメ
私には貴方がなにも知らないようにしか見えません
0617デフォルトの名無しさん
垢版 |
2017/08/05(土) 13:20:36.17ID:239At3Tg
604 デフォルトの名無しさん[sage] 2017/08/05(土) 11:35:58.99 ID:B4rhQgJR

ああ、argumentとparameterをJISはそう訳してるのか
それはすまん


だっさ最低限の日本語も知らずに日本の2chに書き込むなよ
0620デフォルトの名無しさん
垢版 |
2017/08/05(土) 15:28:27.35ID:AkDeKfTH
Cだと実際区別ないよね
長々と罵りあってるのに具体的な説明がひとつも出てなくてわろた
0621デフォルトの名無しさん
垢版 |
2017/08/05(土) 15:41:07.75ID:B4rhQgJR
>>615
こいつダメだ 何もかもがデタラメ
ポインタと配列の区別
リテラルと即値の区別

何も出来てない
0624 ◆QZaw55cn4c
垢版 |
2017/08/05(土) 16:14:56.43ID:40G0sflG
6809 のアドレッシングモードが懐かしい
リテラルと即値の区別は 6809 を触っておればわかるよね
6809 搭載のPCIボードを誰か作ってくれないかな
0626デフォルトの名無しさん
垢版 |
2017/08/05(土) 17:51:18.49ID:xVRX2iSI
>>620
こういうのあるよね。

char s1[] = "a";
char *s2 = "b";

これ、s2には後から他の文字列を指すポインタの代入ができるがs1にはできない。
s2はポインタを入れる変数に対する名前になっているがs1は文字列定数の先頭を
指すラベルにしかなっていない。

それとこんなのもある。

char s3[3][100];
char *s4[3];

s4は3要素のchar*だが、s3は違う。char で 100 要素の配列が3要素ある。
配列の配列なので実は typedef char c100t[100]; c100t s3[3]; みたいに書いたのと同じだ。
新しい型が密かに作られている。なので違うのだがアクセスする時に s3[x][y] も s4[x][y] も
できたりして見た目が同じになる。
多分初心者はこれにハマることがあると思う。特に関数の引数をs3のように書いてしまい、
それでs4を引き渡そうとした時とか、あるいはその逆の時とかね。(そして昔のコンパイラは
警告も出さずに通ってしまい動かしてからバグに悩むと)。
0627デフォルトの名無しさん
垢版 |
2017/08/05(土) 18:08:09.16ID:PFeVLmXg
cで一番難しいのは、constだと思う。
間違えてても、動いちゃうからなー
なくても困らないけれど、厳密に宣言しようとおもうと慣れが必要。

char ** とか
0629デフォルトの名無しさん
垢版 |
2017/08/05(土) 19:34:33.25ID:vX9Ad9Pg
"constは左に掛かる"

char const **s; // charを修飾
char * const *s; // char *を修飾
char ** const s; // char **を修飾

と書けば何も迷うことはない
0633デフォルトの名無しさん
垢版 |
2017/08/06(日) 00:11:43.92ID:ljqAECQw
forkで子プロセスを複数生成した際に、子プロセス間で変数を共有、または子プロセスから他の子プロセス(親は同一)の変数にアクセスする方法って有りませんか?

共有メモリ以外でお願いします
0638デフォルトの名無しさん
垢版 |
2017/08/06(日) 10:57:12.05ID:3gNA0Uyl
>>633
内部的には共有メモリと同じなんだろうけどmmapなんかどうだ?
0639633
垢版 |
2017/08/06(日) 12:30:30.67ID:QIgcqg1l
すみません自決しました
0643デフォルトの名無しさん
垢版 |
2017/08/06(日) 14:33:22.10ID:nazawjTw
>>633
> 共有メモリ以外でお願いします
共有メモリがダメな理由が書いてないからネタなんだろうな
0645デフォルトの名無しさん
垢版 |
2017/08/06(日) 15:27:01.03ID:3gNA0Uyl
>>643
難しくてわからないからじゃね?
あるいは宿題がそういう風に出てしまった。
0648633
垢版 |
2017/08/06(日) 16:02:38.93ID:qTrjZ2YT
>>643
コードが無駄に長くなるので好きじゃないんです
どうしてもって時以外は使いたくないです
0649デフォルトの名無しさん
垢版 |
2017/08/06(日) 16:31:30.70ID:ThMEkv3I
>>602
596だが
おまえ、どこから流れ読んでる?
>>593あたり前後の関係よく見てみな
>>595がいかに頓珍漢な噛みつき方しているか牛でもわかるぞ
0650デフォルトの名無しさん
垢版 |
2017/08/06(日) 16:47:17.37ID:r2XWWSNC
>>649
ポインタと配列の区別がつけられない障害児のID:dUt+j3iSか
出会った入門書が悪かったんだから、もう諦めてポインタのない言語を学びなおせ

お前にゃCは無理って事だ
0651デフォルトの名無しさん
垢版 |
2017/08/06(日) 16:48:57.70ID:r2XWWSNC
ポインタを教えてくださいと言ってる初心者に配列使って見せて
「これがポインタだっ どやっ」

笑うしかないな
0652デフォルトの名無しさん
垢版 |
2017/08/06(日) 16:52:58.17ID:4cVoKrwP
やっぱりポインタの勉強するには柴田ぼーよー先生のポインタの本がいいんでしょうか?
0654デフォルトの名無しさん
垢版 |
2017/08/06(日) 17:02:15.95ID:jhhg/GBw
こいつらの反論が反論になっていないな
C分かっていればそのコードが
ポインタ渡しになっていることは直ぐに分かるんだけどね
まぁスルーが得策だよ
ID:dUt+j3iSはID:r2XWWSNCに構ってはいけない
0655デフォルトの名無しさん
垢版 |
2017/08/06(日) 17:23:37.54ID:OSHq4q+H
問題はそこではなくて、ポインタの話からいきなり仮引数だの実引数だのとかの話に飛躍したことだと思うのだがな
まあだいたい想像は出来る
何故だか初心者本でよく見られる間違いとして、関数の呼び出し側の引数が実引数、関数の受け取り側の引数が仮引数、という説明をそのまま受け入れていたのだろうな
言語によってはその通りかも知れんが、少なくともC言語のJIS X 3010の解釈とは異なっている
0657デフォルトの名無しさん
垢版 |
2017/08/06(日) 17:35:06.21ID:ThMEkv3I
>>654
ご忠告どうも
気持ちだけありがたく貰っとくyo

>>656
K&R 1stだが何か?
0658デフォルトの名無しさん
垢版 |
2017/08/06(日) 17:37:29.70ID:MVEPApHK
C言語でもその解釈で全然問題無いと思うけどな俺は
どっちにしてもID:r2XWWSNCはど素人のくせに
質問の仕方も知らない無礼な奴と言う事には間違いはないだろう
0659デフォルトの名無しさん
垢版 |
2017/08/06(日) 17:44:53.62ID:OSHq4q+H
>>657
実引数として配列を用いて関数呼び出しを行えば、呼び出された関数は仮引数としてポインタで受け取ると言いたいのだろう
K&Rでも実引数と仮引数はそういった説明をしていたか?
0661デフォルトの名無しさん
垢版 |
2017/08/06(日) 18:16:39.32ID:ThMEkv3I
>>659
ああしていたよ
おまえには読み取れなかったんだろうがな

>>660
無礼なやつだな
俺は障がい者手帳は交付されてねえよ
勝手に妄想すんな精神分裂病患者め
0665デフォルトの名無しさん
垢版 |
2017/08/06(日) 20:53:33.24ID:r2XWWSNC
>>659
ガイジには読み取れなかったようだ
> When an array name appears as an argument to a function, the location
of the beginning of the array"s passed;

良い時代になったもんだ 歴史的資料がきちんと公開されている
0666デフォルトの名無しさん
垢版 |
2017/08/06(日) 21:33:36.77ID:r2XWWSNC
誤読される可能性があるので追記
>>659
ガイジのID:ThMEkv3Iには読み取れなかったようだ
> When an array name appears as an argument to a function, the location
of the beginning of the array"s passed;

良い時代になったもんだ 歴史的資料がきちんと公開されている
0668デフォルトの名無しさん
垢版 |
2017/08/06(日) 22:38:49.98ID:fAxfwMN0
When an array name appears as an argument to a function, the location
of the beginning of the array"s passed;

「配列の名前が関数の実引数として現れた時、その配列の先頭ポインタが渡される」でいい?
0669デフォルトの名無しさん
垢版 |
2017/08/06(日) 22:53:31.79ID:r2XWWSNC
どこにポインタなんて書いてあるんだ 見えないものが見えちゃうって精神科受診した方が良いぞ
0671デフォルトの名無しさん
垢版 |
2017/08/06(日) 23:15:47.82ID:jhhg/GBw
ポインタ渡しが謎用語らしい
コイツはもう覚える気すらないよ
つーかただのバカ
スルー推薦
0672デフォルトの名無しさん
垢版 |
2017/08/06(日) 23:17:56.61ID:r2XWWSNC
位置

そもそも
> A pointer is a variable that contains the address of another variable.
と言う定義を理解してないのか?
障害児製造機な入門書が存在らしいな
お前は何という本を初学時に使った?
0675デフォルトの名無しさん
垢版 |
2017/08/06(日) 23:25:55.10ID:fAxfwMN0
>>672
直訳すると、「ポインタとは他の変数の位置を内包した変数である」。
"location of the beginning of the array"、直訳すると「配列の先頭の位置」はポインタ以外の何物だっていうのか教えてくれる?

ちなみに俺の初学本は「C言語によるプログラミング」第二版
0677デフォルトの名無しさん
垢版 |
2017/08/06(日) 23:38:53.59ID:fp1GLRR7
メモリ上の位置を表す「アドレス」と、それを格納する変数である「ポインタ」を混同してるから議論が噛み合わないのでは?
0678デフォルトの名無しさん
垢版 |
2017/08/06(日) 23:45:57.68ID:r2XWWSNC
>>675
ガイジか?
ポインタとは他の変数のアドレスを内包した変数である
としか書いてないのに、書かれてない「位置」がなぜ出てくる

まあ、それには目をつぶって
「内包した変数」が重要
Cの変数とは型を持ち、値を格納できるもの

アドレスとポインタ(=変数)を混同しないように
あと10年くらい修行することだ
0680デフォルトの名無しさん
垢版 |
2017/08/06(日) 23:54:22.39ID:fAxfwMN0
>>678
えーともしかして、
「いわゆる『ポインタ渡し』ではアドレスがコピーされているのであってポインタ変数が渡されているわけではない」と言いたいの?
0681デフォルトの名無しさん
垢版 |
2017/08/06(日) 23:55:35.62ID:jhhg/GBw
コイツはまともな社会生活できてるのか
日常会話が成立出来ていないのではないか
0682デフォルトの名無しさん
垢版 |
2017/08/07(月) 00:00:10.79ID:Uo4tfgNR
>>680
ガイジ用語使うな
qiitaでヒットするそれはあえて言うなら「ポインタ渡され」
このスレで出現している「ポインタ渡し」はガイジID:jhhg/GBwが使い出した謎用語
0684デフォルトの名無しさん
垢版 |
2017/08/07(月) 00:07:08.67ID:r7C/NYo5
>>682
いわゆるって言ったのにそれでもダメか。

void foo(int a[8])と宣言された関数を別の関数内で

int a[8];
void foo(a)

と呼び出す時、それはポインタが渡されているのではなく配列の先頭アドレスがコピーされていると言いたいの?
0688デフォルトの名無しさん
垢版 |
2017/08/07(月) 00:13:38.80ID:5EiEWIq+
このガイジ早く死刑にしろ
絶対何か障害持ってるだろ
何か起こしてからじゃ遅いぞ
0691デフォルトの名無しさん
垢版 |
2017/08/07(月) 00:24:46.95ID:DdwwpY1/
ポインタの使い道を聞いてるのに、なにみんなで必死にポインタの解説してんだ?

Javaとかポインタない言語があるんだからポインタはなくてもいいだろという主旨だろう。
0693デフォルトの名無しさん
垢版 |
2017/08/07(月) 00:33:24.20ID:r7C/NYo5
>>690
だよねえ。それじゃあ
printf("Hello, C world!\n");はポインタとして受け取っているように見えるんだけど、ポインタではないの?
0694デフォルトの名無しさん
垢版 |
2017/08/07(月) 00:38:54.27ID:YE/9ro9h
引数を変数だと考えるからおかしなことになる
引数は値であって変数ではない、渡しているのは値であって変数ではない
C言語には値渡ししか存在しない、他の言語で言う参照渡しに相当するようなものは存在しない
ましてやポインタ渡しに至っては全く意味不明
渡しているのはアドレスであってポインタを渡しているのではない
0698デフォルトの名無しさん
垢版 |
2017/08/07(月) 00:51:00.39ID:r7C/NYo5
定義至上主義なら最初から「アドレス渡しと呼べ」と言えばいいだけだから、ただ文句つけたかっただけだと思うよ
0699デフォルトの名無しさん
垢版 |
2017/08/07(月) 01:02:22.98ID:L++MnVlz
定義至上主義者はID:r7C/NYo5のことだと思うが
「ポインタ渡し」だの「アドレス渡し」だの言葉の定義に拘ってるようにしか見えん
0700デフォルトの名無しさん
垢版 |
2017/08/07(月) 01:04:50.56ID:uOfJK7yi
>>694
厳密にはNULLポインタとかがアドレスじゃないから、「ポインタ型の値」といったほうが汎用的では
そして、
>>685
によると(場合によってはポインタ型の値)もポインタと言ってる箇所があるのかな
仕様書読むのめんどくさい

どれにせよ、厳密な表記しても初心者には得がないな
0702デフォルトの名無しさん
垢版 |
2017/08/07(月) 01:08:08.23ID:tmW9+jq1
この流れでそう思える読解力は凄い
言葉の定義で頓珍漢な噛みつき方したのは
ID:Uo4tfgNRとID:YE/9ro9hだろ
0706デフォルトの名無しさん
垢版 |
2017/08/07(月) 01:15:35.04ID:DdwwpY1/
だからさぁ。使い道を聞かれてんだよ、使い方じゃねーんだよ。さっさと答えてやれよ。

javaやpascalはポインタ使わなくてもプログラム書けるのにCにポインタが必要になる使い方をよ。

もしかしておまえら入門書読んで理解したつもりなだけで、ポインタが何か分ってないんだろ?
0707デフォルトの名無しさん
垢版 |
2017/08/07(月) 01:18:08.93ID:r7C/NYo5
>>706
俺はガイジ連呼厨の意図が知りたかっただけだし、そこまで偉そうに言うなら君が答えてあげなよ
0711デフォルトの名無しさん
垢版 |
2017/08/07(月) 01:35:13.99ID:DdwwpY1/
結局、javaやpascalはポインタ使わなくてもプログラム書けるのに
Cにポインタが必要になる使い道、理由は誰も分らないのかよ。

ガッカリだぜ。なにがC言語なら俺に聞けだよ。
0712片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/08/07(月) 01:35:26.77ID:ITzYZ/9b
┌────────┐
│        │
│  /■~\   │
│  (´∀`∩)  │
│  (つ  丿  │
│  ( ヽノ   │
│  し(_)   │
│        │
│Now Onigiring...│
│        │
│ 暫くおにぎりで │
│ お待ちください │
└────────┘
0714デフォルトの名無しさん
垢版 |
2017/08/07(月) 01:41:43.94ID:Uo4tfgNR
>>703
> printf("Hello, C world!\n"); これがポインタだっ どやっ
十分にガイジ

「ポインタ渡し」のガイジ事か?
> こいつらの反論が反論になっていないな
> C分かっていればそのコードが
> ポインタ渡しになっていることは直ぐに分かるんだけどね
printfの知識が無ければわからない
「渡され」を「渡し」と呼ぶ
十分にガイジ
0715片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/08/07(月) 01:44:12.93ID:ITzYZ/9b
生で全国放送なんで、影響力強いっす。学校でイジメの真似事されると困ります。ですから、放送コードに違反した発言は極力慎むように頼みます。
0716デフォルトの名無しさん
垢版 |
2017/08/07(月) 01:48:52.14ID:r7C/NYo5
>>714
最初のは確かに渡されだけどポインタじゃない?一応間違ってはないんじゃない? 最初にそのレスした時相手のprintfの知識とか考えてなかっただろうし。

それに「ポインタ渡し」は慣用語として定着してしまっている側面もあるからその用語を使っただけでガイジ認定は早いよ
ある程度の慣用語は意図を汲んだ上で、間違ってると思うなら的確に指摘しないとコミュニケーション成立しなくてどっちがガイジかわからなくなっちゃう
0717デフォルトの名無しさん
垢版 |
2017/08/07(月) 01:50:24.62ID:Amcgn4Bl
>>711
ポインタという仕組みを1つ導入することでアドレスを直接操作することができるからかな
参照だとアドレスを操作できない
他の言語はアドレスを逆に操作させないことで安全性を保つというスタンスだけど
C/C++は安全でない代わりにアドレスを直接操作する事ができるというスタンス

あとはメモリ操作のコスト削減があげられると思う
for(i = 0; i < MAX; i++){
dest[i] = src[i];
}
とやるよりも
src_p = src;
dest_p = dest;
dest_end_p = dest + MAX;
while (dest_p < dest_end_p) {
*dest_p++ = src_p++;
}
とやるほうがコストが軽い
0718片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/08/07(月) 01:50:56.10ID:ITzYZ/9b
動物園の檻の中で「あいつはオラウータン」「こいつはゴリラ」とかぼやいてる飼育員。
0720デフォルトの名無しさん
垢版 |
2017/08/07(月) 02:04:29.54ID:Uo4tfgNR
>>716
やっぱり見えないものを見てるガイジか?
> printf("Hello, C world!\n");
これのどこに
> A pointer is a variable that contains the address of another variable.
が現れているんだ?

確実に配列とポインタの区別がついてないガイジだろ
0721デフォルトの名無しさん
垢版 |
2017/08/07(月) 02:11:29.62ID:r7C/NYo5
>>720
渡され側は先頭アドレスを格納したポインタであって、
そのレスをした人は最初にレスした時、相手のprintfの知識とか気にしてなかっただろうって書いたつもりだけど、なんか間違ってた?
0722片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/08/07(月) 02:12:45.69ID:ITzYZ/9b
引数は変数の一種と見なすのも一理あるだろう。仮引数も変数と見なしても実用上は問題ない。
それとも仮引数は変数ではないと言い張りたいのか?
0723片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/08/07(月) 02:16:49.89ID:ITzYZ/9b
我々は実用性を重視するが、理論上では仮引数はポインターではないかもしれない。君のような理論家ではそれは重要かもしれないが。
0724デフォルトの名無しさん
垢版 |
2017/08/07(月) 02:19:54.41ID:Uo4tfgNR
>>721
> printf("Hello, C world!\n");
この一文のどこにポインタが使われてるんだ?
printfの定義は「この一文」には含まれないよな
subroutine printf(s)
character*80 s
かもしれんぞ


591 デフォルトの名無しさん[] 2017/08/05(土) 05:11:53.62 ID:dUt+j3iS

>>584
printf("Hello, C world!\n");
この一文でもう既にポインタを使っているわけだが?
0725デフォルトの名無しさん
垢版 |
2017/08/07(月) 02:30:03.96ID:r7C/NYo5
>>724
とりあえず、もしfortranから呼んでるならなら_printfじゃない?
さっきから言われた側の知識に言及していらっしゃるけど、それこそ一般に言うとprintfって言ったら普通はstdio.hのものを指すし、言われた側もまさかfortranとは思わないよ
そんな病的な状況を例に出さないといけない時点でおかしい噛みつき方してるってわかるもんだと思うけどなあ
0727片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/08/07(月) 02:36:12.54ID:ITzYZ/9b
printfの仮引数がポインター型だから、printf内部とprintfの型情報でポインターを使っているといっても間違いではない。
0728片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/08/07(月) 02:41:35.68ID:ITzYZ/9b
頭でっかちの理論家が、間違いを含む古い書籍を読んで、一字一句正しいと思い込んでいるのは最悪な状況だ。
0729デフォルトの名無しさん
垢版 |
2017/08/07(月) 02:46:48.50ID:Uo4tfgNR
>>722
「この一文」と限定したんだから、それ以外の知識は不要で、これだけでポインタを使ってるという事だな
0731デフォルトの名無しさん
垢版 |
2017/08/07(月) 02:48:13.58ID:YE/9ro9h
同意
俺も>>694では単に概念を述べただけなのに何故だか定義至上主義にされてしまったからな
理論化にとっては定義が大事なだけであって概念を理解しようとしない
0734片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/08/07(月) 03:15:03.46ID:ITzYZ/9b
教育上は、引数は関数に渡せる変数だと指導する方が分かりやすい。ただ、コンパイラーや言語を考えるとき、理論上では問題がある。
0735片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/08/07(月) 03:21:11.00ID:ITzYZ/9b
実際、仮引数は、変数と同じように型を持ち、変数と同じように値を代入したり、値を取り出したりできる。
これを変数ではないとするのは直感に反する。だから教育上の配慮から、理論以外では、仮引数は変数だと見なしてよい。
0738片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/08/07(月) 03:30:44.55ID:ITzYZ/9b
>>736
お前のそのコメントのどこに意味が見える? 意味は見るものじゃなくて解釈するものだ。
意味論上で意味を解釈しようとしない馬鹿に議論はできない。
0739片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/08/07(月) 03:40:03.33ID:ITzYZ/9b
猿、猿、猿。さて猿は何匹? いいえ、これはただの文字。本当の猿ではありません。
printf("あほ"); さて、これはどんな処理でしょう。いいえ、この文はただの
テキスト。フォートランかもしれないし、
バイナリーではないから、本当の処理ではありません。
printf? 別に意味なんてありません。この一文に意味なんてありません。
こいつらは形而上学を知らないのか。
0740片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/08/07(月) 03:48:46.08ID:ITzYZ/9b
形而上言語では、一文とその意味は同一視するものだ。
そこで君が提示したprintf("なんちゃら");も意味があると仮定する。
これはprintf関数に"なんちゃら"という文字列データのアドレスを渡すものと解釈される。
よってこのprintfの最初の仮引数はポインター型だ。もし、ポインター型でなければ、形而上の意味が不定になり、
君が提示したことはC言語的には無意味だ、
という意味になる。馬鹿げてるよ。
0741片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/08/07(月) 04:01:49.30ID:ITzYZ/9b
 ∧_∧      半端者はみっくみくにしてやんよ
 ( ・ω・)=つ≡つ
 (っ ≡つ=つ
 /   ) ババババ
 ( / ̄∪
0742デフォルトの名無しさん
垢版 |
2017/08/07(月) 04:23:54.04ID:Uo4tfgNR
>>740
printf("なんちゃら");
はprintfと言う外部名を持つ手続きに引数として文字配列の先頭アドレスを与えて呼び出すという意味しかない
わかったかね ボンクラ
0744片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/08/07(月) 04:34:25.12ID:ITzYZ/9b
>>742
敢えてprintfの型に触れず誤魔化してるようにしか見えないが。printfの型が決まってなければ、明らかにコンパイルできない文だ。
0745片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/08/07(月) 04:49:23.24ID:ITzYZ/9b
 ∧_∧      半端なヤツはみっくみくにしてやんよ
 ( ・ω・)=つ≡つ
 (っ ≡つ=つ
 /   ) ババババ
 ( / ̄∪
0746片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/08/07(月) 04:55:23.95ID:ITzYZ/9b
「戻り値」はダメとか言ったらキリがない。
言葉の世界は多数決で決まる。
時代錯誤な正義を振りかざすな。
0747片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/08/07(月) 05:16:25.45ID:ITzYZ/9b
const char a[1] = "";
const char *p = "";
assert(sizeof(a) == 1);
assert(sizeof(p) == sizeof(void *));
a++; // Error
p++; // OK
0748片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/08/07(月) 05:33:55.94ID:ITzYZ/9b
我が国は教育上の配慮を生徒よりも先回りして先回りして考えているから、教育水準をここまで
高めることが出来たんだ。教育上の配慮がないなら、答えを砂漠の中から探させることになってしまうぞ。
お前は天才だからいいが、エリートじゃない一般人は教育上の配慮を行った教材じゃないと生き残れない。
0750デフォルトの名無しさん
垢版 |
2017/08/07(月) 06:52:48.38ID:bZKJxmgb
>>672
これどこの定義か知らんけど(変数じゃなくて)関数へのポインタって言うのもあるよね?
0751片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/08/07(月) 07:37:27.89ID:ITzYZ/9b
                  ┌─┐??
                  |も.|??
                  |う |??
                  │来│??
                  │ね│??
                  │え .|??
                  │よ .|??
       バカ    ゴルァ  │ !!.│??
                  └─┤    プンプン??
     ヽ(`Д´)ノ ヽ(`Д´)ノ  (`Д´)ノ    ( `Д)??
     | ̄ ̄ ̄|─| ̄ ̄ ̄|─| ̄ ̄ ̄|─□( ヽ┐U??
〜 〜  ̄◎ ̄  . ̄◎ ̄   ̄◎ ̄   ◎−>┘◎
0752デフォルトの名無しさん
垢版 |
2017/08/07(月) 07:48:24.65ID:xW9C/CpC
>>735
仮引数ってプロトタイプ宣言の引数じゃなかったっけ?
あれ、関数の型を教えるだけだから、型だけ書いて変数書かないとかもおkだお。

int hoge(int);
0753デフォルトの名無しさん
垢版 |
2017/08/07(月) 08:38:13.41ID:oeQKd2lB
あいや〜
昔 -traditional でgccでコンパイルして
動かせた化石ソースが、
今はもう -traditional使えないんで
コンパイル出来ない、動かせないアルよ。
0754デフォルトの名無しさん
垢版 |
2017/08/07(月) 09:14:12.38ID:dOHD//zn
>>752
仮引数かいてなくて どっちがどっちじゃ! と迷う qsort
qsort(void*, size_t , size_t , int (*)(const void*,const void*)):
0756デフォルトの名無しさん
垢版 |
2017/08/07(月) 09:27:48.56ID:Uo4tfgNR
>>754
仮引数もガイジ認定したい用語だ
原文ではparameter
実引数をあらわすargumentはactual argumentまたはactual parameterとも呼ばれる
実仮引数 w まさにガイジ用語
0758デフォルトの名無しさん
垢版 |
2017/08/07(月) 09:30:00.41ID:r4dv7rmY
化石ソース

#include<stdio.h>

int function(a, b, c)
int a;
int b;
int c;
{
return a*b + c;
}

int main(void){
printf("%d\n", function(5, 4, 10));
return 0;
}
0759デフォルトの名無しさん
垢版 |
2017/08/07(月) 09:30:57.72ID:xW9C/CpC
>>754
いあ。。。
実引数の方みろよとしか。。。
プロトタイプ宣言に何期待してんだよ。
0760デフォルトの名無しさん
垢版 |
2017/08/07(月) 09:35:47.75ID:dOHD//zn
数使ってるなら、そのうち覚えるけど、そうでもないのはいちいち調べるのに手間だし
最近のは プロトタイプをポップアップ表示したりする環境もあるし ね
0765デフォルトの名無しさん
垢版 |
2017/08/07(月) 14:21:07.21ID:Oq7cYNKv
JavaにポインタがなくてCにポインタがあるのはという話が出ているが
データのあるアドレスの扱いをポインタで実現したかそうでないかということだと思われる
Javaではint[]型のような参照型の変数にはアドレスが入っている
他例えばJavaScriptではNumber, Booleanのようなラッパークラスがint*などに似た役割を果たす
0767デフォルトの名無しさん
垢版 |
2017/08/07(月) 14:27:21.13ID:Jd+yR0yr
char*ってなんなの?
char型の配列の先頭のアドレスを入れる配列って事?

つまりchar* a = {"hello","hoge","bread"};

こう?
0768デフォルトの名無しさん
垢版 |
2017/08/07(月) 14:36:26.52ID:Oq7cYNKv
charは256種類の値をとる型でありそれを使って'A'とか文字1つを表す
char型の配列はcharを一列に並べることによってUTF-8ヌル終端文字列を表す
その先頭のアドレスはchar*型なのでC言語ではchar*が文字列型になる
文字列の配列が欲しければ(char*)*つまりchar**
0769デフォルトの名無しさん
垢版 |
2017/08/07(月) 14:44:29.34ID:Cf79G+d9
>>768
char a と char* aは同じってこと?
char**は文字列の配列だから

さっきの例でchar** aならa[0]はhello, a[1]はhoge?
0771デフォルトの名無しさん
垢版 |
2017/08/07(月) 15:53:42.35ID:fj1hwtp7
>>770
うーん
char とchar*ってやっぱり違うのか?
charが配列でchar*は2次元配列みたいなものなのかな?
char**は3次元配列でchar***(以下略


char a[][] これは2次元配列
char *a[] これも2次元配列
char **a これも2次元配列
って事なのかな?
0774デフォルトの名無しさん
垢版 |
2017/08/07(月) 16:54:50.74ID:Uo4tfgNR
>>773
「(変数じゃなくて)関数へのポインタ」があると主張している、お前が一次ソースもってこい
0775デフォルトの名無しさん
垢版 |
2017/08/07(月) 18:33:10.56ID:OgCRmlag
>>662
ポインタだよ
おまえまさか「配列を渡した」とか思ってるのか?
手帳がいるのおまえだろ、あ既にもってるんだっけw
0777デフォルトの名無しさん
垢版 |
2017/08/07(月) 19:43:35.00ID:r7C/NYo5
>>774
横からだけどこれでいいか?
K&R第2版Chapter 5より
The use of comp in the line
if ((*comp)(v[i], v[left]) < 0)
is consistent with the declaration: comp is a pointer to a function, *comp is the function, and
(*comp)(v[i], v[left])
is the call to it.
0781デフォルトの名無しさん
垢版 |
2017/08/07(月) 20:31:35.85ID:OgCRmlag
>>778
ポインタは、アドレスを意味する値であって
それを格納しうる変数には限らない
0783デフォルトの名無しさん
垢版 |
2017/08/07(月) 21:02:26.86ID:OgCRmlag
論点はポインタの使い途wwwwwwwww
0787デフォルトの名無しさん
垢版 |
2017/08/07(月) 21:23:07.98ID:OgCRmlag
>>785
それは論議の結論ではなく、単なる事実

# 年齢だか学歴がどうたら言ってるアフォはスルー
0790デフォルトの名無しさん
垢版 |
2017/08/07(月) 21:29:47.13ID:OgCRmlag
>>788
ポインタ
0791デフォルトの名無しさん
垢版 |
2017/08/07(月) 21:31:15.86ID:DdwwpY1/
一つ言えることは、幼稚園児 ID:OgCRmlag がオレオレ定義したポインタ

> ポインタは、アドレスを意味する値

を誰も支持することはないだろうということ。
0792デフォルトの名無しさん
垢版 |
2017/08/07(月) 21:33:48.90ID:DdwwpY1/
ID:OgCRmlag一人頓珍漢なこと言ってるだけあって、他は言ってること同じということか。
こいつ一人スルーすれば議論するようなことは何もない。
0794デフォルトの名無しさん
垢版 |
2017/08/07(月) 21:39:11.76ID:OgCRmlag
>>793
そうだな、おまえが根拠を示す必要があるな
どこに pointer is an lvalue とあるのか頑張って探せや
0796デフォルトの名無しさん
垢版 |
2017/08/07(月) 21:44:02.82ID:DdwwpY1/
そもそも質問者は定義を聞いているんじゃない。使い道を聞いているんだ。
printf()で使う。これで答えのはずだ。

それなのにおまえらは規格書も読まずオレオレ定義を展開しやがって。
0797デフォルトの名無しさん
垢版 |
2017/08/07(月) 21:45:41.08ID:OgCRmlag
手帳申請しろとまで言っといて
都合が悪くなったら手のひら返ししてるアフォはスルー
0798デフォルトの名無しさん
垢版 |
2017/08/07(月) 21:46:23.64ID:OgCRmlag
まあ、俺じゃねえって言い訳しかできねえだろうなw
0801デフォルトの名無しさん
垢版 |
2017/08/07(月) 21:52:43.06ID:OgCRmlag
751
0803デフォルトの名無しさん
垢版 |
2017/08/07(月) 21:55:26.92ID:OgCRmlag
やーい直球の罵倒語しか言うことなくなってやんのwwwwwwwww
0807デフォルトの名無しさん
垢版 |
2017/08/07(月) 21:59:33.21ID:OgCRmlag
スルーされてる約1名が相手して貰えている人をクリティカル嫉妬wwww
0810デフォルトの名無しさん
垢版 |
2017/08/07(月) 22:06:55.11ID:OgCRmlag
んなこたどうでもいい
&演算子が生じる結果は左辺値なのかよ?
6.5.3.2 にはそんなこと書いてねえぞボケこら
0811デフォルトの名無しさん
垢版 |
2017/08/07(月) 22:11:16.54ID:OgCRmlag
        ゴガギーン
             ドッカン
         m    ドッカン
  =====) ))         ☆
      ∧_∧ | |         /          / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     (   )| |_____    ∧_∧   <  おらっ!出てこいID:DdwwpY1/
     「 ⌒ ̄ |   |    ||   (´Д` )    \___________
     |   /  ̄   |    |/    「    \
     |   | |    |    ||    ||   /\\
     |    | |    |    |  へ//|  |  | |
     |    | |    ロ|ロ   |/,へ \|  |  | |
     | ∧ | |    |    |/  \  / ( )
     | | | |〈    |    |     | |
     / / / / |  /  |    〈|     | |
    / /  / / |    |    ||      | |
   / / / / =-----=--------     | |
0815デフォルトの名無しさん
垢版 |
2017/08/07(月) 22:34:35.17ID:OgCRmlag
手帳所持者は逃げたかwww
0817片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/08/07(月) 22:40:09.74ID:uTywTMsC
>>816
現状、どんな言語でも駄目。量子コンピュータで計算の概念が再定義される位のことが起こらないと無理。
0819片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/08/07(月) 22:59:26.14ID:uTywTMsC
おそらく、量子コンピュータや生物コンピュータでも計算不能だろう。
0820デフォルトの名無しさん
垢版 |
2017/08/07(月) 23:09:18.43ID:nw7xsMvr
だからこんなキチガイはスルーしろと言ったのに…
ただのキチガイなんだから
0824デフォルトの名無しさん
垢版 |
2017/08/08(火) 00:45:20.16ID:eouAXJYK
>>775
> おまえまさか「配列を渡した」とか思ってるのか?

配列名がどのように扱われるか知らないのか 完全なガイジ
とっとと手帳申請しろ
0827デフォルトの名無しさん
垢版 |
2017/08/08(火) 01:47:17.25ID:uStlgM0t
>>826
いや馬鹿は>>778が読解力なさすぎと指摘されているのに同じ解釈を繰り返している>>823でしょ。
ID:r7C/NYo5はcompが変数であることは否定していないし、その前の議論は(変数へのポインタではなく)関数へのポインタが存在するかどうかだ
0828デフォルトの名無しさん
垢版 |
2017/08/08(火) 01:57:36.64ID:t5Eof3Jx
>>823
compそのものは変数だけど、関数を指しているポインタでしょ?
ID:Uo4tfgNRが関数へのポインタが存在しないって主張していらっしゃるようだから示しただけだよ

>>774の「(変数じゃなくて)関数へのポインタ」
の「変数じゃなくて」は「ポインタが変数でない」と言っているのでなくはなく「ポインタの指す先が変数でなく関数」と言っていると思うんだけど違うかいな?
A pointer is a variable that contains the address of another variable. の最初のvariableじゃなくてanother variable の方ってことね
0833デフォルトの名無しさん
垢版 |
2017/08/08(火) 02:10:43.85ID:geODKJHF
関数は変数じゃないと言うのは理解出来るけど
関数へのポインタが変数じゃないと考えている人がいるようなので
0836デフォルトの名無しさん
垢版 |
2017/08/08(火) 02:27:16.73ID:geODKJHF
違うなら良いんです

ポインタは変数じゃないと結論が出るかどうかを楽しみにしているだけなので
0837デフォルトの名無しさん
垢版 |
2017/08/08(火) 03:43:17.45ID:eouAXJYK
>>828
「ポインタは変数である」
と言う文脈で「ポインタの指すものが変数じゃ無いものがある」と言い出すガイジが存在するって言ってるのか?
0839デフォルトの名無しさん
垢版 |
2017/08/08(火) 04:10:20.00ID:geODKJHF
議論になっているのは、
「ポインタは変数ではない」あるいは
「ポインタには変数で無いものが存在する」ってことかな?

どちらにしても、何か違和感を感じざるを得ません
0840デフォルトの名無しさん
垢版 |
2017/08/08(火) 05:31:31.11ID:fn/KDcW/
ポインタという言葉が、ポインタ型かポインタ変数かどちらのことを意味しているのかは文脈次第
関数へのポインタ云々の主張はポインタ型のことを言っているし、ポインタは変数云々の主張はポインタ変数のことを言っている
両者を混同して議論しているから混乱する

JIS X 3010
ポインタ型(pointer type)は,被参照型(referenced type)と呼ぶ関数型,オブジェクト型又は不完全型から派生することができる。
ポインタ型は,被参照型の実体を参照するための値をもつオブジェクトを表す。被参照型Tから派生されるポインタ型は,“Tへのポインタ”と呼ぶ。
被参照型からポインタ型を構成することを“ポインタ型派生”と呼ぶ。

例)
関数型
 被参照型 : void func(void), int func(int)
 ポインタ型 : void (*func)(void), int (*func)(int)

オブジェクト型
 被参照型 : int, double, array[]
 ポインタ型 : int*, double*, array

不完全型
 被参照型 : void
 ポインタ型 : void*
0841デフォルトの名無しさん
垢版 |
2017/08/08(火) 06:09:26.13ID:/vaNLRRA
>>824
ははは、ほとぼりが冷めるのを待って出てきたか

 負 け 犬 め

&演算子が生じる結果は左辺値なのかよ?
6.5.3.2 にはそんなこと書いてねえぞボケこら

そのまま引っ込んでれば逃げられるのに
バカなやつw
0843デフォルトの名無しさん
垢版 |
2017/08/08(火) 07:36:06.14ID:Ya8H5zzs
こんなんじゃラチがあかんやろ
厳密な言語仕様規定用のメタランゲージで
Cのポインタ概念説明したれ

そんなん難しすぎて多分読めんけどな…わははは
0846デフォルトの名無しさん
垢版 |
2017/08/08(火) 08:14:46.20ID:cPrpCtT/
pgr
0848デフォルトの名無しさん
垢版 |
2017/08/08(火) 08:31:21.70ID:eouAXJYK
>>841
&演算子ってなんだよ
お前も見えてないものが見えてるのか
とっとと手帳申請しろ

> printf("Hello, C world!\n"); これがポインタだっ どやっ
0849336
垢版 |
2017/08/08(火) 08:37:44.58ID:YrE6LFRr
しつこい。次レスした方が負けね。
0850デフォルトの名無しさん
垢版 |
2017/08/08(火) 08:47:52.68ID:0o9xOItj
>>837
「ポインタは変数の位置を示す変数である」っていう文脈は飽きたのか?w

文脈のすり替えは辞めろガイジ
0852デフォルトの名無しさん
垢版 |
2017/08/08(火) 09:28:08.76ID:eouAXJYK
>>850
それに文句があるなら、その先の章も読んだ上で、カーニハンとリッチーに言え
K&R 1stで学んだんだろ w ガイジ
0853デフォルトの名無しさん
垢版 |
2017/08/08(火) 09:30:49.19ID:uN6BnjID
ポインタが変数かどうかとか言ってるのって>>778か?
そしてそれにレスしてるID:OgCRmlagか?

それ以前は居なかったような
0854デフォルトの名無しさん
垢版 |
2017/08/08(火) 09:34:31.83ID:2fnixEy5
有用な情報としては>>840があって、残りのほとんどは子供の喧嘩とそれをからかっている周囲の茶々だから、スルーしとけばいいよ。
0855デフォルトの名無しさん
垢版 |
2017/08/08(火) 09:38:26.73ID:eouAXJYK
>>854
>>840こそポインタと配列を混同する諸悪の根源
ポインタ型をポインタと呼ぶ事で、配列とポインタの区別が出来ない、ID:OgCRmlagのようなガイジが量産される
0856IDコロコロ変わるな
垢版 |
2017/08/08(火) 09:39:36.53ID:oLfqgxcT
>>852
「それ」って「A pointer is a variable that contains the address of another variable. 」のことか?
そこには文句ないよ。
勝手に「ポインタが変数かどうか」とかいう文脈にすり替えたことには文句があるけどな
0859C言語ますたー《ますたー軍団(常時募集)の長》 ◆oa6k//3vOQ
垢版 |
2017/08/08(火) 16:47:33.39ID:46jc69TQ
質問がある奴はVIPに来れば大体俺がいるよプゲラwww
0861デフォルトの名無しさん
垢版 |
2017/08/08(火) 21:06:09.48ID:SUxfydq2
> 7 名前:C言語ますたー《ますたー軍団(常時募集)の長》 ◆oa6k//3vOQ [sage] 投稿日:2017/08/08(火) 17:06:43.43 ID:46jc69TQ [1/3]
> アセンブラを1行ずつ実行するにはとうやってやればいいんだろう?
> エミュレータぐらいしか思いつかないわ

> 11 返信:C言語ますたー《ますたー軍団(常時募集)の長》 ◆oa6k//3vOQ [] 投稿日:2017/08/08(火) 20:06:57.31 ID:46jc69TQ [3/3]
> windowsの場合APIが用意されてるだろ?
> あれ1行ずつの実行って出来なくね?
> CPUの方にデバッグの機能がついているのだろうか…

こいつド素人。
0862アムドクラス (4f6c-czis 110.132.254.159)
垢版 |
2017/08/08(火) 21:50:07.01ID:z5MuZpZP
AMDの勝ち
0865デフォルトの名無しさん
垢版 |
2017/08/08(火) 22:18:43.73ID:O3M4HeCn
この場合printf関数の引数は、被参照型 文字列リテラル オブジェクトから派生されたポインタ型のオブジェクト
0868デフォルトの名無しさん
垢版 |
2017/08/08(火) 22:25:41.34ID:HehkFpa6
>>866
>>840を見直して来い
JIS X 3010で使用されている用語だ
勿論オブジェクト指向とは何の関係もない
ていうかK&Rでもオブジェクトという用語は使われていた気がする
0869デフォルトの名無しさん
垢版 |
2017/08/08(火) 22:35:05.98ID:0hOvAoxM
しらん
まぎらわしい言い方してるから自分の頭も混乱するんだ

文字列リテラルからポインタ型が派生するのって変じゃないか
ポインタのほうが汎用的だし逆だろ
0870デフォルトの名無しさん
垢版 |
2017/08/08(火) 22:48:27.60ID:4AThmWF1
>>869
抽象的思考のできない奴だな
intからint*を派生するのと同じことを言ってるだけ
派生されたポインタ型を変数に代入したものがポインタ変数
お前の言うポインタとはいったい何だ?
0871デフォルトの名無しさん
垢版 |
2017/08/08(火) 22:54:10.15ID:uStlgM0t
い、いやー。object自体は本当にK&Rに書いてあったよ
オブジェクト志向登場以前から使われてきたんじゃないかな?
0874デフォルトの名無しさん
垢版 |
2017/08/08(火) 23:06:23.25ID:ORaXP+Gp
曜日の頭文字

#include<stdio.h>
int main(void){
int w = 3;
printf("%c\n", "SMTWTFS"[w]);
return 0;
}
0875デフォルトの名無しさん
垢版 |
2017/08/08(火) 23:15:50.51ID:yrQEUEp6
C言語で派生って言ったら型の派生の事だな
少なくとも型変換の意味ではない

配列型の式(文字列リテラル)が型変換されて非左辺値なポインタ型の式になるんだろ
>>866は変換前後ともオブジェクトだって言ってるけど
アドレス付け可能な領域に保存されている保証のないものがオブジェクトなの?
0877デフォルトの名無しさん
垢版 |
2017/08/08(火) 23:23:10.94ID:fmd6E2St
何に盛り上がってるのかよくわからんけど
C言語だってオブジェクトはオブジェクトって呼ばれてる。
K&Rにも書かれている。
もちろん普通名詞のオブジェクトね
0878デフォルトの名無しさん
垢版 |
2017/08/08(火) 23:30:11.34ID:O87Z3HpH
張っておくか
>>840から転載
JIS X 3010
ポインタ型(pointer type)は,被参照型(referenced type)と呼ぶ関数型,オブジェクト型又は不完全型から派生することができる。
ポインタ型は,被参照型の実体を参照するための値をもつオブジェクトを表す。被参照型Tから派生されるポインタ型は,“Tへのポインタ”と呼ぶ。
被参照型からポインタ型を構成することを“ポインタ型派生”と呼ぶ。
0879デフォルトの名無しさん
垢版 |
2017/08/08(火) 23:37:29.99ID:0hOvAoxM
日本語的に派生って言ったら亜種ができることじゃん

double と *double って全然意味ちがうだろ
JavaとかでいったらObjectとRef<Object>ぐらいちがう
アドレスという概念をもちだして、多少関係してる違う型つくってるんじゃないか

JISがまちがってる
0880デフォルトの名無しさん
垢版 |
2017/08/08(火) 23:45:35.34ID:yrQEUEp6
JISは間違ってない
構文上、型指定子に*は含まれない
宣言子で*を付けることで被参照型からポインタ型に派生させているのだから、型の派生で合っている

>>865は間違ってる
この場合は派生ではなく型変換
0881デフォルトの名無しさん
垢版 |
2017/08/08(火) 23:56:11.53ID:0hOvAoxM
文字列リテラル オブジェクトはたぶん中身の文字データのことだろう
定義にしたがうと
それへのポインタは文字列リテラルから派生したポインタだからいいんじゃないの
0882デフォルトの名無しさん
垢版 |
2017/08/09(水) 00:05:11.01ID:bnFISF+U
普通名詞としての派生なら良いんじゃねーの

規格で定義されている派生として言ってるなら間違いってだけ
派生は型に対しての規則であって型を持つ式(オブジェクト)は派生しない、派生型に型変換されるだけ
0883デフォルトの名無しさん
垢版 |
2017/08/09(水) 00:14:48.77ID:ckc2uc+D
型変換であろうとポインタ型派生であろうとポインタ型である結果は同じことではないの?
0884デフォルトの名無しさん
垢版 |
2017/08/09(水) 00:16:45.80ID:sYRFpLtr
世間に通じない用語を振りかざして些末な定義や言葉尻について無益な議論をしていると
大学時代を思い出してほっこりする
0885C言語ますたー《ますたー軍団(常時募集)の長》 ◆oa6k//3vOQ
垢版 |
2017/08/09(水) 00:25:37.15ID:s1XZJ5Nh
>>861
なんで粘着されてんだよ…
あとこれの何がダメなんだ?
お前らデバッガのステップ実行に興味ないの?
ちょっと調べた所ではint 1で行けるかもぐらいか
0888デフォルトの名無しさん
垢版 |
2017/08/09(水) 00:31:28.95ID:8y5srZEo
用語オブジェクトについての哲学的な論考や定義そのものがJISには載ってなさそうだな

深く考えずに音写しただけ
だからカタカナの用語になってる
0890片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/08/09(水) 00:35:31.88ID:bb8twRCP
>>887
バージョンやエディションによって使える機能が違う。気にせず使いたいなら、「買え」
0894デフォルトの名無しさん
垢版 |
2017/08/09(水) 00:46:00.24ID:7zaXDMDr
>>893
あなた様も障害者手帳の申請をする事をお勧めするしだいで御座いまする。

まず、頭脳が残念過ぎまする。
そして、頭脳が残念過ぎまする。
加えて、頭脳が残念過ぎまする。
きっと、高い等級で認定されると愚考致しまする。

敬具
0895C言語ますたー《ますたー軍団(常時募集)の長》 ◆oa6k//3vOQ
垢版 |
2017/08/09(水) 00:46:00.43ID:s1XZJ5Nh
ポインタの話題ならアセンブラやった方が早いと思うんだよね
ポインタとして宣言された変数は32bit環境なら4バイト、64bitなら8バイトのメモリが確保されるだけだが、配列の場合、サイズ×添字の分メモリが確保されて、配列名がその先頭アドレスをあらわすってだけなのに
0900C言語ますたー《ますたー軍団(常時募集)の長》 ◆oa6k//3vOQ
垢版 |
2017/08/09(水) 01:06:30.01ID:s1XZJ5Nh
>>899
一応LinuxはUbuntuならあるよ
やっぱりLinux勉強しとくべきかな?
0907デフォルトの名無しさん
垢版 |
2017/08/09(水) 05:25:27.23ID:J9yCSat5
てす
0911C言語ますたー《ますたー軍団(常時募集)の長》 ◆oa6k//3vOQ
垢版 |
2017/08/09(水) 11:32:53.54ID:s1XZJ5Nh
>>908
なんだー
>>910
だからLinuxじゃなくてwinなんだよww
Linuxは箱庭でしか動かんわ
0913デフォルトの名無しさん
垢版 |
2017/08/09(水) 11:38:08.60ID:deJRgLks
Cなのにスマタさん。特権プレイモードってのがあるんですよ。Winの起動オプションをよく見てください。
0915C言語ますたー ◆oa6k//3vOQ
垢版 |
2017/08/09(水) 11:41:46.58ID:s1XZJ5Nh
>>913
ほー有益な情報をありがとう
それだとどんなコマンドが使えるの?
0916C言語ますたー ◆oa6k//3vOQ
垢版 |
2017/08/09(水) 11:42:09.25ID:s1XZJ5Nh
>>914
あ、マジで?
勉強不足だわ…
0919C言語ますたー ◆oa6k//3vOQ
垢版 |
2017/08/09(水) 11:57:25.81ID:s1XZJ5Nh
ちょっと調べてみたんだがgdbはソースがあって、-gオプションでデバッグ情報を生成したときのみ使えるコマンドじゃん
俺がデバッグしたいのはただの実行可能ファイルなんだ…
0920デフォルトの名無しさん
垢版 |
2017/08/09(水) 12:02:30.41ID:J9yCSat5
>>848
案の定w
もう、とぼける位しかできねえボコボコだもんなおまえ

841に6.5.3.2と書いてあるのがどういう意味か
見当もつかない赤っ恥に気づきもしないからこそ
それでとぼけたつもりになっているんだろう

 浅 は か な や つ w
0921デフォルトの名無しさん
垢版 |
2017/08/09(水) 12:22:51.13ID:6bCVBseb
>>919
行番号やデバッグシンボルが見られないだけで、gdb自体は使える
ollydbgやらにしても、任意の場所で止めたければ、ブレークポイント張れば済むだろ
0922C言語ますたー ◆oa6k//3vOQ
垢版 |
2017/08/09(水) 12:37:30.55ID:s1XZJ5Nh
>>921
おお使えたわw
でも実行ファイル側が入力待ち状態なんだけどデバッガ操作できない…
当たり前かここら辺はどうやって追えばいいんだろうか
手前にブレークポイント作ってステップインかな?
0924デフォルトの名無しさん
垢版 |
2017/08/09(水) 12:42:14.46ID:J9yCSat5
いるよなー
GNUはハッカーのものだってことを忘れてるやつ
0925C言語ますたー ◆oa6k//3vOQ
垢版 |
2017/08/09(水) 12:55:30.37ID:s1XZJ5Nh
最初っからステップインで実行したいんだけどシンボルテーブルが無いおかげでブレークポイント作れないからアドレス0x00400AFFにCCを入れて実行開始アドレスを0x00400AFFに書き換えたんだけどローダが読んでくれないみたい…
アドバイスありませんかね
0927C言語ますたー ◆oa6k//3vOQ
垢版 |
2017/08/09(水) 13:31:17.32ID:s1XZJ5Nh
>>926
どうもデバッグ情報がないから無理っぽい…?

で、仕方なく開始アドレスにバイナリエディタでCC入れて止めてみたんだけど、デバッグ情報がないせいで’s’コマンドが実行できない
”cannot find bounds of function."って出るんだけど、ググったらデバッグ情報がないとこうなるみたい
gdbじゃexeのシングルステップ実行は無理なんじゃ…

とりあえずネットで調べながら自分でシングルステップ実行するプログラム作ったんだけど、デバッグイベント起こらなくてWaitForDebugEvent関数で止まるwww
どうすりゃデバッグイベント起こせるんだよ
0928C言語ますたー ◆oa6k//3vOQ
垢版 |
2017/08/09(水) 14:44:13.23ID:s1XZJ5Nh
しょぼいデバッガみたいのは動いたけどシングルステップ実行にならん…
なぜだ
0929デフォルトの名無しさん
垢版 |
2017/08/09(水) 15:31:30.38ID:WoeKVDyE
なんで実行する必要があるんだ? 逆アセンブルしてソースコードを起こせばいいでしょ。
0930C言語ますたー ◆oa6k//3vOQ
垢版 |
2017/08/09(水) 15:43:21.53ID:s1XZJ5Nh
>>929
そんな膨大なコードから目的の部分が見つかるわけないでしょ
0931デフォルトの名無しさん
垢版 |
2017/08/09(水) 16:28:28.13ID:7zaXDMDr
>>920
で、それがどうしたんだ?

> printf("Hello, C world!\n"); これがポインタだっ どやっ
手帳申請しろよ w
0932デフォルトの名無しさん
垢版 |
2017/08/09(水) 16:37:22.13ID:7zaXDMDr
>>920
この、ガイジは全然理解してない事を理解できずにガイジを再生産しようとしたやがる

> printf("Hello, C world!\n"); これがポインタだっ どやっ
これは、ポインタじゃなくてポインタ型
そしてそれは、ポインタと配列を区別出来ないガイジの本質

役所には盆休みはないから、休みのうちに手帳申請しとけよ
0933デフォルトの名無しさん
垢版 |
2017/08/09(水) 16:46:18.30ID:J9yCSat5
> これは、ポインタじゃなくてポインタ型

失笑
「ポインタと配列を区別出来ないガイジの本質」を
そのままお返しだ、さあ受け取れアフォ
0934デフォルトの名無しさん
垢版 |
2017/08/09(水) 16:49:08.32ID:J9yCSat5
こーゆー手合いは、こっちから攻め込まなくても
時間稼ぎしてれば勝手に自爆してくれるから楽だ
0935C言語ますたー ◆oa6k//3vOQ
垢版 |
2017/08/09(水) 16:49:25.49ID:s1XZJ5Nh
機械語のシングルステップ実行に成功した
けどレジスタとか表示させるのにまたプログラム改変しなきゃなんない
面倒臭すぎる
0936デフォルトの名無しさん
垢版 |
2017/08/09(水) 16:51:48.67ID:zUFk2ZAi
配列も文字列リテラルも式の中の評価はポインタ型だからな
引数として評価されると本質は同じことになる
0937デフォルトの名無しさん
垢版 |
2017/08/09(水) 17:00:02.70ID:J9yCSat5
>>936
ちげーよ
assert(sizeof(const char *) == sizeof "string literal"); //abend
0938デフォルトの名無しさん
垢版 |
2017/08/09(水) 17:09:17.76ID:zUFk2ZAi
>>937
それは sizeof 演算子を適用したときの評価結果が異なっているだけだろ
型は同じでもオブジェクトそのものは別なのだから当たり前
0940デフォルトの名無しさん
垢版 |
2017/08/09(水) 17:17:25.80ID:J9yCSat5
>>938
おまえさんはこう言ったんだぜ
> 配列も文字列リテラルも式の中の評価はポインタ型だからな

sizeofつまりunary-expressionは紛れもなく式の1つだ
よって式の中で文字列リテラルがポインタ型というのは正しくない
0941デフォルトの名無しさん
垢版 |
2017/08/09(水) 17:25:24.78ID:YmDhq+hb
>>940
面倒くさい奴だな
正確には>>937の前者は型の評価結果、後者は式の評価結果だ
sizeof演算子は型名に適用する場合と式に適用する場合の二通りの使い方がある
演算子の動作も評価も異なる
0942デフォルトの名無しさん
垢版 |
2017/08/09(水) 17:28:25.59ID:PV13OBMN
前置,後置の ++ や -- は式じゃない ってことないし
>>936 は見てる状況を限定しすぎてないかな?
0943デフォルトの名無しさん
垢版 |
2017/08/09(水) 17:28:34.22ID:J9yCSat5
>>941
ほほー型の評価結果と式の評価結果とな
じゃあこれはどう説明する?
const char* ptr
assert(sizeof ptr == sizeof "string literal"); //abend
0944デフォルトの名無しさん
垢版 |
2017/08/09(水) 17:45:41.64ID:YmDhq+hb
>>943
それは式同士の評価結果の比較
ポインタ型のオブジェクト同士を比較してる
int型変数の場合、iと(i+1)のとき評価結果は異なるが、型は同じというのと同じ
0945デフォルトの名無しさん
垢版 |
2017/08/09(水) 17:49:19.66ID:J9yCSat5
>>944
えっ!?
assert(sizeof ptr == sizeof("string literal" + 1)); //pass
おまえさん、これが通るのは何が変わったというんだ?
0947デフォルトの名無しさん
垢版 |
2017/08/09(水) 19:46:02.23ID:J9yCSat5
ん? ガイジの称号はお返ししただろ、ガイジ君
0950デフォルトの名無しさん
垢版 |
2017/08/09(水) 21:07:56.63ID:8y5srZEo
クソ下らんことが141000レスも続いてんだぞ
14万だ
過去スレなんて見た日にゃ目がつぶれてそのまま気絶だ
0951デフォルトの名無しさん
垢版 |
2017/08/09(水) 21:09:32.99ID:7zaXDMDr
ガイジID:7zaXDMDrは必死になって、
> printf("Hello, C world!\n"); これがポインタだっ どやっ
これを否定するネタを探してきたらしいが
あてにならない(どうとでも取れる)JIS規格票は根拠にならんぞ

> A pointer is a variable that contains the address of another variable.
文字列は変数じゃない
従ってポインタじゃない これは神が決めた事
0953デフォルトの名無しさん
垢版 |
2017/08/09(水) 21:52:53.42ID:NuBALnab
>>939
配列の時点でスタックに確保されてるけど
それとは別のスタック領域にコピーとして渡したいってことなら構造体かな
0954デフォルトの名無しさん
垢版 |
2017/08/09(水) 22:15:20.36ID:aUjAPhEK
このスレは必ず絡んでくるやつが居るな
しかも延々とな

レスされて「この野郎!」と思った時には、深呼吸して落ち着こう。
そしてこうつぶやくのだ「相手にするなヨシオ」とな
0955デフォルトの名無しさん
垢版 |
2017/08/09(水) 22:24:18.50ID:J9yCSat5
>>951
ははは、JISつまりISO/IECの和訳はおまえの敵か
自らの死刑宣告を読み上げていることに気付いているのか
0957デフォルトの名無しさん
垢版 |
2017/08/09(水) 22:28:54.98ID:J9yCSat5
個人攻撃は、俺もそんなことしにきているわけじゃないんだが
喧嘩売ってくる馬鹿がいるとき、場合によるが応戦することもある
俺には9条みたいなふざけた縛りはない、それだけのことだ

技術的なことを言うたびにもれなく失笑させてくれる
民進党のブーメラン屋みたいなマゾ野郎がいるから、
ちょっとSっ気出ちまってるんだよ
0959デフォルトの名無しさん
垢版 |
2017/08/10(木) 00:08:19.99ID:Ahb0l/jg
>>955
ガイジだからわからないんだろうけど、JISもISO/IECも「ポインタ」をいろいろな意味で使っている
ガイジ君はその中の都合の良いところだけ読んだだけ

神の定義と違って「ポインタとは〜〜」というのが無いって気付いて無いんだろうな ガイジだから

実は曖昧さを排除した定義があるがそれは、これだ
6.7.6 Declarators
Syntax
pointer:
* type-qualifier-list opt
* type-qualifier-list opt pointer

つまり規格票でいうポインタとは宣言の中にあらわれる「* [const]」の繰り返しだ w

ガイジ君が規格票を拠り所にした瞬間に
> printf("Hello, C world!\n"); これがポインタだっ どやっ
は、やっぱりお笑いだ わかったら明日手帳申請にいくんだぞ ガイジ
0960C言語ますたー ◆oa6k//3vOQ
垢版 |
2017/08/10(木) 00:15:28.54ID:Wh1e+mJZ
これただのBNFですやん
定義じゃなくて文法
0961C言語ますたー ◆oa6k//3vOQ
垢版 |
2017/08/10(木) 00:16:03.76ID:Wh1e+mJZ
あ、ごめんなんでもない
アスペかました
0963C言語ますたー ◆oa6k//3vOQ
垢版 |
2017/08/10(木) 00:27:01.19ID:Wh1e+mJZ
(俺のことじゃないよな…)(´・ω・`)
0967デフォルトの名無しさん
垢版 |
2017/08/10(木) 08:25:53.10ID:oM3wka/1
>>959
英語でDeclaratorsって書いてあるの意味わかってる?
リテラルは宣言して使うものじゃないんで、
そこは全然関係ない

 ア フ ォ w w w
0968デフォルトの名無しさん
垢版 |
2017/08/10(木) 08:29:30.77ID:l1OSsrCe
>>953
そそ
複製を渡して
よばれた関数内での値の書き換えが呼び出し元に伝わらない形が気になってた
0969デフォルトの名無しさん
垢版 |
2017/08/10(木) 10:25:39.89ID:Ahb0l/jg
>>967
pointerの定義は規格票の中でこれしか無いって言ってるんだよ 他は定義せずに使っている

ガイジはどこまで言ってもガイジだな
0971デフォルトの名無しさん
垢版 |
2017/08/10(木) 11:16:07.94ID:O+DiuWEO

0973C言語ますたー《ますたー軍団(常時募集)の長》 ◆oa6k//3vOQ
垢版 |
2017/08/10(木) 11:44:33.00ID:Wh1e+mJZ
メモリ上のアドレスを格納する変数
0976デフォルトの名無しさん
垢版 |
2017/08/10(木) 11:57:50.46ID:O+DiuWEO
>>973
よくある実装ではそうだろうけど必ずしもメモリ上のアドレスでなくてもよかったような?
例えば(何か特殊な事情がないとこんな実装はしないだろうけど)ファイルでもいいんだよね。
*p ってやった時にアクセスできればいいだけだから。そういうアクセスになるようにコンパイルされればそう動く。
0979C言語ますたー《ますたー軍団(常時募集)の長》 ◆oa6k//3vOQ
垢版 |
2017/08/10(木) 12:45:43.96ID:Wh1e+mJZ
>>974
学歴?
>>975
いや、ポインタ自体はただのアドレスだよ
厳密に言えば論理アドレス(物理アドレスでは無い)
ファイルってのは構造体に過ぎないわけで、windowsならFILE構造体ってのが用意されてる
だから、FILE *fp;と書けば、fpはただのアドレスだけど、その指す先はFILE構造体のサイズ分のメモリ領域となる
0982デフォルトの名無しさん
垢版 |
2017/08/10(木) 14:11:24.78ID:oM3wka/1
>>969
ポインタとは何かという「定義」と、
宣言のうち実体を作る「定義」を混同しているわけね

 ア フ ォ w w w
0983デフォルトの名無しさん
垢版 |
2017/08/10(木) 15:54:14.88ID:PuWYnGyf
ahoとは何かと言う定義と実装された目前のahoの違い
&でアドレス取ろうとしたら住所不定であったでござるw
0984デフォルトの名無しさん
垢版 |
2017/08/10(木) 16:21:59.47ID:oM3wka/1
それはlvalueを除くvalue of an expressionだね
&969; //erroneous
0987デフォルトの名無しさん
垢版 |
2017/08/10(木) 18:00:55.34ID:oM3wka/1
char const **s; // **s を修飾
char * const *s; // *s を修飾
char ** const s; // s を修飾

これなら左と右を間違えたで済むが
あの文面はそうじゃない
0989デフォルトの名無しさん
垢版 |
2017/08/10(木) 20:24:22.06ID:IhVgxvD4
char const * array = xxx
って初期化したあとで
配列とポインタの区別ってつく?
0990デフォルトの名無しさん
垢版 |
2017/08/10(木) 20:28:53.63ID:iazj7Dc9
>>982
「ポインタ」はただの単語だ
それに意味を与えることが「定義」

> ポインタとは何かという「定義」と、
> 宣言のうち実体を作る「定義」を混同しているわけね
前者後者で意味を分けるって事はお前が「定義」したって事だ

ガイジのお前がな w
0991デフォルトの名無しさん
垢版 |
2017/08/10(木) 20:29:20.75ID:sSyWFoa+
>>988
0992デフォルトの名無しさん
垢版 |
2017/08/10(木) 20:41:57.65ID:QtKgWI2k
>>987
ポインタの型修飾子は左側の*(ポインタ型)への修飾であってるだろ
右側のsを修飾したら識別子への修飾になってしまう

型指定の方のconstは構文規則が違うから、一緒に語ること自体がアレだけど
0996デフォルトの名無しさん
垢版 |
2017/08/10(木) 21:10:04.72ID:iazj7Dc9
> printf("Hello, C world!\n"); これがポインタだっ どやっ
やはり、これはガイジが自分で定義した「ポインタ」の説明だったな
0997デフォルトの名無しさん
垢版 |
2017/08/10(木) 21:25:49.94ID:dUeZi9GF
ワッチョイ無しでスレ立て直せ
0999C言語ますたー《ますたー軍団(常時募集)の長》 ◆oa6k//3vOQ
垢版 |
2017/08/10(木) 21:37:35.20ID:Wh1e+mJZ
1000欲しいな
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
life time: 24日 0時間 31分 31秒
10021002
垢版 |
Over 1000Thread
2ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 2ちゃんねる専用ブラウザからの広告除去
★ 2ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.2ch.net/

▼ 浪人ログインはこちら ▼
https://login.2ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。

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