C言語なら俺に聞け 141 [無断転載禁止]©2ch.net
レス数が1000を超えています。これ以上書き込みはできません。
>>1
乙
>>994
>だからgotoでどうやってやるんだよ
>戻り番地の意味わかる?
できないわけがないってw gotoで飛んでgotoで戻りゃいいんだから
非同期なら別関数にする必要があるが プログラムカウンタをスタックに積まないでコール元に戻れるわけ無いだろ
プログラムの動作原理を知らなさ過ぎる 逆に関数内関数じゃないとできない処理ってどんなの? 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しか使って無いからこれが糞だと認識できないんだよ多分。 前スレ>>995
990にレスが付いているのはヘッダについてか?
それなら俺はGCCに「自動ヘッダ生成器」を組み込んでくれよと思う。
というかCはヘッダで妙なトリック使いすぎてて自動生成できる状況ではないのだとは思うが、
それなら足りない関数だけでも自動で追加してくれよ、と思う。
つっても「後方参照」できるようになれば解決する話で、
マジでこれをいまだに放置している理由はよく分からん。
というか、俺に反論している連中ですらこれについては多分賛成なんだよな?
「後方参照」出来ない方がいいんだ!って理由がある奴っていないだろ。
だからこそ、Pythonが出来ないのがアホすぎて際立つわけでね。 前後を理解してないバカは参加するな
ID:LYlgQVUQ お前のことだ >>11
お、確かにそうだな。
俺はワッチョイありの新スレが立ったらそっちに動くって事で問題ない。
(つってももうこの話は終わりそうだが) >>4
> gotoで戻りゃいいんだから
だからどこに戻るんだよ? w
> 非同期なら別関数にする必要があるが
戻り番地も知らん奴が非同期とか笑えるわ
>>7
ないでしょ
ローカル変数でないとできない処理を聞いてるのと同じ >>13
だからできるでしょ
俺は同じようには書けないが同じ処理はできると言ってるの
新たにスタック積む話なんか初めからしてないぞw >>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知らんだけ x86なら ENTER/LEAVEで実装されているな
出来るっていうならコードで示せよ >>14
void f( ){
void g( ){
...
}
g();
g();
}
goto 使って同じ処理書いてみろよ / ̄\
| |
\_/
| __
┴´ ``ヽ
/::::::::::|:::::: `ヽ gotoで戻りゃいいんだから!!
/:::\::::::::<● > `ヽ
(( / <●>::::::::::⌒ )
| ⌒(_人__) ノ | |
ヽ )vvノ: / ノノ
ヽ (__ン 人
人 \
/ >>15
だからそれはできるうちに入らないんだよ。
どうにもPython信者には通じないようだが。 >>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");
} ID:PKmAGp8Mはプログラムの動作原理なーんも分かってない >>15で出来るうちに入らないとかいちゃもんつけたいだけやん
それCで関数の外にprintf書いてコンパイル通らなくて発狂してるようなもんだから いや、こんなこと書いたら揚げ足とってアホ認定されそうだから重ねておくけど、上のレスではコードの見た目の話に話を絞ってある
その範囲では、関数外に書いても通るだけ有難く思うべきである >>20
まあ俺はそっちの話にあんまり突っ込む気はないんだけどさ、、、
アイデアは理解した。
が、そのラベルの使い方が保障されてるかというと、かなり微妙だと思う。
俺は仕様には詳しく無いからなんともいえないが。
とはいえ、実際はそれで動くケースが大半だとも思う。 >>19
さっきからプロトタイプ宣言を書く書かないの話して、中身で使うだけの関数を下に書ければ見やすい的なことを言ってなかった?
その観点から言って、>>15にどんな問題があるの? >>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は馬鹿用言語だということを自覚しろアホ。 なんか問題あったかい?
ラベルのポインタはGCCとclangは対応してる
標準じゃなく拡張だけどなw >>27
まずCスレでPythonの話題持ち出したお前が何言ってんの?w >>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で出来ない例持ち出して来てら
これアンチしたいだけじゃん >>28
いや、ラベルって「そこから下」に対しては保証されてるが、
「そこから上」って保証されてるか?
まあこの言い方では通じないと思うから具体的に書くと、
(A)
label:
(B)
で(B)側にゴミがない=次の命令がすぐ詰まっていてそこにJUMPすれば動作する
ことは保障されていると思う。これは普通の使い方だから。
ただ、上から流れてきたときに、(A)側にパディングされてたりしないか?というのは微妙で、
x86だとイミディエートに十分な長さがあるから問題ないとして、
16bitとか8bitとかの場合、コード領域にイミディエートを積んでいることは普通にあって、
しかも結構適当な場所に吐かれていた記憶が。
だからコンパイラ側に「ここは明らかに通らない」という風に見える場所はかなり危険かと。
ただし既に言っているが、俺は仕様には詳しく無いから、なんともいえないのだが。 >>29
子関数を下に書いた方が分かりやすいときに、それが出来ないのが問題。
>>31
それは俺の間違いだった。俺が思っていたほどは糞ではないのも事実だ。
ただしやっぱりJavaScriptやCと比べたら糞だよ。
しかしお前らも知っていると思うが、
Pythonの最大の糞ポイントはラムダに式しか書けない事だろ。
つか、糞ポイントがぽこぽこ出せる時点で糞言語なのは確定なんだよマジで。
そしてCやJavaScriptの思想とは対極にあるのがPythonだ。
それを使うのはお前らの自由だが、それをCスレで喚くのはキチガイだ。
C的価値観からするとPythonなんてキチガイ馬鹿用言語だよ。
逆にお前らがPythonスレで
「Cみたいなシートベルトもエアバッグもない車に今更乗れるか!」って
言ってりゃいいんだよ。
というわけでお帰りくださいマジで。
俺は思想的にPythonとは合わないから、自主的に使うことはないと思います。 >>28,33
ああすまん間違えた。確かに問題ない。普通の使い方だ。
俺が勘違いしてた。 >>32
コード領域にイミディエイト積んでいるのは当たり前
イミディエイトは即値
アセンブリコードのニーモニックでオペコードに直接データ(値)を指定するのだから
コード領域にしかイミディエイト値は存在し得ない >>34
そもそも最初にCスレにPythonの話題を書き込んだのは君なのに何言ってんの?
こっちはそもそもPythonを擁護してるんじゃなくて君の言っていることの変な部分を指摘してるだけだぞ >>34
なんか知らんがHaskellみたいな順序に依存しない言語がおまいさんにあってる気がする。 >>36
いや、オペランドの長さが足りなかった場合、
中途半端なところにデータ領域を確保するCPUもあるって事。
>>38
Haskellは意識高すぎて無理だった。
てかあれ、遅延評価以外目新しくないよな?
そしてその遅延評価はC++にテンプレートでパクられてて笑ったが。
あれでC++のテンプレートの汎用性の高さに驚いたよ。
ちなみに、他言語のすごいコードって知ってるか?見てみたいとは思うから。
例えばCなら、LinuxのカーネルやGit(作者同じ)がそうだし、
C++ならchromeやV8が多分そう(といっても割とCらしいが)
PythonやHaskellって喚いているだけで現物がなくね?
所詮スクリプトで使い捨てコードが多いってことか? >>39
PythonアンチカスPythonアンチスレに行け
二度とこのスレでPythonの名を出すな そういやgotoで思い出したが、
マルチレベルbreakはあってもいいと思うけどね。
gotoがあればなあ、ってのは大体このケースだろうし。
オレオレパーサも組めない範囲でもないんだろうけど、
やっぱ誰かががっつりデバッグ済みにしてくれてるのを使いたいよ。 >41
その用途に最も近いのは例外処理のtry-cattch構文だろうな
C言語では使えないけど で
そのCスタイル22k行のコードはどういう書き方をしてたから読みやすかったんだ? >>44
遅いって一体…
try-catch使える独自拡張とかあったっけ? >>46
あー、遅かった気がするのはC++の話だわ
まあ例外処理が速い言語なんてないと思うけどさ >>42
いやtry-catchはだいぶ違うぞ。
てかあれはC的エラー処理とは逆を行っている。
ただ最近は非同期が流行りだしてtry-catchでは対応できなくて
値埋め込み≒C的にはなってきてる。
個人的にはtry-catchは要らないなあ。
マルチレベルブレークはまあ、フラグ使って書けはするが、
見た目汚いから何とかならんのか、といったところ。
どっちかというとショートカット論理に使う。 >>34
Pythonがゴミだからなんなの? わざわざCスレでPythonアンチしていい理由にはならないよね
しかもあんな的外れで何も知らないこと丸わかりなアンチ書き込みしたら対象がどんな言語であっても荒れるに決まってるよね?
帰るのは君だよ >>39
すごいコードってのが分からんが、Haskellのprintfはコード見れるけど全く分からん。
(Hoogleでprintfで検索してソース覗く)
型推論出来れば普通のprintfにも、フォーマット済の文字列欲しい時はsprintf的にも使える関数なんだが。。。 >>51
おうサンクス。見てみたがなるほど分からん。
つっても俺はHaskellの文法も覚えてないレベルなんだが。
ただまあ、その仕様なら、確かに短いのかもね。
GNUのprintfって確か400行程度でgotoが20個くらいあるトンデモコードだったはずだが、
(探したけどすぐには出てこなかった)
それよりも仕様は大きいからねえ。 >>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アプリあったら教えてください。 >>27
LLで関数をオブジェクト扱いするような言語だと宣言前の関数を呼び出せるの相性悪いんだよね
一応確認して見た(シェルスクリプトみたいな特殊なものは無視)
Ruby→呼べない
perl→呼べない
lua→呼べない
PHP→呼べる(ただし、条件分岐内などの文脈で宣言されていない関数のみ)
JavaScriptl→呼べる(関数宣言「文」のみ)
JavaScriptの「巻き上げる」っていう仕様は結局わかりにくくて、ECMAScript以外で採用してる言語はないはず >>53
Pandocは現状かなり知名度あるんじゃないかな
https://github.com/jgm/pandoc
適当にググったらMoongiftのHaskellタグのやつそこそこあった
http://www.moongift.jp/tag/haskell
Pythonに関しては現物を見たことないの常識的にやばいと思うが・・・
機械学習とか数値処理とかの学術系はpython無双だし、Ansibleやyumみたいな管理系統、GUIソフトですらお前Python通って時がちらほら
Googleも社内標準言語にPython入ってて、Githubにもいくつか公開されてるな >>20
それ再起呼び出しに対応できないことぐらいは理解してるよね? >>56
そもそも、Cでは大抵別の関数に切り出すからそんな心配いらんよ >>57
はあ?
ローカル関数でも再起は普通に使うし心配いらんって言われても困るわ
むしろお前の頭の方が心配だよ w >> https://mevius.2ch.net/test/read.cgi/tech/1494508803/990
> しかしヘッダファイルを用意するなんて完全に二度手間だし、
失笑
仕様と実装に分けて管理することが何の二度手間なんだよボケ
APIだとかインターフェイスだとかみんなそうだろうが
> コンパイラが自動的にやれよマジで、と思ったことは無いのか?
あああるよ
内製でサクッと作れてしまうほど簡単なことだからなおまえには簡単じゃないかも知れんがw
> 面倒ならなしでよし、
そうなってるだろうが、まさか知らんのか?
> その場合はコンパイラが勝手に探してくる、
これがおまえの言う「自動化」か
ワードやエクセルが「自動で」いらんことしやがるようなのがコンパイラにもついていて欲しいのかw
俺は反対、ライブラリをバージョン管理してるときなど断りもなく最新だか旧版だかとやられたら殺意がわく
> お前みたいに疑問を持ってない奴
疑問は持つぜ
おまえみたいに間違った正義を説くアホは見逃してねえだろ >>59
無名関数の話なんて誰もしてないから無駄に絡んでこないでくれ まだ続いてたのか……
仕様に不満があるのは理解できた。同意できるかどうかはともかく。
そろそろ、「不満があるから何をしてるのか」という話を聞きたいな。 そもそも個人的にPythonをプログラムと呼ぶのに違和感ある
Pythonはスクリプトだろ お願いします。どうしても、課題ができません。どなたかわかる方いませんか?
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 #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");
} 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;
} Makefileの書き方で質問なんだけど
all: hoge piyo fuga
みたいな行があるとして、 依存ファイルを変数みたいに使いたいんだけど
どう書いたらいいの? いちいち
HOGE := hoge piyo fuga
all: $(HOGE)
みたいに書かないとだめなの? >>66
課題なら、>>68で十分なのだろうけど実務で使うときは幅指定必須なので、先生に聞いとけ〜
%100s%*とかね。 >>69
変数みたいにつかって何したいかわからんな。
makefileってそういうものだとしか、言えない。
依存関係は依存するファイルをコンパイラが出力してくれるから、それをincludeするなんてのも良くある。 >>68
惜しいな。
> fscanf(fp,"weight:%d",&b);
ヒント: % の後。 >>68
もう一箇所。
> fscanf(fp,"e-mail:%s",&str);
> printf("Eメール:ichiro@foo.bar\n",str);
惜しいな。strに読む所は良い。その後、それを出す所。これだと固定の文字列が出るだけだよね。 専門学校一年です
プログラム言語っていくつも必要?応用性ある最強言語一つあればいいんでないの? >>46,48
なんか実装している奴いるぞ。
http://www.nurs.or.jp/~sug/soft/super/longjmp.htm
http://www.nurs.or.jp/~sug/soft/java/java25.htm >>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も糞だと判明しだだけだな。 >>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の意見の正しさを証明している。 Haskellの売りは遅延評価だろ?
ならば、遅延評価がビルトインで提供されているからこそこれだけ簡単に実装できる、
そうでない言語ではかなり辛いことになる、というところで戦わなければ意味が無い。
マークアップコンバータは違うし、そこに挙げられている他12種も同様だ。
Linusの言葉を借りるなら、
> (c) 授業でそういう課題を与えられた者
でしかない。他言語を既に十二分に使えるときに、それらアプリでHaskellを選択する理由がない。
遅延評価の利点は、俺が思うに、適当に書いても速いことだ。
具体的には、超大富豪プログラムを動的に貧民プログラムに変身させられる事だ。
だからチャキチャキ書けないと意味が無いのだが、Haskellはお世辞にもそういう感じではないだろ。
だからHaskell使いがあの程度のアプリしか作れない時点で将来性はないよ。
彼らもそれなりに優秀なはずで、仮に俺が学んだとしても、彼ら以上のものを作るのは容易ではない。
それで作れるものがあの程度?そそられねーな、って感じ。
あのラインナップなら今でも他言語で作れるし、多分そんなに苦労もしない。
とはいえこれはサンプルとしては素晴らしい。ありがとう。
保守されているし、俺が確認したい中位コードは大量に含まれているはずだ。
俺自身が他言語で実装できるだろうというのもいい。オレオレ実装と比較できる。
つまり、言語比較という意味ではかなりいい素材だ。
ただそれ以前に俺はHaskellをほぼ読めないので、読むのはずいぶん先になりそうだ。
これについては申し訳ないね。 > Ansibleやyum
お手軽スクリプトの域を出ないと思う。最悪、シェルスクリプトでも出来る範囲だろ。
C++の現場、たとえばブラウザでは、本当にエグイほど仕様変更が入って、
結果的にソースコードはぼろぼろになっていって、それでも保守している。
だからやっぱりLL言語はLL言語なんだと思うよ。
これだからスクリプターは、、、というのも当たってる。戦場の厳しさの次元が違う。
一通り動かすところまではどの言語を使っても出来る。
その過程で、例えばHaskellの遅延評価のような言語独自のフィーチャーがあり、
それを生かせれば素晴らしい。
しかしPythonにはそもそもそれがない。特に可もなく不可もなく、的な言語だ。
そして問題はそこから先で、
当初想定してなかった仕様変更が入ってきたときどこまで耐えられるかなのだが、
これに関してはPythonは不可も無いのだからそれなりではある。(悪くはない)
(なおJavaScriptはデタラメなパッチで一時しのぎする方法には事欠かないため、
俺はこの点も気に入っている)
エコシステムが云々、というのはおいておいて、
言語自体の能力で言えば、Pythonを積極的に選ぶ理由が一つもない。
とはいえ他言語は色々尖っていることも多いので、消極的にPythonってのもありだとは思うし、
実際そこにポジションしているとも思うが。Javaに近いというか。
両言語ともそれで繁栄しているのだから間違いでもないわけだが。 >>75
そーいう発想は大事
大きいプログラムも小さいプログラムも
スケーラブルに書けるほうが良い!
というのが動機で出来た言語があるにはある Cは大も小もなんでも書けるよ
ただ工数がかかるけど 確かにCはなんでも書ける。
きめ細かくハードウェアに密接するようなのも書ける。
OSやデバイスドライバも書ける。
OSなし環境向けの組み込み用マイコンボードのROMに書くプログラムなんかも書ける。
逆にいうと、きめ細かくしか書けない。それなりのライブラリが用意されてないと作るのが大変。 >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あり→■
みたいに非直感的な挙動になって一貫性が失われる。そう考えると、言語全体の仕様の見直しが必要になって・・・
と考えてくと、評価時に定義されるというのはそれはそれで合理的。 >>85
それの場合CPU毎に覚える必要があって面倒。
C言語コンパイラはだいたいのCPU向けに素早く実装される傾向にあると思うのでアセンブリ言語よりは良いと思う。 >>78-80
Haskellはちょうど具体例を知ってたから上げただけで全然わからないから詳しくはわからんので申し訳ない
人から数学系とHaskellを極めればいろんな界隈で需要があるらしいという噂だけ聞いたことはあるが
他の話は結局何が言いたいのかわからん
PythonはLL言語なんだから「お手軽スクリプト」として使うのは当たり前じゃん
機械学習とかの研究分野は、実装を素早く作って考えた手順を評価してを高速に繰り返すんだからC言語では無理。
それこそgitでも最初期の仕様を考えてるときはperlとか使ってたし
http://gihyo.jp/dev/serial/01/alpha-geek/0040
>消極的にPythonってのもありだとは思うし、実際そこにポジションしているとも思うが
大体の人はそれを理解してるのに突然「Pythonはクソ!使ったことないけどクソ!」ってやつがわいてきてみんな頭の中???
Haskellについてのやつを見ても思うけど、断片的な経験と情報、ネットで見た内容とかを元に理解したと思いこむ癖があるんだろう
個人のソフトはともかく、Googleとかパッケージマネージャとかで積極採用されるからにはそれなりの評価点があるはずなんだから、自分の考えは常に疑って更新したほうがいいぞ 要するに「なんでも書ける」は言い過ぎだということ
C言語がハードウェア寄りの記述が得意な言語であることは確かだけれど
それでも大抵はわざわざインラインアセンブラという抜け道を用意している
その理由はどうやっても書けないこともあるから >>89
割り込み関係みたいに特権命令を使うところは
「きれいなC」だけじゃ絶対書けないな 使ったこともない言語をディスり、同意しない相手は無知だと思っているガイジに汚染されたスレはここですか? >>89
ああ。書けないものもあるな。
そうなるとインラインアセンブラで無理矢理埋め込んだりする事になるとは思うが、そういうのは普通は全体からすればほんの少しだよな。 >>53
Haskell処理系のGHCがまさにHaskellで書かれてるし、モナディウスっていうゲームはHaskeller界隈じゃ有名。
そもそもHaskellが有名になったのはPerl本家より早くPerl6の実装したのがキッカケ。
それまで知る人はほとんど居なかった。 >>93
その通り
>きめ細かくハードウェアに密接するようなのも書ける。
>OSやデバイスドライバも書ける。
>OSなし環境向けの組み込み用マイコンボードのROMに書くプログラムなんかも書ける。
こういうのは全体からすればほんの少しだよ >>75
そうだよ、みんなわかってないんだよ
PL/1, Ada ... >>92
そうだよ
こいつにレス返すと終わりが見えないぞ?っていうタイプ
それを無邪気に触っちゃうのがこのスレだよ
みんなさすがに今回ので学習したと思うけどw >>91
組み込み用コンパイラとかは拡張構文できれいに書けたりするけどね プラットフォーム依存のレジスタいじったりする必要があるから
綺麗なCってのは難しい
綺麗なCの定義にもよるけど
まぁ関数化するなどして隠蔽化はできるけど >>75
誰かが自分には分かりやすく書いた言語が、他人には分かりやすいとは限らない。
で、書ける奴は他人の言語押し付けられるなら自分用言語作っちゃう。
今も増え続けてる。 >>100
組み込みはPICアセンブラで遊んだだけだけど、PC向けよりもハードがまだ完成してないと言うか、SoCでCPU(MPU)とメモリは用意するから後は自分で追加してねって感じだし、返って文法としては単純かもね。
結局CPUとしては計算以外じゃポートやメモリに読み書きするだけだし。
ハード作りながら入出力の関数も自作する感じですかね? >>99
HOGE := hoge piyo fuga
all: $(HOGE)
clean:; rm *.o $(HOGE)
みたいなのをたとえば
all: hoge piyo fuga
clean:; rm *.o ★(all)
みたいにすっきり書きたい コンパイルするときにmakeとかcmakeとかありますけど他にもあるのかもしれませんけど
今ならどういうのが定番ですか? >>105
makeなんか捨ててninja使おうぜ >>104
ターゲットの依存ファイルを再帰的に展開すると言う事になるが、途中で止めたいとかわがまま言いだすだろ .hとか
例えそれが可能になったとしても、依存ファイルは、そのアクションを実行するために必要なので
削除するために作成すると言う極めて頭の悪い状況が発生する >>104
うーん正直上の方がわかりやすいと思うけどなあ
とりあえず下みたいなことをする方法は知らんわ。力になれなくてすまんな >>107-108
無理なら無理であきらめるぜー! センキュー! cleanは、固定的に削除したほうがいいよ。でないとその内ゴミが混ざる。
まぁ、無理矢理やるなら
allに含めるターゲットを処理するときに中間リストへもファイル名を追加しといて、xargsに食わせるのが無難かと。 >>86
JavaScriptについては、Webリソース(というか個人ブログが多いが)も間違いが多いから注意した方がいい。
> strict modeの有無の組み合わせ
これが要らん。実際見りゃわかるが、全員 strict mode 使っている。
MDNは準仕様書みたいなものだから、非strict modeについても言及する必要もあるだけ。
> javascriptではできない関数の中身や別ファイル、if文の中とかでもメソッド定義が比較的自然に行える
いや、できるぞ。ただしやる必要もないし、意味もないが。
(strict mode の場合はif文中では禁止)
動的にクラス構成を変える必要があるケースはまずないが、(手抜きパッチを除く)
やる場合はプロパティとして差し込むので、それはただの文だ。どこにでも書ける。
function定義そのものではなく、関数ポインタを差し替える。
というか、ここら辺の流儀は他言語と同じだ。
俺は特に疑問を持ったこともなく、分かりにくいとも思わないが。 > javascriptみたいにifをつけると巻き上げが起こらないみたいにすると
これが違う。(内容自体ではなく、考え方が違う)
プログラミングを暗記で済ませようという馬鹿はJavaScript界隈に多いが、
そうとしか捉えられないのなら、向いて無いから止めた方がいい。(君が上達することはない)
それは「数学は暗記だ!」と言っているようなものだ。
或いはどうにも高校の物理に全く付いていけなかった奴とか。
あれは今にしたら分かるが、抽象思考が出来ない奴には無理だったということだ。
そしてプログラミングではその抽象思考こそが重要であり、逆に、それ以外は大して必要ない。
順に評価されるべきものは順に評価され、(巻き上げなし)、
そうでないものはC的に静的に評価されるだけ。(巻き上げあり)
俺は疑問を感じたことはない。
「巻上げという仕様ガー」とか言い出すから余計に意味不明になるのであって、
そもそも最初から直感的だ。後方参照できるだけでしかない。
JavaScriptはC(正確にはC++)以上に文法が抽象化されているから、暗記には向いてない。
結果的にC++並みのことがC並みの文法で出来るようになっている。俺はここも気に入っている。
それとは別に、君が「全部上から順に評価してくれなきゃヤダ」ならRubyの仕様をマンセーすればいいが、
JavaScriptの仕様はC等コンパイル言語を使ったことがあるやつにとっては非常に直感的だ。
俺にとってはRubyの仕様はウザいだけだね。 >>88
要するにスクリプト言語はラピッドプロトタイピングには向いているんだよ。
そしてPCの能力が十二分に上がったので、
その遅いコードでも十分実用的だし、問題ないからそのまま使われてる。
俺も、もう低位コードだけCのDLLにして、
中上位コードは全面的にスクリプト言語で行った方がいいと思っている。楽だから。
NumPyはまさにこれでしょ。俺からみてもgoogleの動きは全然不思議じゃない。
ていうか多分、マトモなプログラマならgoogleの動きを不思議に思う奴はいない。
君がそんな言い方をする時点で君は色々分かってないと自白しているようなものなんだが。
> Googleとかパッケージマネージャとかで積極採用されるからにはそれなりの評価点があるはずなんだから
評価点はないね。ビジネス上の観点でしかない。
googleは社内言語を絞ってる。C++/Java/JavaScript/Pythonだ。この中ならPythonだろうさ。
だから、仮にRubyやHaskellがgoogle社内で評価されたとしても、
それらで書かれたツールが出てくることはない。 >>94
> GHC
サンクス、そうであったか。これもサンプルとしてはいいね。
> モナディウス
Haskellってexeかよ!やってみた。グラディウスにしては速すぎる、、、左手が辛い、、、
> Perl6
つかそれってどういうことだ?
構文解釈等に関しては、実は圧倒的に単純に実装できたりするのか?
pandocもそっち系だ。俺には遅延評価とは無関係としか思えないのだが。 C始めるためにVS2017インストして苦C見ようとしてるんだけどどこをどうすればソースを書けるのかちんぷんかんぷん
そもそもCの内容をC++で書けるのか怪しい
スレチかもしれないけど助けて詳しい人 ラピッドプロトタイピング用に作られたのがスクリプト言語なんだから向いてて当たり前
ハードではFPGAなんかがASIC前のラピッドプロトタイピング用だね
しかし中上位コードしかかけん奴らがプログラマ気取る風潮はいかがなものかと危惧する
Cでの低位コードもスクリプト言語での中上位コードも書けんとな >>117
適当な場所(フォルダ)にプロジェクトファイルを作成します。
プロジェクトにソースファイルを追加します。
ソースファイルにソースを書きます。
ビルドします。
デバッグ実行して、正しく動作するか確認します。
バグがあれば修正します。
リリースビルドして、EXEを作成。
exeを配布します。 任意のエディタでソースを書きます。CL.EXEでコンパイルします。以上 >>116
にわかなやつほど語りたがる、ってやつだな
何が動機なんか知らんけど
愚にもつかない長文いっぱい書いちゃう子おるよな
これはもう、定期的に出てくるとすら言っていい現象だけど
>>121みたいな簡潔なレスのほうがよっぽど好感度あるわ >>120
上二行は後付。sed->awk->Perl->その他もろもろ、だろ。PLD->FPGAでもあるし。
下二行は時代の要請。
> MITがSICPを教えなくなった理由
> https://cpplover.blogspot.jp/2016/05/mitsicp.html
俺は中上位コードだけでもいいと思うけど、書き捨てばっかやってるのは駄目だと思う。
こういうことをすると保守ではまるのかーがないと、回避する能力が育たない。 >>115
関数型全般に言えるけど、言語やテーブルゲームの問題解かせたりし易い。
遅延評価はwebアプリでHTMLの長さを気にしないで読み込める無限リスト便利って読んだことあるな。
んなのどの言語でもそんな変わらんとは思うが。
どっちかと言うとIO部分分離してるから自然とMVCとかMVVMな設計になるってのがメリットに感じる。 >>126
なるほど言語向きなのは関数型の特性か。
確かにbisonが一体化しているようにも見える。
遅延評価で無限リストがーってのは多分Webライタのデタラメ。
実際、無限リストなんて使おうと思ったことないだろ。
HTMLは多分頭からパースしないと悲惨なことになるだろうし。
(一部曖昧なところがあるらしい)
遅延評価は後払い方式のため、
読み込んだものの、結果的に使わずに捨てたデータが多い場合に負荷が軽くなる。
もちろんオーバーヘッドはあるので、全部使うのなら正格評価の方が軽い。
だから理想的にはどれを使うかきっちり管理して正格評価することだが、
これが面倒な場合は遅延評価にしておけば勝手にそうなる。
ノリとしてはGCと似てる。(管理が面倒なら遅延評価にしとけ)
で、マークアップコンバータとかも、全文書を評価することが分かりきっているのだから、
管理も要らず、普通に考えて正格評価の方が適している。だからあのラインナップは謎だった。
関数型言語の特性だということなら納得だ。
> 自然とMVCとかMVVMな設計になる
これはなあ、、、Cでも苦労するわけでもないので、言語特性ではなく、意識付けの問題かと。
実際にHaskell使おうって奴らはここら辺についても意識高いだろうし、
いい方向に寄与しているとは思うよ。 >>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のはず
>評価点はないね。ビジネス上の観点でしかない。
ビジネス上の観点も大事な評価点でしょ そもそも「文法が抽象化されている」ってどういうことだろう
javascriptはIE6時代から見てるからかもしれんが、文法からライブラリまで欠陥だらけで、現在の具体的な実装こそが正義な言語というイメージなんだけどな
クラスやプロトタイプチェーンの仕組みとか、thisがどこを指すかとか、for inとオブジェクトや配列がらみの仕様とか直感で完全に理解できる人はいないはず
言語仕様に関しては、C言語も//コメントは使うのに関数先頭以外で変数を宣言できないと思い込んでる人とか結構多いんだよなぁ・・・ 複合文の中で変数を宣言できるのを知らないやつはたまにいるが
printf("aho");
int boke;
これ知らねえやつはいねえだろ
逆に制限のある環境でこれをやってエラー吐かれるアフォがいるくらいで ガイジがスクリプト言語に対する感想を述べる場となったC言語スレ for( int i=0; i<10; i++) {
print i;
}
で、「i のスコープは for ブロックの中」って言うけど
ブロックって、中括弧の中だよね? そうそう。
だから、中括弧の外にもう一つ別のスコープがあるんだね。試してみた。 i のスコープより
> print i;
の方が重大な問題だろ 関数呼び出し演算子無しで呼べるとはC言語では無いな すまん、最近 Quick BASIC 始めたからつい。 >>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つって、いつそうなったんだ? 訂正
for ( expressionopt ; expressionopt ; expressionopt ) statement for
( declaration expressionopt ; expressionopt ) statement
って書いてあってびっくりしてる unsigned int を uint32 みたいに書くやつ
あれの標準ヘッダができたの C99 から? >>141
そう。C99から。stdint.hね
自分もありがたく使わせてもらってる。
というか、もうintとか使わなくなった。 C11とかC99とか似合わせてチェックしてくれるツールってありませんか? >>143
サンキューありがとう
stdint.h かー
C99をうちでも標準にすべきかどうか悩むなー お隣はもうC11ですってよ!
うちも11にしましょうよ。ボーナスでたんでしょ。 C++を使えないかあるいはあえて使わないポリシーなのでなければ、C++をbetter Cとして使う方が
いろいろ楽だと思うがな。 >>147
そうは言うけどなお前・・・
うちはまだローン(C89必須案件)だって残ってるんだぞ 俺はstdint.h相当のヘッダファイルを自作してるけどな。
C89コンパイラだったら自作をincludeするようにしてる。 >>148
betterCとしてC++使ってたら今度は「今時生ポインタなんてありえない、unique_ptr使え」と圧力がかかって、どこまでC++の機能使うか悩む ベターCとしての使い方は、C++という名のとおり、設計どおりの使い方だ
基本的にCとの共通部分だけ、C++のみの拡張機能は欲しいところだけつまみ食いは、邪道ではない
unique_ptrも例外ではなく、欲しければ使い、いらなければスルー
それでいい、至極真っ当な使い方だ いいこと言うなあ
C with lambdaとして使う踏ん切りがついたわ >>154
それならスクリプト言語の方が手っ取り早いと思うがな。
全部shared_ptrやRAIIならほぼGCだろ、とも思うし。
というかC++erの生ポ嫌いは一体なんなんだ?
元々メモリリーク自体はそんなに苦労しないよな?今時ツールで検出できるみたいだし。
Cで何らかのタスク(演算等)をこなす場合、
構造化プログラミングだから同一関数内での確保&解放が多いし。
(というか、そのように書きたければ大概の場合はできる) >>155
そう
作り方が下手なだけで言語やツールのせいする奴多すぎ
技術屋としてのレベル/精度が低いだけ ちょっと補足しておく。
俺が思うに、容量的に問題がないのであれば、
大体の場合はmallocではなくallocaで実装でき、当然、管理する必要もない。
だからCはもうちょっとalloca推奨でもいいとは思うし、
そのためにもうちょっとスタック領域に多めに割り当ててくれとも思う。
(コンパイラがallocaをmalloc+freeに分解し、呼んだ関数の末尾でfreeしてくれてもいい。
そうすれば容量の心配ないallocaが手に入るから。
てかこれやってるコンパイラないんか?誰でも思いつきそうだが) んー、イメージ的には、組み込み系が多そうだしcならヒープ使った方がいいきがする。
小メモリで済むのはc最大のアドバンテージだと思うんだ。 >>155
なんでC with lambdaならスクリプト言語の方が手っ取り早いのか全くわからん > 構造化プログラミングだから同一関数内での確保&解放が多いし。
このフワフワした一文だけで、今後こいつからは何の情報も得られないのが分かる >>155
生でもきちんと管理していれば問題は起きないが
いちいち気にしなければならないことが多いので
もうずっと付けてた方がいいよね という話ですよ >>153
designated initializerが使えないのでワースCだ >>162
これか。
https://stackoverflow.com/questions/18731707/why-does-c11-not-support-designated-initializer-list-as-c99
つか入れない理由ないし、ClangとVSでは使えるとも書いてあるが、
C++仕様自体は無駄に意識高くて無視しているといったところか。
一部C++がCの完全上位互換ではない部分があると聞いたが、これか。
他にあれば、キーワードだけでも教えてくれれば助かる。 tentative
restrict
_Imaginal
_Thread_local
_Generic
_Bool
extern const
storage class "auto"
pointer to register >>164
サンクス。感想は以下。
俺には我慢できる範囲だな。
tentative <- 要らん、つか廃止の方がいい
restrict <- ねえのかよ!しかし自動並列化とかしない限り要らん
_Imaginal <- class があるから要らん
_Thread_local <- これはC++にあってもいいと思うが、、、
_Generic <- マクロがらみか?価値は俺にはよく分からん
_Bool <- boolが既に拡張済みだから要らん
extern const <- 個人的にはconst派ではないからいいや
storage class "auto" <- なんだこれ?いわゆる自動変数って全部これだと思うが、、、
pointer to register <- registerそのものが最早要らんし >>163
コンパウンドリテラル
(float[2]){1,2} >>165
tentativeがないくせにテンプレート具現化の統合という
同じベクトルでもっと面倒くさいのがあるわけだが >>167
ファッションとして「ベターC」と言いたがってた事はよくわかった 「ベターC」を名乗るのになんか条件ってあるのかね?
個人的には、K&Rは時代遅れのC、C89が普通のC、それより改善されているのがベターC、ってな感覚だが。 >>171
俺の理解では、C99がC、
それにC++の機能(class等)をつまみ食いした「ほぼCだけど、、、」がbetterC。 >>171
条件はない
"Cの後置増分"とは、"最初はC"でよいという意味だ
そこから段階的にソフトランディングで移行できることが
C++の売りなので、気まぐれにつまみ食いすることは
実はC++らしい使い方の1つといういことだ C99以降の機能を使いだすとC++でビルド通らなくなるし
Cを使わずベターCとしてC++使うなら、C99/C11を知るは必要ないでしょ
Cっぽいものが書ければ十分 あぁなるほど、C99が基準だとC++は劣化Cに見えるわけか。
ただ、一般には「ベターC」という言い方がされたのはC++に対してだと思うがなぁ。 >>175
よく分からんが君は生C派なのか?
正直俺はbetterC派とC++派しかもう居ない(生C派は絶滅済み)と思っていたのだが、
昨今のC++の暴走を見てると生C派が健在なのも分からんでもない。Linusもそのようだし。
ただ、classとかtemplateとかは「控えめに使っている限りは」便利だと思うぞ。
C++erは無理に活用しようとしておかしなことになっているが。
>>176
俺の理解では、
Cでは機能が足りないが、C++の機能は行き過ぎ(やりすぎ)、と思う人達が、
CとC++のちゃんぽんをbetterCと呼称している。 >>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。 >>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; で済む C++普及始めはベターCって言うとC++使いこなせなくてC++でもC文法を良く使うって意味だったみたいなんだが、今はオブジェクト指向も浸透して、その長所短所も洗い出されて来たからいいとこ取りって意味って理解。
でも、今も昔も両者が混在してるんだと思う。 >>181
上2つはそれでも暴走中だとは思うがな。
GC無いと関数型は辛くね?
例外は俺は積極的には使ってないのでよく分からない。
下1つは、俺はC的記述、
> char* port = (char*)0x40044000;
の方が好きだな。
キャスト無しで書かせてくれとは思うが、型は左辺側に書きたい。
それとは別に、autoの価値も認める。リフレクションとかでマジで死ねる。(VC++/CLI)
だけと他言語と揃えてvarにしろよとは思うよ。なぜauto? Cじゃなくて全くの別物を「ベターC」と謀って何をしたいんだ? >>183
昔、autoというキーワードがあったが、あまり使われなかった。そこで新しいキーワードを作るよりも、
使われていないキーワードを再利用した方がいいと判断された、らしい。 キーワードが増えると、キーワードと同じ変数名や関数名はコンパイルできなくなるという問題がある。 >>183
さあ? 俺はGCがないことにストレスを感じたことがない
あんなもんいらねえ、つーか却って迷惑
機械という奴隷は完全に支配したいんで >>185,187
> 記憶クラス指定子としての auto の使用が非常に少ないとの調査結果などから、当該用途は直ちに廃止となった。
> https://cpprefjp.github.io/lang/cpp11/auto.html
> storage class "auto" (>>164)
K&Rも確認して、なるほど状況は分かった。autoはまあ許せる範囲か。
しかしこれ、autoとregisterがあったということは、
元々のコンセプトのデフォはもっと遅い外部メモリかよ。(コアメモリとか?) >>189
autoは記憶クラスのデフォルト
省略可能で、むしろつける理由がなかったのでだれもつかわなかった
registerは変数をレジスタに置いたほうがいいというコンパイラへのヒント
しかし、コンパイラの改良が進みコンパイラに任せたほうが良くなった
人間による指定は不要なばかりか、むしろ最適化の邪魔になるのでコンパイラは無視するようになった betterCは明確な定義はないだろうけど、
http://www.kijineko.co.jp/tech/betterc/1
で言われてるのが大体の認識なんじゃない?
(ライブラリの内部だけとかではなく)クラスとかを使うならそれはもうC++でしょ
メモリ管理とかvtableの仕様とかもしっかり確認する必要があるので適当にクラスを使うのはおすすめしない >>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イラネってのも納得だ。
合ってなければ、どの組み合わせで使っているのか教えて欲しい。参考にする。 >>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++は「出来る限り全自動を目指す」だと思う。
だから、「どこまで自動化しようとしているか」で測ればよいと思う。 >>193
うーん、その定義のbetterCは誰向けなんだ
初心者はC++の仕様(fwriteをvtableのあるクラスに使っちゃったり、newしたのをfreeしたりみたいな)にはまるだろうし
中級者はどこまでがbetterCなのかで混乱しそう(参照は?とかスマートポインタは?とかstringは?とか)
上級者はbetterにすることなく快適にCかC++で満足してそう
クラスとかデストラクタだけ使うみたいな方針で書かれてるソフトって何があるの? ベターperlのruby使おうぜとか言いだしそうだな アホか 基本Cで行きたいけど、クロージャが作れないことだけはどうしようもないのでそこだけC++って考えるんだけど、上級C使いはクロージャいらんのだろうか? >>192
あ? 俺はバリバリC++使いだよ
ベターCをやっている認識は全くない
GCの話に型推論が出てくるのは悪いが意味わからん
varが欲しいんならtemplateは関係ない(脇役にすぎない)し
typeidやvoid*で特注品を作ればいい(COMとかみたいに)
ラムダ式もGCには関係ない(脇役にすぎない)し
ステートレスラムダみたいにスタックを使わないのまである
クロージャ変数はヒープ上って何だ?
auto closure{[&]{}};
auto heap{std::make_shared<decltype(closure)>()};
みたいなことすんのか?
ちょっと変態すぎて俺はついていけないなあ
俺はスマポ使うが生ポも普通に使う
状況で使い分けだ
RAIIつまりunwindingはGCとは全く無関係
RAIIだとかpImplだとかは一応知ってるが
そういのの原理主義にとらわれて
自分の頭で考えるのをやめたらいかんと思っている >>189
ttp://zdnet2.cbsistatic.com/hub/i/r/2015/12/01/5e3590e7-725a-4d77-97cf-a64768d759a1/resize/1170x878/501ecb90884df8d47e13f80dffc6b0a7/42-53033264.jpg
水銀メモリ程度だろ >>189
今だってレジスタに比べればメモリは十分に遅い
キャッシュや最適化技術の進化で通常の利用では考慮する必要性が薄いだけ >>194
俺的には「C++へのかぶれ具合」でC/betterC/C++を判断しようとしてる。
もちろんclassだけではなく、他の機能でも同様に判断して、
どれが一番近いか(どう表現すると一番誤解が少ないか)という話だ。
classはC->C++時におそらく最初に使用する機能であり、
classを使った時点でC++ならbetterCってほぼなくなるよ。
文法でしか判断出来ない馬鹿も最近は多いけど、本質は組み方でしょ。
> クラスとかデストラクタだけ使うみたいな方針で書かれてるソフトって何があるの?
知らんよ。
では逆に聞くが、作者やその他大勢がbetterCだと認識している有名OSSってあるのか?
あるのなら、みんなでそれを見に行けば終わる話だ。
なお俺はこれも知らんよ。
V8のコードがC++流じゃないって言っている奴はいるが、俺は詳細確認してないし。
http://steps.dodgson.org/bn/2008/09/07/ >>198
全面マニュアル派か。まあそういう使い方も出来るわな。
俺は嫌いではないよ。
というかC派からは割と賛同されるだろうね。C++派からは異端視されるだろうが。
> クロージャ変数はヒープ上って何だ?
ステートレスとか、キャプチャがなければどうでもいいし、
或いは糖衣とか、ローカル関数っぽく「その場で」使うのなら全く問題ないが、
一般の関数型と同様に可搬的に使おうとすると、生存期間はスタックとは独立にする必要があり、
スタック上の変数を参照キャプチャするのはまずい。
結果、クロージャ内変数の実体はスタック上ではなくヒープに置かれることになる。
これをそう表現した。関数オブジェクトは常にこうだろ。
> RAIIつまりunwindingはGCとは全く無関係
ユーザ側には無関係だが、システム側は密接な関係がある。
GCを効率化する場合、参照カウントというのは一つの代表的手段で、
この場合、ランタイム上で同じことをやるからだ。
だから「全面RAII+shared_ptr」ってのはよく出来たGCと実行効率は同じになる。
だったら最初からGC言語使えよC++erはアホなのか?ってのが俺の感覚だ。
効率ガーとか言いながら完全な二度手間してるのはテメーらだよ、ってこと。
ただし君はこれには該当しない。生ポも普通に使う派だからだ。
まあここら辺の「どうとでも書ける」という懐の広さもC++の魅力ではあるのだろうけども。
本来は君のような全面マニュアル派が正統C++派でもおかしくないんだが。
そういうコンセプトの言語ではあるから。
ただ最近おかしくなっている(気がする)のはやっぱり意識高い系の暴走なのかな? >>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ってどういう意味合いにせよ現代だと初心者や趣味用で、もうほぼ存在しないってイメージだな 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 >>206
普通こうなるやろ
アドレス 文字
1000000 p
1000001 e
1000002 n
1000003 \0
1000004 C
1000005 D
1000006 \0 >>204
全面マニュアル派って何だ?
> スタック上の変数を参照キャプチャするのはまずい
え? え??
自動記憶域期間の変数以外の何をキャプチャするんだ?
クロージャ内変数がヒープ?? いったい何を言っている?
struct closure{
int& reference_to_capture;
closure(int* capture) : reference_to_capture(*capture) { }
void operator()() {
int internal_variable_of_closure;
}
};
こうなってるだけだぜ? どこにヒープが出てくるんだ? >>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以後は正気に戻る努力をしてるぞ 全面マニュアル派って何だろう。
悪魔的<>全面マニュアル派 みたいなニュアンスなんだろうか。
あんまり聞いたことない言葉だな <>を何と読むかで、C++寄りかBASIC寄りかわかるな >>207
回答ありがとうございます
そのような仕組みになっているとは知りませんでした!
詳しく調べてみようと思います >>206
ない。ダブルクォーテーションで括った場合は最後に \0 入るから。 >>217
char s[3] = "123";
のときは'\0'が入らない。 素朴な質問で悪いが、C言語ってなんで多くが挫折すんの? JavaやC#なら、派遣でも生き延びていくのに・・・ Cは、ポインターとかマクロとか落とし穴が多いんだよね。文字列を扱うのも難しいし。しかもセキュリティ上の欠陥がある。 Cは環境依存が激しくて、何やるにもめんどくさいからだと思うな。
コピペプログラマが生きていけない。 ポインタとかもだけど、リストの使い方は知ってても作り方知らない子とか多そうだぬ。 いや連結リストの作り方知らない子はレアだから違うだろJK ごめん。
ただの偏見。
JavaやC#はListクラスで連結リスト使えるから、作り方知らない若者多そうって思ってた。
そうかレアか。
安心した。 使い方
って書いてあるから
Cの機能にあるリストだと思ったのだが >>232
Cにリストって有ったっけ?
ANSI C止まりだから、最近のは入ってるのかな。
>>233
ホントごめん。 初期化リストってなんだろ。。。
あれかな。
int a[] = {1,2,3};
みたいな奴か?
あんなん、数が100とか200になったらループで初期化とかになるから違うかな。
JavaやC#もその辺は変わらなかった気もするけど。
まあいいや。
迷惑かけたみたいだし、ROMるわ。 >>222
C言語は同じことをするのにもいろんな書き方ができる。無駄に難しくも書ける。 セキュリティ上の欠陥がある。
セキュリティ上の欠陥がある。
セキュリティ上の欠陥がある。 >>238
それ、欠陥じゃなくてそこまで理解して使用するものだから。本気で言ってんの? リストの「作り方」って書いてあるのに初期化リストを持ってくる奴ってマジで近くにいてほしくないわ 拳銃は危ないよなあ。原子炉の制御にC言語を使われたら、それは拳銃のように危ない。
Cを安全に使うには、安全装置とか哲学とか人工知能みたいなものが必要になる。
さもないとどこかの国みたいにハッキングされるだろう。 >>244
原子炉の制御にC使ってるんじゃない?
むしろ、C以外の方が危ない気が。 >>238
今時の言語の例外処理の相当する部分も自分で書くからねぇ。
安全じゃないと言えばそうだし、元々プロ向け言語って言われてたし。
そこに憧れて火傷する人は昔から多かった。
(自分含む) あ、「C言語にセキュリティ上の欠陥がある」は、国家機密だからな。絶対に他のヤツに言うなよ。 何がどう危ないのかわかってないやつが、ふわっと危機感もってるだけだろ
↓これと同じこと
http://zip.2chan.net/6/res/3050541.htm >>222
JavaやC#の方が簡単だから。
というか常識的に考えて分かるだろ。
世界は一旦Cで統一された。
その後出てきた言語はCの駄目なところを改善している。
それだけ。 ダンディ坂野は危険。sprintfの代わりにsnprintf使え。セキュアバージョン(_s)を使え。とか色々あるよな。 標準文字列関数では安全に書けない、安全に書ける人がほとんど居ない。これ、完全にワナですから。 バッファのサイズに収まるように普通書くだろ
そう書けない奴が悪い >>256
それはその通りだけど、個人が責任を取れる問題じゃないし。 >>218
そうだった。Cだとエラーにならんな。C++だとエラー。 文字列の連結だって安全にやろうとすれば、長さがわからない文字列にstrcatなんて使えないじゃん。 てきとーに char s[1000]; とかやってどんどん strcat()
そして死亡 1ビットの変数同士を比較する場合
& ビット演算子
&& 論理演算子
どっち使った方がいいの?
---例---
input mem_ack, cpu_ack
wire mem_ack, cpu_ack
:
:
if (~(mem_ack & cpu_ack))
state <= 2
-------- >>257
版権が会社にあるコードなら
もちろん会社の責任でテストするが
だから何? >>247
ブーメラン過ぎる w
初期化リストの「作り方」の説明してみな Cスレでは初期化リストは「書く」とか「記述」するものであって「作る」ものじゃ無いな
ツールやマクロで生成したり作ったりする事はあるが、そう言うまれな場合は「マクロで作る」と書くだろう >>262>>266
ホントだw
よく見たらC言語じゃなくてVerilogだなwww >>267
じゃあ違うとすると、
C言語のリストって何だ?
って話 >>269
だから、データ構造としてのリスト構造しかないでしょって話では?
以下ネバーエンディングストーリー 文法上でリストと呼ばれているものは初期化リストの他にもたくさんあるぞ
一々あげないが、パラメータリストとか ID:tCxrViSfが救いようの無いバカって事だよ 連結リストを一から作れるってそんなにいないんじゃないかな 1からの定義というか
0からではないんだよね?というか
まぁそのへんフワフワだけど
学校でプログラミング習ってるやつらは
一回はそれ「作らされてるから」
今でも作れって言われたら作れると思う あ、今の子はPascalとかCとか習わないのかな… >>272
で、それらの「作り方」について説明してくれるかな w 脱初心者の登竜門の定番だね
自己参照構造体とポインタを理解していればそれほど難しくはない えちょっと待ってジェネリックなリストとかじゃなくて、doubleのリストとか、なんか自分で決めた型のリストとかだよね?
初心者向けのCの本で書いた記憶があるんだけど、最近は載ってないの? 苦CとやさしいCには載ってなかったな。
自分もCのアルゴリズム本でリストは覚えたし。 ジェネリックなリストとdoubleのリストって
ほとんど差が無いような >>277
struct List_t {
struct List_t *Previous;
struct List_t *Next;
double Data;
};
のDataの型変えるだけだし
まあいろんな型が必要だとテンプレートが欲しくなるけどマクロでもそこそこ行けるしね そこはテンプレートが遅くなる要因だから、性格の違いって事で。 >>286
普通,実用に供するのならば,void *Data だね 型検査引っ掛からなくなるんだから、実用なら必要な型でリスト作らんと怖いだろ。
元々かっちり作る用途向けで、そう言うのはどうしてもって時だけ。 >>287
片方向でも双方向でも大して変わらないと思うが いずれにしろリストなんて簡単
setになると途端にレベルが上がる
それこそ、
使えても作れない人は多い >>280
バーカ、それらは「記述」するもので、「作る」ものじゃねーと言ってるだろ
わかんねーのか死ねバカ だからその他のリストをわざわざあげる>>272がバカって話なんだが w LL用のライブラリCで書いたりとかで普通に書くだろが。 ならLLで全部やれ。
Cでやるのなら主に高速化なのだから、高速に演算できるようにあらかじめLL言語側で並べ替えるだろ。 リストで並べ替え?
そもそも、その並べ替えも遅いからCで。。。
どこから突っ込んで良いのよ。。。 LightwaitLanguageの略で、PythonとかRubyとかの総称。
趣味グラマ含めて、LL知らない奴に初めて会ったわ。 つまりCはHLなわけだな。Heavyな時代になったな。 データ間の関係が直線構造のリストはこれといった使いどころを見つけるのが難しいのはまあ分かる
階層構造のバイナリツリーや網目構造のグラフにまで拡張するといろいろ応用範囲が広がる おれの感覚がズレてるのかと思ったら、英語の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. >>299
エアプ死ね。
> そもそも、その並べ替えも遅いからCで。。。
LL言語側のリスト等の物理配置は公開されてないんだから、これは無理だろ。
仮に公開するにしても当然アクセス用API関数であって、内部構造は隠蔽されるだろ。 ここは日本なのに海外wikipedia持ってくるとか相当ずれてると思う >>308
恥の上塗りかよ w
たいていのLL言語はオープンソースでCとかとのインターフェースが整備されてたり内部構造のドキュメントあるぞ
でないとライブラリとか書けないし
とりあえずpythonの例な
https://docs.python.jp/3/extending/extending.html >>310
> 拡張モジュールをサポートするため、Python API (Application Programmer’s Interface) では
> 一連の関数、マクロおよび変数を提供していて、
> Python ランタイムシステムのほとんどの側面へのアクセス手段を提供しています。
> Python API は、ヘッダ "Python.h" をインクルードして C ソースに取り込みます。
お前は日本語が読めないということが分かった。
それで、お前はいつ>>286みたいな記述が必要なんだ?
普通はPyxxxを使ってPython側から読み出して、
C側の演算高速化用フォーマット(通常はただの配列)に最初から変換するんだよ。
お前はC側でもリストを実装してPythonと同じ事をするアホのようだが。 >>309
本気で言ってるのか?日本語ドキュメントなんて限られてるから技術者はググるときは英語だろう。
しかもwikipの日本語のIT用語の項目なんてほとんどないぞ。日本はIT後進国だから。中国語のほうが充実してる。
その中にあってLLだけば日本語版だけが異常に充実してるという。
まぁ、日本語でググったけどLL言ってるのはWEB2.0、クラウド、AI言ってる輩だね。
C言語使わない、使えない輩だからおれには接点はないわ。どっちがズレてるかよく考えてほしいね。 とりあえずお前は「無知でごめんなさい」から始めようか w
> LL言語側のリスト等の物理配置は公開されてないんだから、これは無理だろ。
> 仮に公開するにしても当然アクセス用API関数であって、内部構造は隠蔽されるだろ >>313
面倒な奴
よほど恥ずかしかったんだろうな >>314
> 仮に公開するにしても当然アクセス用API関数であって、内部構造は隠蔽されるだろ
お前マジで日本語読めないのな。Python.hってまさにこれなんだが。
日本語読めない奴と議論するのは無理だからもう諦めるが。
>>313
LLって海外でも普通に通じるよ。 >>316
隠蔽の意味も理解してない奴に言われてもなぁ w >>315
そうなんだよ。聞いてくれよ。怒り心頭だよ。
日本語のwikipのLLの内容はマジで恥ずかしい。こんなアホ議論してるのは世界で日本だけ。
> この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。
> この節には独自研究が含まれているおそれがあります。
> 日本独自の用語・分類への批判
> 比較対象がないことへの批判
> 誤解を招く用語であるという批判
なんだこれ。こんな完全なバズワードを偉そうにLLすら知らないのかって言われたんだよ。
こんな用語使ってる輩の脳がLightWeightなのに。 まあ俺が突っ込みたかったのは、
> 連結リストを一から作れるってそんなにいないんじゃないかな (>>277)
これはLL言語(=習得が簡単な言語=馬鹿用言語)ならそうだが、
Cなら作れない奴は殺される。ただしそれ以前に、
> 苦CとやさしいCには載ってなかったな。 (>>283)
のように、そもそもCではリストを使う機会はあまり無い。
だから載ってないのも妥当。 仮にバズワードとしてもわざわざ2chで知らないアピールせずに黙ってググれば馬鹿にされることもなかったろうに 確かにLL知らないで馬鹿にされた。だが今はもう違う。おれが馬鹿にする番。
LLなどという日本限定バズワードを使う胡散臭い輩がC言語スレで能書き垂れてんじゃねーよ、
英語もできんLightWeigt脳の低スキル技術者どもが。 >>322
「LL(言語)」ってのは通じる言葉だ。だから使う事自体は悪くない。
(正確にはLL言語だと「言語」が被るのだが、俺は「言語」付けた方が通じやすいと思う)
ただし通じる界隈は違っていて、LL言語と纏めて呼ばれるのは通常、
Perl/Python/Ruby/JavaScript等だから、ここら辺のユーザーなら確実に通じる。
実際、Perl/Python/Rubyなんて使用範囲もできることも同じで、区別する必要ないだろ。
だから纏めてLL言語と呼ばれるし、彼らもそれに慣れている。
C/C++/Java/C#等はこれらとは全く違うため、
この界隈では「LL言語」という言葉が使われることは少ない。
それだけ。 >>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/その他」の理解で問題ない。 LLという日本語だと思えば別に恥ずかしくないだろうに。 C#だろうとJavaだろうとFotranだろうと多くのライブラリはC、C++で書かれてる。
スクリプト系言語に限定して議論する理由は? bashがスクリプト言語になるなら、Emacsもそうなるかな >>330
何が言いたいのか分からんが、エスパーするとこれで答えになるか?
LL言語 ⊂ (君の言う超広義の)スクリプト言語
C#/Java/FortranをLL言語と呼ぶ奴はいない。
つか、知らない言語の話なんてしないんだし、
自分の知っている言語のどれがLL言語と呼ばれるかフラグ立てておけば済む話だぞ。
出現頻度だけで言えば、LL言語≒Perl/Python/Ruby/JavaScriptでいい。 LL言語という物の中身は分かりましたが
そのように分類する事で、
得るものがあるようには感じませんでした >>295
バーカ C言語すれだから初期化リストだと思ったとか寝言ほざいてるID:tCxrViSfのバカさを指摘するために
他の文法要素でリストばたくさんあるぞと指摘してやったんだろ
死ねバーカ 既存のCのコードをUnicode対応に書き直したいんだけど、
char を wchar_t に置換したり、文字列リテラルにプレフィックス付けてくれたり、
関数を wchar.h 版にしてくれる便利なツールは無いですか?
もしくは予約毎と文字列リテラルだけを対象にしたいので、
パースして品詞情報を出してくれるスクリプトなんかあれば改造するかも。 >>336
double とか int でもそう思ってるなら単なるアホだぞ >>337
> 他の文法要素でリストばたくさんあるぞと指摘してやったんだろ
そんなもんは既に>>267で指摘されてるのに周回遅れでなにドヤッてんだよ w >>335
まあLL知らなかったアホが悔し紛れにマウンティングしようとして自爆してるだけだから w >>338
全自動は厳しそう
文字のchatと文字以外のcharの区別が出来ない >>337
その指摘の意図が不明
他にあるから何? >>340
バーカ それもオレなんだが
往生際悪く日が変わってID変わったID:WViVOgsqが絡んできたから止めを刺してやったに過ぎないが
バカには理解できないようだ さすが救いようのないバカ >>339
くさるほど連結リストを作るのに、いちいち特定の型に対応させてられないよ ていうか、
>>228の書き込み自体が皮肉なわけだけど
C言語自体にリスト構造なんて物はないっていう
本気で初期化リストだと主張してると思ったわけじゃ無いよな?
「初期化リスト?」だし 皮肉に対してトンチンカンな指摘をしてるアホが
一人いるみたいだけど >>346
腐るほど連結リストを作るプログラムって何だ? >>345
ひょっとして同じこと繰り返してるバカって言われてることに気づいてないのか?
>>265 と >>280 でわざと同じように指摘してやったのに w >>289
使う側でいちいちメモリ確保、解放をするの?
それとも、Data自体が実体でキャストして使う?
いずれにしろ使いにく過ぎる >>352
連結リストの型ごとにアルゴリズムを生成するの?それこそミスの元じゃない? >>353
いちいちmalloc()/free() するんだよ
malloc()/free() でミスするようでは仕事にならん、というか検査用ラッパぐらい手持ちでもっとけよ 使いにく過ぎる
>>354
型ごとに同じコードを何度も記述する必要はないぞ
そのためのマクロだ 連結リストの中に連結リストとか自由にやりたいのだったら void *data 一択だよ >>354
> まあいろんな型が必要だとテンプレートが欲しくなるけど
マクロでもそこそこ行けるしね
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ どっちが書きやすいか試せば一発だが‥これは二分木でも一緒
誰か三重の連結リストなり二分木なりを自分のやりかたで書いてくれないか? リストのノードとは別にメモリ確保が必要なら、パフォーマンスにも影響するし 腐るほど使うなら使いやすくないと
メモリ確保、解放を自分でやれ?
あり得ない >>362
それはCの基本だよ、お前さんC++に慣れきっているんじゃない? >>357
せっかくの静的型付を安易に捨てるのはバカにありがちな行動
struct List_t {
struct List_t *Previous;
struct List_t *Next;
union {
struct List_t *Child;
double Double;
} Data;
}; >>363
使いにくくてバグの元でパフォーマンスも悪いモジュールを強要する
お前とは仕事をしたくない >>364
出た!union 野郎が出た!
そんなところで共用体をつかってコードを一本化できるのか?続きを書いてみろよ >>365
ふん、それはCを知らないといっているようなものだよ‥
>>360を書けばわかる > そこそこ行けるしね
と書くとアンダーラインになるのか? マクロでもそこそこ行けるしね
そこそこ行けるしね
行けるしね >>366
続きってなんだよ w
2分木なら双方向リストと同じだぞ w
struct List_t {
struct List_t *Left;
struct List_t *Right;
double Data;
}; ん?
二分木なら3個とつながってるから、
普通3個リンクを張る >>364
お、標準ライブラリのソート全否定か?
Cではちょいちょい捨てるよちょいちょいね
常に型を保存したかったらC++使うしかない >>364 も >>370 も、何の構造?
親をたどれないとポインタを一個進めることも出来ない
C++でいうsetの話をしたわけじゃないの? >>372, >>374
赤黒とかの前に2分木の基礎からやり直せ >>373
> お、標準ライブラリのソート全否定か?
>> 安易に捨てるのは
の意味もわからないアホ w >>375
>>364 に対して親とか知ったかが背伸びするなよ w
根や親を各ノードに持つか別に管理するかは要件次第 ポインタを進めたり戻したりする必要がなければ
親にリンクを張らなくてもいいけどさ
std::setと同等なものをイメージしたけど、
まったく違うものが突然出てきたわけね >>364はそもそも二分木では無いのか
>>357のリストの中にリストっていうのはそういう意味なのか? おれの読解力が無さすぎるのか、
説明がなさすぎるのか、 >>381
>>286 >>287 にある通り、previousとnextと書いてると、大抵は双方向リストを意味してるものだと取る
ここがleftとrightと書いてると、意味上は全く同じなんだけれども、単語の上からはまずは二分木を連想する
next一つだけだと、一番単純な連結リストであることを期待する >>377
それいうならリストの中身void*にするのもそこまで安易な選択ってわけでもあるまいに >>379
君以外はみんな「リスト」の話をしている。
君もそうだったのだがなぜか勝手に君だけsetだと言い出してる。
>>380
「リストの中のリスト」ってのは、配列で言うとジャグ配列、
つまりジャグリスト。(という言い方は普通しないが)
>>381
君の頭が悪すぎるだけ。
君以外はみんな噛み合っている。つまり、必要十分な説明はなされている。
つか、>>364,370を読めない奴が議論参加するな、という話でしかないが。
個人的には>>364でunionは使わない。マクロで量産だね。(手動テンプレート) >>286は、
双方向を利用して作ったから名前が変なのかと思った
でも、追加したのが Child なのはどっちみち変だな
2分木だとしたら
>>370は2分木だろうけど、
これで何をしたいのかわからん
双方向と2分木が同じ発言の意味も不明 >>370で二分木の話が出た
もっと上ではsetの話が出ている >>357の
リストの中のリストって
list < list < int > >
こういう意味かと思ったけどこれも違うのね >>383
ソート使うのにmalloc/freeは要らんだろ >>389
リストなんてどうせmalloc/free使って運用するし別によくね? >>385
>>286は「双方向リスト」だぞ。名前もかなり妥当。
つか、君だけまったく付いて来れてないが。
> 双方向と2分木が同じ発言の意味も不明
抽象化して「ポインタの数」という意味で捉えると同じ、ってことだよ。
これについてこれてないのは、「抽象思考出来ない馬鹿」だね。最近はよく見かけるが。
>>387
いや、そういう意味だぞ。
ふむ、なるほど、君は「リスト」を作れない馬鹿のようだ。君は何言語使いなんだ?
C言語使いなら、ド頭>>230でも否定されている通り、普通はリスト程度ならサクッと作れる。
(ただしそもそもリストなんて使わないが) >>384
> 個人的には>>364でunionは使わない。マクロで量産だね。(手動テンプレート)
ん?
ノードに値とリストのどちらかを入れられるリストと言う要件だと思ったが? >>289
intのリストに1, 2, 3, ... , 10 を追加
するだけでもイヤになる >>392
なんだ、結局おれ以外も会話が通じてないんじゃん >>390
まあお前がいいと思うならそうすればいいんじゃね? >>391
あ、ごめん
>>385の一行目は >>364 の間違い >>391の真ん中
>>364のコードはそうなってない >>391の上半分
トポロジーがまったく違う
よって必要な処理もまったく違う
ポインタの数も、普通は2分木は3方向にリンクを張る 「普通は」とか書くと反論がくるのかな
「多くは」くらいにしておくか >>370
結局これで何をしたいのかわからん
親へのリンクが無い、色が無い
って時点で汎用化とは程遠い >>392
> ノードに値とリストのどちらかを入れられるリストと言う要件だと思ったが?
いや、そう明示されているわけではないよな?
次に、それが要件だったとして、或いは汎用化するために void* だろってのが皆の意見だ。
ここについては俺はいちいちキャストがウザいからデータはめ込み派(君と同じ)だが。 void* の問題はキャストもそうだけど
外部でメモリを管理する必要があるってところが大きいかと
多重リストだろうがunionだろうが
マクロでどうにでもなるんで
わざわざ不便な作りにする必要は無いかと >>402
C++が使える環境なら素直にC++を使えって話だけど
いまだにCしか使えない環境ってのもあってね (単方向)リストは先頭から終端の方向へ順にポインタを辿る、逆方向のポインタは無くても可(逆方向があるのは双方向リスト)
二分木は根から葉の方向へ再帰でポインタを辿る、親方向のポインタは無くても可(むしろ無いのが普通) >>398
何度も言っているが君だけ付いて来れてない。いちいち全部なので端折るが、
> ポインタの数も、普通は2分木は3方向にリンクを張る
これについては既に回答済みで、引用すると、
> 根や親を各ノードに持つか別に管理するかは要件次第 (>>378)
で、全くその通りだ。
俺は君が何故これを理解出来ないのかもわかるが、
君は俺の質問に答える気がないようだから、教えてやらないことにする。
馬鹿のままで死ね。 Cってパフォーマンスを落としてまで汎用化するような使い方ってあまりしないしね
基本組み込み用
リストも片方向で済むなら片方向にするし、
そもそもリスト構造自体頻繁に使うようなものじゃない だから、
Cで挫折する理由が「リスト」とかいう主張、
まったくチンプンカンプンで >>401
> いや、そう明示されているわけではないよな?
で、君は
> 連結リストの中に連結リストとか自由にやりたい
をどう解釈してマクロでやるって言ってるの?
> 次に、それが要件だったとして、或いは汎用化するために void* だろってのが皆の意見だ。
皆の意見? w >>406
要件次第で変わるのに「同じ」と言ってしまう >>409
俺なら型ごとにstructを用意、つまりテンプレートと同じことをする、ということ。
ただしvoid*にしろって言う意見も分かるし、C的にはそれもありだと思うぞ。
ここら辺は好みの範囲だとは思うが。 >>405
無いのが普通って
世の中を知らなすぎる
汎用のコンテナとしての2分木で
そういう実装な例があるなら
示していただけると
出来れば有名どころで
親がないと、ポインタを一個進めるのもコストがかかる
挿入した時に左右のバランスを保つのにもコストがかかる
もちろん、そういう処理がいらない
コンテナとして使わないような
特殊用途の2分木ならいくらでもあるだろうけど
今はコンテナの話だよね >>412
マクロの話がよくわからんがまあいいや
あんたが要件どう解釈したかもわからんからどうしようもないしな 例えばstd::setの実装はすべて親へのリンクがある >>414
インラインマクロでゴリゴリに対応するのではなくて、
structの宣言部分をマクロ化して、
MyList(MyListDouble, double)
MyList(MyListInt, int)
で量産する、ということ。つまりテンプレートだろこれは。 コードサイズが大きい時は、
名前と型をdefineしてからinclude
とか良くやる
defineやincludeは上のMyListみたいなマクロで >>416
ごめん意味わからん
union の代わりになるって言うことなんだよね? ていうか
コンテナじゃない2分木はあるけど、
コンテナじゃないリストなんて無いだろ
初期化リストか? コンテナの定義に詳しくないんだけど、Lispのリストはコンテナなん? このスレは1000までリストの話で埋まりそうだね。物凄いスピードで。 >>418
俺は>>286派だって事。(>>370もあり。)
>>364は無し。てかどうでもいいところでunion使ってもろくな事にならないし。
void*も無し。主にキャストが面倒だから。でもunionよりはvoid*を選ぶ。
とはいえここら辺は好みの問題でしかないが。
俺なら、型固定>void*>unionだね。 >>420
単にunion使わずに(メモリー気にせずに)struct使うって話? あんなあおまいら・・
これ、コレクションをライブラリとして持てという
あるいはそれをどう作るかという話なんだわ
例をあげれば、AppleのCFMutableArray
Win32ならなんだ? >>425
> 俺は>>286派だって事。(>>370もあり。)
> >>364は無し。
要件違うものを持ってきてそんなことを言われてもなぁ
> てかどうでもいいところでunion使ってもろくな事にならないし。
> void*も無し。主にキャストが面倒だから。でもunionよりはvoid*を選ぶ。
unionになんかトラウマでもあるのか?
まあ好みの問題と言うのには同意する MyList(MyListDouble, double)
MyList(MyListMyListDouble, MyListDouble) >>427
C的には、
> コレクションをライブラリとして持て
いらんわ
> あるいはそれをどう作るか
必要なら自分で作るし苦労もしない
だと思うぞ。もちろんC++使ってもいいし、今更だろ。
ただそれ以前に、現実として、動的キー(辞書)が必要な用途はあまりないだろ。
Cの担当範囲なら、ほぼ全ての場合で構造体(静的キー)と配列で間に合う。(鶏と卵ではあるが)
もちろんこれら含めて汎用化したほうが楽だが、その分遅いのがLL言語な訳で。 >>429
> unionになんかトラウマでもあるのか?
いやお前少しは他言語もやれよ。
unionは他言語では廃止されている。理由はいろいろまずいから。
ググれば出て来るからやってみ。
まあそれ以前に君はunionの使い方を間違っている。
あれは、リード/ライトで型が違うときに使うものであって、
型違いだがサイズが同じだから突っ込む、という為の物ではない。
というか後者ならvoid*で受けていちいちキャストするというのが正しい。
しかしこれだと型チェックできなくなるからテンプレートにしろというのがC++だ。 形別 > union > void*
こうだな
もちろんサイズにもよるが 何度も書くけど、
外でメモリ確保解放強制はあり得ない >>432
Cは大前提としてそれがあるんだよ。
不満があればC++で大体事足り、それがbetterCだ。(俺の認識では)
つまり、リストが欲しいけど自分で作るのは面倒、だったらここだけC++使うか、って場合。 >>433
> あれは、リード/ライトで型が違うときに使うものであって、
> 型違いだがサイズが同じだから突っ込む、という為の物ではない。
まあ確かにお前はunion使わない方がいいわ w
一応言っておくけど読み書きで型が違ったら値は保証されないよ unionて、メモリを節約できるのとそのメンバが同時に使われないってことがわかりやすいくらいだよな。
>>364もべつにunion使わなくてもいいわけだし。 バズワード使うだけあってレベル低すぎる。>>433 >>440
> 一応言っておくけど読み書きで型が違ったら値は保証されないよ
値の保証はされてるだろ。
処理系に依存する(エンディアンが見えることが多い)というだけで。
いずれにしても、これが問題だと思う>>440のような馬鹿はunionを使うべきではない。
こんなの当たり前だろ、と理解できる奴だけがunionを使っていい。
そして現実として、unionを使わなければならない機会はほぼ無いから他言語では廃止されてる。
例えば、>>441とかは今なら継承で実装される。 union を使ったら見通しよく書けるのか?そうなのか?不思議な気分だ
よかったらサンプルコードを書いてほしい >>444
> 値の保証はされてるだろ。
されないよ、鼻から悪魔 >>445
お前さんがどう思うかは知らんが>>364みてサンプルコードがが思い付かないならunionなんて使わない方がいい >>447
それだけではわからないよ、実際に union の Child や Double の値を設定するところを見たいものだ
個人的にはうまくいかないと思っている
たぶんマクロを使うことになるし、マクロを使うんだったら共用体なんか使わないほうがよかった、という結果になりそう unionは、
普通に同時使用しないメンバに対して使われることもあるが
実際に使う環境を把握した上で
同じアドレスに対して複数のアクセス方法を
用いる場合にも良く使われる
一番あるのが、レジスタの定義
チップメーカーなどがヘッダとして提供したりする
ビットフィールドアクセスやワードアクセスなど、
複数のアクセス方法を使えるようにするため
あとは複数の型へのポインタをunionで定義したり >>364は環境に依存しない、
普通の排他メンバの使い方 メモリをケチる為のunionは
時代とともに使う頻度は減っているが
複数のアクセス方法の為のunionは普通に使われる
もちろん環境依存コード
例えばWindows APIのLARGE_INTEGERも
この使い方のunion アセンブラじゃ共用が当たり前。だからCにある。それだけ。
x86のレジスタはまんま共用体。ワイヤー数、バス幅に制限があるんだから共用して当たり前。
本来、ハードの仕様を実装するためのもの。 >>449
まず大前提としてコードを再利用する仮定だ。
ベタにコピペした場合は関係ない。
>>364のunionは今なら継承で実装されることが多いはずだ。
当然Dataはテンプレート化され、
Previous,Nextへの書き込みは基底クラス、Dataへの書き込みは派生クラスに配置される。
これがC++的解決。
unionだと一見何でも書けるように見えるが、
実際は派生型を手動で扱っているのと同等なので、
共通書き込みルーチンを用意できない。これが>>448の言う、
> 個人的にはうまくいかないと思っている
で、俺もそう思う。
マクロを強引に使えば出来るかもしれんが、それなら上記C++的解決の方がマシ。
>>452
> メモリをケチる為のunionは
> 時代とともに使う頻度は減っているが
これって>>364の使い方、ということでいいのか?
それならC++的に言えば、
糞だからクラステンプレートと継承で対応できるようにして廃止した、というところだろう。
> 複数のアクセス方法の為のunionは普通に使われる
多分これ以外のunionは必要ない。
そして俺はこれについてはリート/ライトで型が違っても値が保証されていると認識している。
(一応言っておくが同じ値が読めるという意味ではない。《>>446の馬鹿は多分この勘違い》
プログラマから見て値が確定的、という意味だ。)
仕様に詳しい奴がいればよろしく。 >>453
たしかに遥か昔の DOS コールラッパではそうしていたけれども…なんか違うきがしないでもない
共用体の適切な使い方はおもいつかないね… >>449 全部がわからない:−)
>>364 の方針で >>357 を書いてくれる人はいないものか
ちょっと想像がつかないんだ
void *data 派であるけれどもマクロの方はわかる、工藤智行氏の書籍にてさんざんやっていたからね https://www.amazon.co.jp/dp/4774100544/ >>455
よく知らないなら黙ってりゃいいのに w 共用体なんて使うとしたら、sdl_eventと同じように、enumとセットだろ〜? >>461
まあそうだね
もっと早くにその突っ込み入るかと思ったけどunionをとうとうと語る奴とか低レベルすぎて笑うしかない状態なのよ w >>364は自由な型じゃない
doubleのリスト
doubleのリストのリスト
doubleのリストのリストのリスト
...
他の型が必要ならunionに追加する >>461
その場合も今は継承で実装されるのが普通で、それで何も問題ないだろ。
だからもう共用体は古いんだよ。それが俺の言った、
> JavaやC#の方が簡単だから。
> その後出てきた言語はCの駄目なところを改善している。(>>251)
であって、JavaもC#も共用体は廃止済み。 JavaもC#もハナからOSやドライバを書く気ない。もちろんPascalで書く馬鹿もない。頓珍漢。ナンセンス。 #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;
} >>467
JavaOSェ、、、
ただまあ、ハードが見えるレベルをC以外の言語で書くのは狂気の沙汰なのは同意する。
とはいえ、旧来のイベントオブジェクトがunionで出来ているのは、
・それがCの時代だったから
・古いから
であって、便利だからではない。
実際、新しいAPIは全部継承で実装されてるだろ。そういうことだよ。 >>471
つかお前C#知らんだろ。
それはレガシー用であって、レガシー以外でそれ使ったら殺されるぞ。 union 使っても
いいじゃないか
C言語だもの >>474
だから、レガシー以外は使われてないんだよ。
とはいえ、OSのAPIが共用体を返してくるんだから、
それを受け取れないのはまずいから手段も用意してはある、という話で。
>>364はC++/Java/C#なら継承で実装される。
その他の言語でも大体こうなる。理由は共用体がそもそも無いから。
俺は逆に、何故お前らがunionを使いたがるのかが分からんね。メリットは何もないだろ。
>>477
レガシー=obsoleteという意味ではないぞ。 C言語での組込み開発では共用体は普通に使われてる
>>468で示唆したような特殊機能レジスタの多重定義などが代表例 使いどころでは使えって話
gotoといっしょ
>>364が使いどころかどうかは別として >>479
てか、あると便利だよね。
よくわからないまま使うとハマるだけのことで。 >>479
charにunsignedが無いのが気になってるわけだが >>478
> レガシー=obsoleteという意味ではないぞ。
バカってなんで言ってもないことに突っ込むんだろう?
みずから恥の上塗りすることもないだろうに w >>479
それは知っているしそれはいいんだよ。
それ以外のケース、>>364みたいな使い方をお前らはやるのか? >>483
ビットフィールド構造体の定義にはunsignedどうでもいいだろ
共用しているchar型変数の方にはunsigned付けたけど >>481
そうそう。わかってて使うなら gogo もありだ。
ていうかC言語だと使わないと変な書き方になってかえって読み辛くなることあるな。
try catch みたいな例外処理が書けないから。複数個所でエラーが出る可能性が
ある場合に処理を飛び越えて先に進ませる方法が for(;;) ブロックの中で break
使うぐらいしかなかったりして、ループでないのに for (;;) 使うぐらいなら goto 使った
方がまだ分かり易い。 char, unsigned char, signed char
この辺は規格がいまいち
文字をunsignedにしなかったのもいまいち
あとは演算子の優先順位にも不満がある
ビット演算が弱すぎる
代入が = / 比較が ==
なのもいまいち
いろんな歴史的な理由があるんだろうけど >>481
> 使いどころでは使えって話
まあそういうことだね
環境も目的も制約も様々だから絶対unionでないとダメとかunionはレガシーしか使っちゃダメとか言う奴はたいていちょっとアレな人なんだと思う
まあ引っ込みつかなくなっちゃったんだろうね >>485
>>364 までして型をとる,というのも疑問だな‥ バークレーソケットのソケットアドレス等で使わされてる感じだけど
自分から積極的に union を記述することは少ないな というかマジで急にエアプ増えてね?
FieldOffsetを数字でベタ書きとか、かなり最悪のコードだぞ。(>>471内URL)
保守する場合は全部書き直しになる。(今更そこが変更されることもないはずだが)
真面目にこれを言っているID:zJVnUUbXはエアプだろ。
引っ込みつかないのはお前だ>>489
>>492
型を取るなら普通はC++的テンプレート解決だよな。
型なしがよければvoid*でいいし。 反論できなくなってエアプとか w
分かりやすすぎるだろ >>468
ANSI C 規格への Microsoft 拡張機能を使用すると、ビット フィールドに対して char および long 型 (Signed と unsigned の両方) が許されます。 知らない書き方だと思ったら、MSのCコンパイラの独自仕様なのか
どうやらそのビットフィールドをchar境界に制約するものみたいだけど、
こういう書き方だとビットフィールドの幅に見えて気持ち悪い マイクロソフト以外でも結構良くある
型指定可能なコンパイラ
enumの型指定とかも signedとunsignedはビットフィールドでも意味がある
1bitでsignedだと、符号ビットしか存在しない
値でいうと 0と-1 1bitで表現できるのは0か1しかないのでは?
意味的には-1だろうが値としては1以外に表現する方法がない sizeof(int)==4とすると
468のsizeof(SFR)==1だが
468のcharをintに変えると sizef(SFR)==4 になる
(略)
アクセス違反でbitfieldが使えん可能性あり >>504
問題になるのは保存時じゃなくて読み出し時 初学者なんだが教えて欲しい
状況:作ったプログラムが思うように動かないから途中の値を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
階層が深くなると値が変わるんだが、何が原因かわかる人いる? 原因はバグ。これ以上は再現するソースコードがないと分からない 変な状態が発生する状態を保ったまま
処理を削っていく
削っていって発生しなくなったら
その削ったところに何かヒントがあるかも
1レスに収まる範囲になったらここにすべてアップ そんなに簡単にバグるものかと思って聞いてみたけど、汚ねえプログラムを添削してもらうのも申し訳ないからそういうものだと納得するよ、thx >そんなに簡単にバグるものかと思って聞いてみたけど
次はコンパイラのバグとか言い出して大騒ぎして
そのうち人間のいい加減さに絶望する
普段から人間がどれだけ間違えてるか思い知るがいい >>507
初心者がやりそうな間違い。
1. 配列の A の要素数が足りない。
2. A を int *A; 等と宣言しておきながらメモリ確保していない。
3. メモリ確保しているがバイト数が足りない。
4. if 文を多重に使っているが階層を誤解している。
5. 自分で変数や配列の内容を書き換えている事に気付いていない。
4は例えば if (...) ...; if (...) ...; else ...; のようになっている場合に if (...) { ...; if (...) ...; else ...; } となると勘違いしている場合。
実際は if (...) { ...; } if (...) { ...; } else { ...; } になって最初の if と次の if は別物。
インデントがおかしいと騙される。しかしCコンパイラはインデントなど見ていない。 じゃあ俺のあてずっぽうの勘だと主たる原因はフォントサイズが小さすぎること
メインの原因はA[i]が紛れ込んでいること >>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.) >>515
C++訛りとは限らんぞ
機械語のオートインクリメントは++が後置で--が前置になっていて
それが透けて見えるように書いていると--は前置だし オーバロードした++やイテレータは前置と後置で速度が違うのか。後置使うやつがいなくなるじゃないか。
C++は欠陥品だな。++Cって名前にしろよ。 >>517
機械語の仕様や挙動はCPUの種類による
昔の話だけど8ビットCPUの頃は、インテル(ザイログ)とモトローラでは逆になっていた記憶がある >>519
LDIとLDDは逆じゃなく両方後置だ
そんな重箱の隅じゃなく本当に逆な例を挙げられるか? オートインクリメントってなんだ?
z80や6809にそんなのあったか? Z80と6809でスタックポインタを弄るときのPUSH/POPでポインタの増減が前置後置逆になってたはず 少し調べてみたらやはり逆っぽい
C言語風に表現すれば
6809のPUSHは前置 *--SP、POPは後置 *SP++
Z80のPUSHは後置 *SP--、POPは前置 *++SP スタックポインタを意識してCのコードに--rとか書かねえよ ま、そういうのは最近のコンパイラなら最適化で跡形もなく消えちゃう事もあるので普通は考えても意味ないと思う。 そういう問題じゃねえんだよ
話についてこれないならROMってろ C言語始めるためにいろんなサイトを転々としてVScodeとかVS2017とかをインストールしてみたんだけど訳がわからん
サイトに沿って設定とかしたけどどうすればいいかわからなくてどうしょうもない
Javaも少しやっててメモ帳に書いてたんだがあれくらい簡単じゃないのか
つまりどうしたいかというと
助けてくださいお願いします >>528
Javaはどんな環境でやってるんだ?
それに近いC環境がとっつきやすいと思うぞ >>528
とりあえずプロジェクトを新規作成して、テンプレートからWin32コンソールアプリケーションを選択、オプションで空のプロジェクトをチェックする
その後、ソースファイルに新しい項目を追加してC++ファイルを選択
この時デフォルトではC++(*.cpp)が選択されるので、気になるなら拡張子を*.cに変更すればC言語のソースが記述できる >>530
【Java】ゲームプログラミング超入門: http://www.youtube.com/playlist?list=PLJ86MSrhnFKVQPf-E8y0FZKv7uzR4L4Dt
この動画の人にずっとついていってやってた
Part32くらいで少し飽きて一二週間離してて久しぶりにやったら結果が違っててよくわからなくなって別のやつやろうとしてた 有名な土方プログラマーの、T Umezawa の動画だろw
Java, C# を、テキストエディタで書いて、端末でコンパイルする >>528
自分の場合はcygwinでgcc使ってる。インストール楽だし >>536
>>538
やっぱGCCがいいのかな
でもなんかVS2017使いたいんだよね
一回入れてみたことあるけどなんかよくわからんというか
その点VS2017は安心するというか
使ったことないけど clコマンド使えばいいんじゃねえのか
IDEの機能なんて初心者は1%も使えない
普通のエディタでも初心者だと5〜10%くらいの機能しか使えない >>539
普通のコマンドプロンプト出して、↓のバッチファイルを実行するとclが使えるようになる。
"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat"
cl your_program.cpp /EHsc 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 >>542-544
ってVS2017だけ?
もしかしてVScode入れる意味なかった? >>539
別にVSでも良いけど、差し当たっては新規作成とビルド->実行くらいは覚えんと。
(デジタルネイティブって言葉はどこ行ったんだろう。。。30代の自分が子供の頃でも迷った記憶は無いのに)
新規だけど、何も無いところから初めたい。
新規作成で空の何とか選べば意図通りに行きそう?とか、直感が働くのがデジタルネイティブの筈なんだが。
最初はcppファイルでCの勉強とかでも良いと思う。
むしろその方が型にうるさいから好都合だし。 リアルなプログラミングネイティブなのはベーマガ世代だけだよ。 ネイティブになるには小中学生時代に大量のコードを読む必要があるから。
その頃からトラ技読んでたらリアルデジタルネイティブになれるだろうな。
おれは回路はスラスラ読めない、書けない。このコンデンサは何用で〜とか考えないと無理。
母国語と同じ感覚、ネイティブになるには高校からじゃ遅すぎるよ。 Z80とメモリとPIOの回路図から始まるんですかい >>550
ごめんな、俺は社会人デビュー後だ
学生時代はhFEすら知らなかった 学生の頃はZ80や6809のアセンブリを手書きしてハンドアセンブルしてたなあ
>>523で書き込んだスタックの構造の違いに気付いたのもその頃 ハード指向なら トラ技
ソフト指向なら Interface
最近はかなり曖昧になってきてるけど… ざべ=THE BASIC 技術評論社
元々は名のとおりBASICの雑誌だったが
いつしかオタッキーなPC雑誌へと変貌していった
http://ikura.2ch.net/test/read.cgi/i4004/1010850340/ 547だけど、ごめん。。。
変なおっさん呼び込んじゃったね。。。 ここは同窓会みたいなものだから
昔話が大好きなんだよ 実装の話にバズワードぶっこんでくるガキはすっこんでろ。 x^2+y^2=5をみたすx、yを求めたいんだけどどんなプログラムがええのかな ミス
x^2+y^2=25をみたす自然数x、yを求めたいんだ #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;
} 数学的には {3, 4}, {4, 3} なんてことはわかってるんだからそのまま表示するプログラムでもいい
なるべく応用が効くようなコードにしたいなら
>>573は色々と突っ込みどころが
sqrt(25)は手計算じゃなくてコードで示そう
素直にsqrtを使っても良いし、
x * x < 25
y * y < 25
という条件でもいい
計算オーダー的に二重ループもない
25がちょっと大きくなっただけで計算量がヤバイ
int y = (int)sqrt(25-x*x+.5);
としてから条件を満たすか調べると計算オーダーが減る だからこれで良いって言ってるだろ
#include <stdio.h>
int main(void) {
printf("x=4 y=3\n");
printf("x=3 y=4\n");
return 0;
} YAGNIとKISSか
そこまで意識した訳では無いけど>>573は適当そのもののコードだからな
汎用性は皆無と言ってもいいよ
正直、質問者の意図もよく分からんしな 単なる課題だろう
ただ、発展形としてはいろいろ考えられる
ペル方程式 - 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 うおおおおおおおおお答えてくれた人ありがとう
適当にスレ検索してここにたどり着いたけどスレチだったようだ ほんとにごめん 100万年ROMるわ 配列と添え字でやりくりできてるうちは必要性がないぐらい ポインタに+1したら1増えるのかよ?デバッガで値見てみ。 >>584
printf("Hello, C world!\n");
この一文でもう既にポインタを使っているわけだが? ポインタの使い道を答えたら逆ギレするガチ初心者。
おそらくポインタを勘違いしてるからキレてんだろうな。 >>591
初心者にありがちな間違い
ポインタと配列は区別しよう
関数に配列を渡した時の解釈について言及しているなら、ガチの初心者に対しては不適切 void * に1を足す記述がエラーも警告も無しでコンパイル通ってしかも何事もなく1足されてたのを発見した時は驚いた。
gccってそういう仕様だったんだね。 いくらなんでも流石にそれぐらいは自分で調べて欲しいレベル >>598
Cの規格にはない用語だな
きっと別の言語なんだろう
文字列リテラルがポインタ wな謎言語 仮引数と実引数はJIS X3010にも定義されている用語
仮引数はparameter、実引数はargument
ただ>>596が何を言いたいのかはよく分からん
要するに仮引数はプロトタイプ宣言などで仮に与える引数(型さえ明確なら何でもいい)のことで
実引数は式の中で実際に使われる引数(関数で実際に利用するので名前は重要)のこと >>600
アセンブラのオペランドにイミディエイト出来ないものはRO領域に格納されるのでアドレスが割り振られポインタ管理できる
>>601
言語固有の用語ではなく構造化プログラミングの用語 ああ、argumentとparameterをJISはそう訳してるのか
それはすまん >>603
ぷぷぷ
必死だな 配列とポインタが違うって事 知ってるかい? w なんか、昔はポインタと配列の区別を知らない筆者の書いた入門書で障害児が量産されたと聞いたが
その中の一人かな >>607
> アセンブラのオペランドにイミディエイト出来ないものはRO領域に格納されるのでアドレスが割り振られポインタ管理できる
知っているとは思えない発言なんだが >>608
>文字列リテラルがポインタ wな謎言語
なぜ文字列リテラルがポインタだと謎な言語なのでしょうか?
また>>608のその文のどの辺りが間違っていますか?
後学までにご指摘頂けるとありがたいです。 >>609
ReadOnly領域です
まぁ割り当て方はリンカ次第ですが >>610
文字列リテラル即ち配列
配列とポインタは異なるもの
∴ それを同じとするのは謎言語
> 後学までにご指摘頂けるとありがたいです。
ROなんて決まってねーし
即値で表現できない(struct foo){1,2,3}なんてのはアドレス欲しかったら&で取らなきゃいけねーし
何もかにもがデタラメ 処理系も指定せず意味不明杉。どっかで頓珍漢な呼出規約の説明してた人と同一人物じゃないのか。 >>612
>それを同じとするのは謎言語
Cの文字列はcharの配列
それはリテラルでも変わりませんよ?
それ自体が謎というならもうCは無理でしょう
>ROなんて決まってねーし
特殊なリンカでない限り大抵のリンカは定数はROに配置しますよ?
>即値で表現できない(struct foo){1,2,3}なんてのはアドレス欲しかったら&で取らなきゃいけねーし
即値とリテラルが区別出来ていないのでは?
リテラルだろうとメモリ上に配置されたものはアドレスが振られています
>何もかにもがデタラメ
私には貴方がなにも知らないようにしか見えません >>615
>特殊なリンカでない限り大抵のリンカは定数はROに配置しますよ?
組込みか何か? 604 デフォルトの名無しさん[sage] 2017/08/05(土) 11:35:58.99 ID:B4rhQgJR
ああ、argumentとparameterをJISはそう訳してるのか
それはすまん
だっさ最低限の日本語も知らずに日本の2chに書き込むなよ >>616
今は組み込み屋ですね
昔はアプリ屋でWinやAndroid触ってました Cだと実際区別ないよね
長々と罵りあってるのに具体的な説明がひとつも出てなくてわろた >>615
こいつダメだ 何もかもがデタラメ
ポインタと配列の区別
リテラルと即値の区別
何も出来てない 6809 のアドレッシングモードが懐かしい
リテラルと即値の区別は 6809 を触っておればわかるよね
6809 搭載のPCIボードを誰か作ってくれないかな char *pointer;
char array[1];
・・・・・・
pointer++; /* OK */
array++; /* error */ >>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を引き渡そうとした時とか、あるいはその逆の時とかね。(そして昔のコンパイラは
警告も出さずに通ってしまい動かしてからバグに悩むと)。 cで一番難しいのは、constだと思う。
間違えてても、動いちゃうからなー
なくても困らないけれど、厳密に宣言しようとおもうと慣れが必要。
char ** とか あっ、あと二次元配列とかは、関数の引数に指定しようとするとはまるね。 "constは左に掛かる"
char const **s; // charを修飾
char * const *s; // char *を修飾
char ** const s; // char **を修飾
と書けば何も迷うことはない >>630
char const **s;
と一緒 forkで子プロセスを複数生成した際に、子プロセス間で変数を共有、または子プロセスから他の子プロセス(親は同一)の変数にアクセスする方法って有りませんか?
共有メモリ以外でお願いします >>633
内部的には共有メモリと同じなんだろうけどmmapなんかどうだ? 多倍長演算って10000進法でやってる?
それとも2^n進法? >>633
> 共有メモリ以外でお願いします
共有メモリがダメな理由が書いてないからネタなんだろうな >>642
32bit マシンでも 2^32 進数なんて使ってないが... >>643
難しくてわからないからじゃね?
あるいは宿題がそういう風に出てしまった。 >>643
コードが無駄に長くなるので好きじゃないんです
どうしてもって時以外は使いたくないです >>602
596だが
おまえ、どこから流れ読んでる?
>>593あたり前後の関係よく見てみな
>>595がいかに頓珍漢な噛みつき方しているか牛でもわかるぞ >>649
ポインタと配列の区別がつけられない障害児のID:dUt+j3iSか
出会った入門書が悪かったんだから、もう諦めてポインタのない言語を学びなおせ
お前にゃCは無理って事だ ポインタを教えてくださいと言ってる初心者に配列使って見せて
「これがポインタだっ どやっ」
笑うしかないな やっぱりポインタの勉強するには柴田ぼーよー先生のポインタの本がいいんでしょうか? ID:dUt+j3iSにどんな本使ったか聞いて、それは避けるべきだと思うよ こいつらの反論が反論になっていないな
C分かっていればそのコードが
ポインタ渡しになっていることは直ぐに分かるんだけどね
まぁスルーが得策だよ
ID:dUt+j3iSはID:r2XWWSNCに構ってはいけない 問題はそこではなくて、ポインタの話からいきなり仮引数だの実引数だのとかの話に飛躍したことだと思うのだがな
まあだいたい想像は出来る
何故だか初心者本でよく見られる間違いとして、関数の呼び出し側の引数が実引数、関数の受け取り側の引数が仮引数、という説明をそのまま受け入れていたのだろうな
言語によってはその通りかも知れんが、少なくともC言語のJIS X 3010の解釈とは異なっている >>654
ID:jhhg/GBwもポインタ理解出来てない障害児か
初学時になんて本使った? >>654
ご忠告どうも
気持ちだけありがたく貰っとくyo
>>656
K&R 1stだが何か? C言語でもその解釈で全然問題無いと思うけどな俺は
どっちにしてもID:r2XWWSNCはど素人のくせに
質問の仕方も知らない無礼な奴と言う事には間違いはないだろう >>657
実引数として配列を用いて関数呼び出しを行えば、呼び出された関数は仮引数としてポインタで受け取ると言いたいのだろう
K&Rでも実引数と仮引数はそういった説明をしていたか? >>659
ああしていたよ
おまえには読み取れなかったんだろうがな
>>660
無礼なやつだな
俺は障がい者手帳は交付されてねえよ
勝手に妄想すんな精神分裂病患者め >>661
> printf("Hello, C world!\n"); これがポインタだっ どやっ
手帳申請しろよ w >>662
>>661 にそんなことは書かれているのか? そういやシンタックスシュガーと言えば、昔々こんなのが動いたのを初めて見た時は驚いたな。
https://paiza.io/projects/XOWJRDaMZQIIu9cF5Ex1Ug
本当にポインタ計算してるだけという。 >>659
ガイジには読み取れなかったようだ
> When an array name appears as an argument to a function, the location
of the beginning of the array"s passed;
良い時代になったもんだ 歴史的資料がきちんと公開されている 誤読される可能性があるので追記
>>659
ガイジのID:ThMEkv3Iには読み取れなかったようだ
> When an array name appears as an argument to a function, the location
of the beginning of the array"s passed;
良い時代になったもんだ 歴史的資料がきちんと公開されている >>654
ポインタ渡し w
謎用語を躊躇いなく使っちゃう ガイジの特徴だよなあ When an array name appears as an argument to a function, the location
of the beginning of the array"s passed;
「配列の名前が関数の実引数として現れた時、その配列の先頭ポインタが渡される」でいい? どこにポインタなんて書いてあるんだ 見えないものが見えちゃうって精神科受診した方が良いぞ ポインタ渡しが謎用語らしい
コイツはもう覚える気すらないよ
つーかただのバカ
スルー推薦 位置
そもそも
> A pointer is a variable that contains the address of another variable.
と言う定義を理解してないのか?
障害児製造機な入門書が存在らしいな
お前は何という本を初学時に使った? 一応言っとくけど、文字列リテラルを関数に渡す場合の説明は5.5章だぞ >>671
ガイジ用語か qiitaでいっぱいヒットするわ w >>672
直訳すると、「ポインタとは他の変数の位置を内包した変数である」。
"location of the beginning of the array"、直訳すると「配列の先頭の位置」はポインタ以外の何物だっていうのか教えてくれる?
ちなみに俺の初学本は「C言語によるプログラミング」第二版 他人をガイジ呼ばわりしてるけど自分が1番ガイジだったってオチやね メモリ上の位置を表す「アドレス」と、それを格納する変数である「ポインタ」を混同してるから議論が噛み合わないのでは? >>675
ガイジか?
ポインタとは他の変数のアドレスを内包した変数である
としか書いてないのに、書かれてない「位置」がなぜ出てくる
まあ、それには目をつぶって
「内包した変数」が重要
Cの変数とは型を持ち、値を格納できるもの
アドレスとポインタ(=変数)を混同しないように
あと10年くらい修行することだ >>678
えーともしかして、
「いわゆる『ポインタ渡し』ではアドレスがコピーされているのであってポインタ変数が渡されているわけではない」と言いたいの? コイツはまともな社会生活できてるのか
日常会話が成立出来ていないのではないか >>680
ガイジ用語使うな
qiitaでヒットするそれはあえて言うなら「ポインタ渡され」
このスレで出現している「ポインタ渡し」はガイジID:jhhg/GBwが使い出した謎用語 >>682
いわゆるって言ったのにそれでもダメか。
void foo(int a[8])と宣言された関数を別の関数内で
int a[8];
void foo(a)
と呼び出す時、それはポインタが渡されているのではなく配列の先頭アドレスがコピーされていると言いたいの? 「ポインタ」って用語は結構仕様書中でも不安定だから、実はあまり気にしてもしょうがなかったりするんだよね
http://www.kijineko.co.jp/node/498 >>686
その上にint a[8];って書いたんだけど、なんか文法ミスってたかいな? このガイジ早く死刑にしろ
絶対何か障害持ってるだろ
何か起こしてからじゃ遅いぞ なるほど。やたらガイジ連呼してる奴が頭おかしいわけだな。 >>684
渡されるのはポインタ変数の値(アドレス)、それをfooがポインタ変数として受け取る ポインタの使い道を聞いてるのに、なにみんなで必死にポインタの解説してんだ?
Javaとかポインタない言語があるんだからポインタはなくてもいいだろという主旨だろう。 ガイジ用語「ポインタ渡し」を編み出したID:jhhg/GBwは今日はID:5EiEWIq+か >>690
だよねえ。それじゃあ
printf("Hello, C world!\n");はポインタとして受け取っているように見えるんだけど、ポインタではないの? 引数を変数だと考えるからおかしなことになる
引数は値であって変数ではない、渡しているのは値であって変数ではない
C言語には値渡ししか存在しない、他の言語で言う参照渡しに相当するようなものは存在しない
ましてやポインタ渡しに至っては全く意味不明
渡しているのはアドレスであってポインタを渡しているのではない 定義至上主義者とは一般的な会話が成り立たないことがよくわかる 定義至上主義なら最初から「アドレス渡しと呼べ」と言えばいいだけだから、ただ文句つけたかっただけだと思うよ 定義至上主義者はID:r7C/NYo5のことだと思うが
「ポインタ渡し」だの「アドレス渡し」だの言葉の定義に拘ってるようにしか見えん >>694
厳密にはNULLポインタとかがアドレスじゃないから、「ポインタ型の値」といったほうが汎用的では
そして、
>>685
によると(場合によってはポインタ型の値)もポインタと言ってる箇所があるのかな
仕様書読むのめんどくさい
どれにせよ、厳密な表記しても初心者には得がないな >>693
printfに対する知識がなければ、アドレスを渡しているところまでしかわからない この流れでそう思える読解力は凄い
言葉の定義で頓珍漢な噛みつき方したのは
ID:Uo4tfgNRとID:YE/9ro9hだろ >>701
そんなことで人のことをガイジガイジ連呼していたの? これチューリングテストの実験場だったのか
見抜けなかったわ〜w だからさぁ。使い道を聞かれてんだよ、使い方じゃねーんだよ。さっさと答えてやれよ。
javaやpascalはポインタ使わなくてもプログラム書けるのにCにポインタが必要になる使い方をよ。
もしかしておまえら入門書読んで理解したつもりなだけで、ポインタが何か分ってないんだろ? >>706
俺はガイジ連呼厨の意図が知りたかっただけだし、そこまで偉そうに言うなら君が答えてあげなよ >>703
お前をガイジと呼んだのは、書かれていない単語が見えてたからだと説明したはずだが そこ、放送禁止用語も知らない一般人、オンエアしちゃダメ。 結局、javaやpascalはポインタ使わなくてもプログラム書けるのに
Cにポインタが必要になる使い道、理由は誰も分らないのかよ。
ガッカリだぜ。なにがC言語なら俺に聞けだよ。 ┌────────┐
│ │
│ /■~\ │
│ (´∀`∩) │
│ (つ 丿 │
│ ( ヽノ │
│ し(_) │
│ │
│Now Onigiring...│
│ │
│ 暫くおにぎりで │
│ お待ちください │
└────────┘ >>703
> printf("Hello, C world!\n"); これがポインタだっ どやっ
十分にガイジ
「ポインタ渡し」のガイジ事か?
> こいつらの反論が反論になっていないな
> C分かっていればそのコードが
> ポインタ渡しになっていることは直ぐに分かるんだけどね
printfの知識が無ければわからない
「渡され」を「渡し」と呼ぶ
十分にガイジ 生で全国放送なんで、影響力強いっす。学校でイジメの真似事されると困ります。ですから、放送コードに違反した発言は極力慎むように頼みます。 >>714
最初のは確かに渡されだけどポインタじゃない?一応間違ってはないんじゃない? 最初にそのレスした時相手のprintfの知識とか考えてなかっただろうし。
それに「ポインタ渡し」は慣用語として定着してしまっている側面もあるからその用語を使っただけでガイジ認定は早いよ
ある程度の慣用語は意図を汲んだ上で、間違ってると思うなら的確に指摘しないとコミュニケーション成立しなくてどっちがガイジかわからなくなっちゃう >>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++;
}
とやるほうがコストが軽い 動物園の檻の中で「あいつはオラウータン」「こいつはゴリラ」とかぼやいてる飼育員。 脱字訂正
誤:*dest_p++ = src_p++;
正:*dest_p++ = *src_p++; >>716
やっぱり見えないものを見てるガイジか?
> printf("Hello, C world!\n");
これのどこに
> A pointer is a variable that contains the address of another variable.
が現れているんだ?
確実に配列とポインタの区別がついてないガイジだろ >>720
渡され側は先頭アドレスを格納したポインタであって、
そのレスをした人は最初にレスした時、相手のprintfの知識とか気にしてなかっただろうって書いたつもりだけど、なんか間違ってた? 引数は変数の一種と見なすのも一理あるだろう。仮引数も変数と見なしても実用上は問題ない。
それとも仮引数は変数ではないと言い張りたいのか? 我々は実用性を重視するが、理論上では仮引数はポインターではないかもしれない。君のような理論家ではそれは重要かもしれないが。 >>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");
この一文でもう既にポインタを使っているわけだが? >>724
とりあえず、もしfortranから呼んでるならなら_printfじゃない?
さっきから言われた側の知識に言及していらっしゃるけど、それこそ一般に言うとprintfって言ったら普通はstdio.hのものを指すし、言われた側もまさかfortranとは思わないよ
そんな病的な状況を例に出さないといけない時点でおかしい噛みつき方してるってわかるもんだと思うけどなあ printfの仮引数がポインター型だから、printf内部とprintfの型情報でポインターを使っているといっても間違いではない。 頭でっかちの理論家が、間違いを含む古い書籍を読んで、一字一句正しいと思い込んでいるのは最悪な状況だ。 >>722
「この一文」と限定したんだから、それ以外の知識は不要で、これだけでポインタを使ってるという事だな >>727
プロトタイプも「この一文」以外の知識だよ
ボンクラ 同意
俺も>>694では単に概念を述べただけなのに何故だか定義至上主義にされてしまったからな
理論化にとっては定義が大事なだけであって概念を理解しようとしない >>730
一文の意味論を考えると、やはりその仮引数はポインターだという結論になる。 教育上は、引数は関数に渡せる変数だと指導する方が分かりやすい。ただ、コンパイラーや言語を考えるとき、理論上では問題がある。 実際、仮引数は、変数と同じように型を持ち、変数と同じように値を代入したり、値を取り出したりできる。
これを変数ではないとするのは直感に反する。だから教育上の配慮から、理論以外では、仮引数は変数だと見なしてよい。 >>732
どこに「この一文」に仮引数が出てきてるんだ
お前も見えないものが見えるガイジか? >>736
お前のそのコメントのどこに意味が見える? 意味は見るものじゃなくて解釈するものだ。
意味論上で意味を解釈しようとしない馬鹿に議論はできない。 猿、猿、猿。さて猿は何匹? いいえ、これはただの文字。本当の猿ではありません。
printf("あほ"); さて、これはどんな処理でしょう。いいえ、この文はただの
テキスト。フォートランかもしれないし、
バイナリーではないから、本当の処理ではありません。
printf? 別に意味なんてありません。この一文に意味なんてありません。
こいつらは形而上学を知らないのか。 形而上言語では、一文とその意味は同一視するものだ。
そこで君が提示したprintf("なんちゃら");も意味があると仮定する。
これはprintf関数に"なんちゃら"という文字列データのアドレスを渡すものと解釈される。
よってこのprintfの最初の仮引数はポインター型だ。もし、ポインター型でなければ、形而上の意味が不定になり、
君が提示したことはC言語的には無意味だ、
という意味になる。馬鹿げてるよ。 ∧_∧ 半端者はみっくみくにしてやんよ
( ・ω・)=つ≡つ
(っ ≡つ=つ
/ ) ババババ
( / ̄∪ >>740
printf("なんちゃら");
はprintfと言う外部名を持つ手続きに引数として文字配列の先頭アドレスを与えて呼び出すという意味しかない
わかったかね ボンクラ 月曜の朝っぱらから元気だな
とレス辿ったら昨日からずっとやってたのか >>742
敢えてprintfの型に触れず誤魔化してるようにしか見えないが。printfの型が決まってなければ、明らかにコンパイルできない文だ。 ∧_∧ 半端なヤツはみっくみくにしてやんよ
( ・ω・)=つ≡つ
(っ ≡つ=つ
/ ) ババババ
( / ̄∪ 「戻り値」はダメとか言ったらキリがない。
言葉の世界は多数決で決まる。
時代錯誤な正義を振りかざすな。 const char a[1] = "";
const char *p = "";
assert(sizeof(a) == 1);
assert(sizeof(p) == sizeof(void *));
a++; // Error
p++; // OK 我が国は教育上の配慮を生徒よりも先回りして先回りして考えているから、教育水準をここまで
高めることが出来たんだ。教育上の配慮がないなら、答えを砂漠の中から探させることになってしまうぞ。
お前は天才だからいいが、エリートじゃない一般人は教育上の配慮を行った教材じゃないと生き残れない。 >>744
コンパイルするのにprintfの型が既知である必要なんてないだろ
何言ってんだコイツ >>672
これどこの定義か知らんけど(変数じゃなくて)関数へのポインタって言うのもあるよね? ┌─┐??
|も.|??
|う |??
│来│??
│ね│??
│え .|??
│よ .|??
バカ ゴルァ │ !!.│??
└─┤ プンプン??
ヽ(`Д´)ノ ヽ(`Д´)ノ (`Д´)ノ ( `Д)??
| ̄ ̄ ̄|─| ̄ ̄ ̄|─| ̄ ̄ ̄|─□( ヽ┐U??
〜 〜  ̄◎ ̄ . ̄◎ ̄  ̄◎ ̄ ◎−>┘◎ >>735
仮引数ってプロトタイプ宣言の引数じゃなかったっけ?
あれ、関数の型を教えるだけだから、型だけ書いて変数書かないとかもおkだお。
int hoge(int); あいや〜
昔 -traditional でgccでコンパイルして
動かせた化石ソースが、
今はもう -traditional使えないんで
コンパイル出来ない、動かせないアルよ。 >>752
仮引数かいてなくて どっちがどっちじゃ! と迷う qsort
qsort(void*, size_t , size_t , int (*)(const void*,const void*)): >>750
自分で調べて一次ソースを持ってこい
許容されるソースはK&RかISO/JIS/ANSIに準ずる規格票 >>754
仮引数もガイジ認定したい用語だ
原文ではparameter
実引数をあらわすargumentはactual argumentまたはactual parameterとも呼ばれる
実仮引数 w まさにガイジ用語 >>756
漢字にすると面倒な言葉だね・・・ たまに何だっけ?ってなることがある 化石ソース
#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;
} >>754
いあ。。。
実引数の方みろよとしか。。。
プロトタイプ宣言に何期待してんだよ。 数使ってるなら、そのうち覚えるけど、そうでもないのはいちいち調べるのに手間だし
最近のは プロトタイプをポップアップ表示したりする環境もあるし ね 英語圏のガイジはどんな用語擬きの英語使うか気になる JavaにポインタがなくてCにポインタがあるのはという話が出ているが
データのあるアドレスの扱いをポインタで実現したかそうでないかということだと思われる
Javaではint[]型のような参照型の変数にはアドレスが入っている
他例えばJavaScriptではNumber, Booleanのようなラッパークラスがint*などに似た役割を果たす char*ってなんなの?
char型の配列の先頭のアドレスを入れる配列って事?
つまりchar* a = {"hello","hoge","bread"};
こう? charは256種類の値をとる型でありそれを使って'A'とか文字1つを表す
char型の配列はcharを一列に並べることによってUTF-8ヌル終端文字列を表す
その先頭のアドレスはchar*型なのでC言語ではchar*が文字列型になる
文字列の配列が欲しければ(char*)*つまりchar** >>768
char a と char* aは同じってこと?
char**は文字列の配列だから
さっきの例でchar** aならa[0]はhello, a[1]はhoge? >>770
うーん
char とchar*ってやっぱり違うのか?
charが配列でchar*は2次元配列みたいなものなのかな?
char**は3次元配列でchar***(以下略
char a[][] これは2次元配列
char *a[] これも2次元配列
char **a これも2次元配列
って事なのかな? >>764
はあ?
お前関数へのポインタも知らんのか? w >>773
「(変数じゃなくて)関数へのポインタ」があると主張している、お前が一次ソースもってこい >>662
ポインタだよ
おまえまさか「配列を渡した」とか思ってるのか?
手帳がいるのおまえだろ、あ既にもってるんだっけw >>765
全然ポインタが何か分ってねぇ。cだって配列あるじゃねーか。 >>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. ポインタが変数ではない別の何かだと言うのは、始めて聞きました >>778
>>750のことなら(変数へのポインタではなく)関数へのポインタって意味だと思うよ >>778
ポインタは、アドレスを意味する値であって
それを格納しうる変数には限らない > ポインタは、アドレスを意味する値
酷いな。小学生かよ。 ポインタが変数なのか変数でないのか、結論は出ましたか? >>785
それは論議の結論ではなく、単なる事実
# 年齢だか学歴がどうたら言ってるアフォはスルー 一つ言えることは、幼稚園児 ID:OgCRmlag がオレオレ定義したポインタ
> ポインタは、アドレスを意味する値
を誰も支持することはないだろうということ。 ID:OgCRmlag一人頓珍漢なこと言ってるだけあって、他は言ってること同じということか。
こいつ一人スルーすれば議論するようなことは何もない。 >>793
そうだな、おまえが根拠を示す必要があるな
どこに pointer is an lvalue とあるのか頑張って探せや そもそも質問者は定義を聞いているんじゃない。使い道を聞いているんだ。
printf()で使う。これで答えのはずだ。
それなのにおまえらは規格書も読まずオレオレ定義を展開しやがって。 手帳申請しろとまで言っといて
都合が悪くなったら手のひら返ししてるアフォはスルー やーい直球の罵倒語しか言うことなくなってやんのwwwwwwwww ID:OgCRmlag ID:yPIvhEga ケンカしてるこの二人をNGにするとすっきり。 スルーされてる約1名が相手して貰えている人をクリティカル嫉妬wwww んなこたどうでもいい
&演算子が生じる結果は左辺値なのかよ?
6.5.3.2 にはそんなこと書いてねえぞボケこら ゴガギーン
ドッカン
m ドッカン
=====) )) ☆
∧_∧ | | / / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
( )| |_____ ∧_∧ < おらっ!出てこいID:DdwwpY1/
「 ⌒ ̄ | | || (´Д` ) \___________
| /  ̄ | |/ 「 \
| | | | || || /\\
| | | | | へ//| | | |
| | | ロ|ロ |/,へ \| | | |
| ∧ | | | |/ \ / ( )
| | | |〈 | | | |
/ / / / | / | 〈| | |
/ / / / | | || | |
/ / / / =-----=-------- | | >>809
計算不能であることが証明されている。Wikipediaより。 >>816
現状、どんな言語でも駄目。量子コンピュータで計算の概念が再定義される位のことが起こらないと無理。 ありがとうございます
あなたのレベルが大体わかりました おそらく、量子コンピュータや生物コンピュータでも計算不能だろう。 だからこんなキチガイはスルーしろと言ったのに…
ただのキチガイなんだから >>775
> おまえまさか「配列を渡した」とか思ってるのか?
配列名がどのように扱われるか知らないのか 完全なガイジ
とっとと手帳申請しろ >>823
そのバカには何言ってもダメから
スルーしろ >>826
いや馬鹿は>>778が読解力なさすぎと指摘されているのに同じ解釈を繰り返している>>823でしょ。
ID:r7C/NYo5はcompが変数であることは否定していないし、その前の議論は(変数へのポインタではなく)関数へのポインタが存在するかどうかだ >>823
compそのものは変数だけど、関数を指しているポインタでしょ?
ID:Uo4tfgNRが関数へのポインタが存在しないって主張していらっしゃるようだから示しただけだよ
>>774の「(変数じゃなくて)関数へのポインタ」
の「変数じゃなくて」は「ポインタが変数でない」と言っているのでなくはなく「ポインタの指す先が変数でなく関数」と言っていると思うんだけど違うかいな?
A pointer is a variable that contains the address of another variable. の最初のvariableじゃなくてanother variable の方ってことね (変数でない)関数へのポインタが存在するかどうかだ
じゃないの? typedef void (*INTVEC)(void);
(INTVEC)0; >>829
(変数でない)は関数かポインタかどっちにかかっていると思う? 俺は関数だと思う 関数は変数じゃないと言うのは理解出来るけど
関数へのポインタが変数じゃないと考えている人がいるようなので 違うなら良いんです
ポインタは変数じゃないと結論が出るかどうかを楽しみにしているだけなので >>828
「ポインタは変数である」
と言う文脈で「ポインタの指すものが変数じゃ無いものがある」と言い出すガイジが存在するって言ってるのか? 変数へのポインタが存在するかどうかは、議論になってないと思いました 議論になっているのは、
「ポインタは変数ではない」あるいは
「ポインタには変数で無いものが存在する」ってことかな?
どちらにしても、何か違和感を感じざるを得ません ポインタという言葉が、ポインタ型かポインタ変数かどちらのことを意味しているのかは文脈次第
関数へのポインタ云々の主張はポインタ型のことを言っているし、ポインタは変数云々の主張はポインタ変数のことを言っている
両者を混同して議論しているから混乱する
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* >>824
ははは、ほとぼりが冷めるのを待って出てきたか
負 け 犬 め
&演算子が生じる結果は左辺値なのかよ?
6.5.3.2 にはそんなこと書いてねえぞボケこら
そのまま引っ込んでれば逃げられるのに
バカなやつw こんなんじゃラチがあかんやろ
厳密な言語仕様規定用のメタランゲージで
Cのポインタ概念説明したれ
そんなん難しすぎて多分読めんけどな…わははは 関数ポインタ以外のポインタ型の変数ならなんでもいいよ >>841
&演算子ってなんだよ
お前も見えてないものが見えてるのか
とっとと手帳申請しろ
> printf("Hello, C world!\n"); これがポインタだっ どやっ >>837
「ポインタは変数の位置を示す変数である」っていう文脈は飽きたのか?w
文脈のすり替えは辞めろガイジ >>850
それに文句があるなら、その先の章も読んだ上で、カーニハンとリッチーに言え
K&R 1stで学んだんだろ w ガイジ ポインタが変数かどうかとか言ってるのって>>778か?
そしてそれにレスしてるID:OgCRmlagか?
それ以前は居なかったような 有用な情報としては>>840があって、残りのほとんどは子供の喧嘩とそれをからかっている周囲の茶々だから、スルーしとけばいいよ。 >>854
>>840こそポインタと配列を混同する諸悪の根源
ポインタ型をポインタと呼ぶ事で、配列とポインタの区別が出来ない、ID:OgCRmlagのようなガイジが量産される >>852
「それ」って「A pointer is a variable that contains the address of another variable. 」のことか?
そこには文句ないよ。
勝手に「ポインタが変数かどうか」とかいう文脈にすり替えたことには文句があるけどな >>856
ガイジID:OgCRmlagは文句があるようだぞ 質問がある奴はVIPに来れば大体俺がいるよプゲラwww > 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の方にデバッグの機能がついているのだろうか…
こいつド素人。 > printf("Hello, C world!\n"); これがポインタだっ どやっ
よりはまし >>863
いつまで言ってんだ? 引数はポインター型だって結論だっただろ。 この場合printf関数の引数は、被参照型 文字列リテラル オブジェクトから派生されたポインタ型のオブジェクト >>866
>>840を見直して来い
JIS X 3010で使用されている用語だ
勿論オブジェクト指向とは何の関係もない
ていうかK&Rでもオブジェクトという用語は使われていた気がする しらん
まぎらわしい言い方してるから自分の頭も混乱するんだ
文字列リテラルからポインタ型が派生するのって変じゃないか
ポインタのほうが汎用的だし逆だろ >>869
抽象的思考のできない奴だな
intからint*を派生するのと同じことを言ってるだけ
派生されたポインタ型を変数に代入したものがポインタ変数
お前の言うポインタとはいったい何だ? い、いやー。object自体は本当にK&Rに書いてあったよ
オブジェクト志向登場以前から使われてきたんじゃないかな? 曜日の頭文字
#include<stdio.h>
int main(void){
int w = 3;
printf("%c\n", "SMTWTFS"[w]);
return 0;
} C言語で派生って言ったら型の派生の事だな
少なくとも型変換の意味ではない
配列型の式(文字列リテラル)が型変換されて非左辺値なポインタ型の式になるんだろ
>>866は変換前後ともオブジェクトだって言ってるけど
アドレス付け可能な領域に保存されている保証のないものがオブジェクトなの? 何に盛り上がってるのかよくわからんけど
C言語だってオブジェクトはオブジェクトって呼ばれてる。
K&Rにも書かれている。
もちろん普通名詞のオブジェクトね 張っておくか
>>840から転載
JIS X 3010
ポインタ型(pointer type)は,被参照型(referenced type)と呼ぶ関数型,オブジェクト型又は不完全型から派生することができる。
ポインタ型は,被参照型の実体を参照するための値をもつオブジェクトを表す。被参照型Tから派生されるポインタ型は,“Tへのポインタ”と呼ぶ。
被参照型からポインタ型を構成することを“ポインタ型派生”と呼ぶ。 日本語的に派生って言ったら亜種ができることじゃん
double と *double って全然意味ちがうだろ
JavaとかでいったらObjectとRef<Object>ぐらいちがう
アドレスという概念をもちだして、多少関係してる違う型つくってるんじゃないか
JISがまちがってる JISは間違ってない
構文上、型指定子に*は含まれない
宣言子で*を付けることで被参照型からポインタ型に派生させているのだから、型の派生で合っている
>>865は間違ってる
この場合は派生ではなく型変換 文字列リテラル オブジェクトはたぶん中身の文字データのことだろう
定義にしたがうと
それへのポインタは文字列リテラルから派生したポインタだからいいんじゃないの 普通名詞としての派生なら良いんじゃねーの
規格で定義されている派生として言ってるなら間違いってだけ
派生は型に対しての規則であって型を持つ式(オブジェクト)は派生しない、派生型に型変換されるだけ 型変換であろうとポインタ型派生であろうとポインタ型である結果は同じことではないの? 世間に通じない用語を振りかざして些末な定義や言葉尻について無益な議論をしていると
大学時代を思い出してほっこりする >>861
なんで粘着されてんだよ…
あとこれの何がダメなんだ?
お前らデバッガのステップ実行に興味ないの?
ちょっと調べた所ではint 1で行けるかもぐらいか >>885
Visual Studio使えばデバッグ楽勝やで。 >>886
実行中のプロセスにアタッチして、アセンブラ見ながらステップインで解析したいんだけどVSじゃ出来なくない? 用語オブジェクトについての哲学的な論考や定義そのものがJISには載ってなさそうだな
深く考えずに音写しただけ
だからカタカナの用語になってる >>864
それが、ポインタと配列の区別をつけられない本質だ
>>744の大ウソをゴメンなさいしてからホザけ カス >>887
バージョンやエディションによって使える機能が違う。気にせず使いたいなら、「買え」 >>890
学生だしお金ないからね
2017のcommunityじゃ無理? >>744
訂正。関数の型が決まってなくともコンパイルできることがある。 >>893
あなた様も障害者手帳の申請をする事をお勧めするしだいで御座いまする。
まず、頭脳が残念過ぎまする。
そして、頭脳が残念過ぎまする。
加えて、頭脳が残念過ぎまする。
きっと、高い等級で認定されると愚考致しまする。
敬具 ポインタの話題ならアセンブラやった方が早いと思うんだよね
ポインタとして宣言された変数は32bit環境なら4バイト、64bitなら8バイトのメモリが確保されるだけだが、配列の場合、サイズ×添字の分メモリが確保されて、配列名がその先頭アドレスをあらわすってだけなのに >>891
VS2017Enterpriseならこんな感じ
Communityはよくわからん
http://i.imgur.com/wI7bq3C.png >>896
いい感じだな
でも俺がやりたいのはソース無しの実行可能ファイルを、アセンブリを表示しながらステップインだからVSじゃ出来ないのかも…
まあ言っちゃうとクラックがしたいんだけどね >>894
現実世界ではあのごとき言動はアウトだからな。忠告だ。 >>897
Windowsで?
Linux なら gdb でやれそうな感じはするが、ソースなしだとどうなんだろう? >>899
一応LinuxはUbuntuならあるよ
やっぱりLinux勉強しとくべきかな? クラークなら、windbgとかollydbgとか使えば? 汗もでるよ。 どっちも持ってて試したけどイマイチ…
int 3のブレークポイントがある所でしか止まらないじゃん?
普通に最初からステップインでやれないものか…
だから>861でエミュ上での実行が良いって言ったんだよね >>897
出来るよ やり方は片山KUZUが見てるから教えない どうもフラグレジスタのTrap Flagというのをセットすることでシングルステップ実行が出来るらしい…
とても面倒臭いけども自分でコード書いて頑張りますわ 何も知らないド素人同然なのになんでC言語すまたーとか名乗ってんの? gdbでstepiってやればできんじゃねえの?ググれば1分で分かりそうだけどw >>908
なんだー
>>910
だからLinuxじゃなくてwinなんだよww
Linuxは箱庭でしか動かんわ Cなのにスマタさん。特権プレイモードってのがあるんですよ。Winの起動オプションをよく見てください。 >>911
gccもgdbもWindowsで使える >>913
ほー有益な情報をありがとう
それだとどんなコマンドが使えるの? ちょっと調べてみたんだがgdbはソースがあって、-gオプションでデバッグ情報を生成したときのみ使えるコマンドじゃん
俺がデバッグしたいのはただの実行可能ファイルなんだ… >>848
案の定w
もう、とぼける位しかできねえボコボコだもんなおまえ
841に6.5.3.2と書いてあるのがどういう意味か
見当もつかない赤っ恥に気づきもしないからこそ
それでとぼけたつもりになっているんだろう
浅 は か な や つ w >>919
行番号やデバッグシンボルが見られないだけで、gdb自体は使える
ollydbgやらにしても、任意の場所で止めたければ、ブレークポイント張れば済むだろ >>921
おお使えたわw
でも実行ファイル側が入力待ち状態なんだけどデバッガ操作できない…
当たり前かここら辺はどうやって追えばいいんだろうか
手前にブレークポイント作ってステップインかな? いるよなー
GNUはハッカーのものだってことを忘れてるやつ 最初っからステップインで実行したいんだけどシンボルテーブルが無いおかげでブレークポイント作れないからアドレス0x00400AFFにCCを入れて実行開始アドレスを0x00400AFFに書き換えたんだけどローダが読んでくれないみたい…
アドバイスありませんかね gdbなら「b *アドレス」でブレーク貼れるでしょ >>926
どうもデバッグ情報がないから無理っぽい…?
で、仕方なく開始アドレスにバイナリエディタでCC入れて止めてみたんだけど、デバッグ情報がないせいで’s’コマンドが実行できない
”cannot find bounds of function."って出るんだけど、ググったらデバッグ情報がないとこうなるみたい
gdbじゃexeのシングルステップ実行は無理なんじゃ…
とりあえずネットで調べながら自分でシングルステップ実行するプログラム作ったんだけど、デバッグイベント起こらなくてWaitForDebugEvent関数で止まるwww
どうすりゃデバッグイベント起こせるんだよ しょぼいデバッガみたいのは動いたけどシングルステップ実行にならん…
なぜだ なんで実行する必要があるんだ? 逆アセンブルしてソースコードを起こせばいいでしょ。 >>929
そんな膨大なコードから目的の部分が見つかるわけないでしょ >>920
で、それがどうしたんだ?
> printf("Hello, C world!\n"); これがポインタだっ どやっ
手帳申請しろよ w >>920
この、ガイジは全然理解してない事を理解できずにガイジを再生産しようとしたやがる
> printf("Hello, C world!\n"); これがポインタだっ どやっ
これは、ポインタじゃなくてポインタ型
そしてそれは、ポインタと配列を区別出来ないガイジの本質
役所には盆休みはないから、休みのうちに手帳申請しとけよ > これは、ポインタじゃなくてポインタ型
失笑
「ポインタと配列を区別出来ないガイジの本質」を
そのままお返しだ、さあ受け取れアフォ こーゆー手合いは、こっちから攻め込まなくても
時間稼ぎしてれば勝手に自爆してくれるから楽だ 機械語のシングルステップ実行に成功した
けどレジスタとか表示させるのにまたプログラム改変しなきゃなんない
面倒臭すぎる 配列も文字列リテラルも式の中の評価はポインタ型だからな
引数として評価されると本質は同じことになる >>936
ちげーよ
assert(sizeof(const char *) == sizeof "string literal"); //abend >>937
それは sizeof 演算子を適用したときの評価結果が異なっているだけだろ
型は同じでもオブジェクトそのものは別なのだから当たり前 関数の引数として、配列をまるまるスタックにつむには
struct で包むぐらい? typedef はポインタのままよね?
https://ideone.com/3MYBoM >>938
おまえさんはこう言ったんだぜ
> 配列も文字列リテラルも式の中の評価はポインタ型だからな
sizeofつまりunary-expressionは紛れもなく式の1つだ
よって式の中で文字列リテラルがポインタ型というのは正しくない >>940
面倒くさい奴だな
正確には>>937の前者は型の評価結果、後者は式の評価結果だ
sizeof演算子は型名に適用する場合と式に適用する場合の二通りの使い方がある
演算子の動作も評価も異なる 前置,後置の ++ や -- は式じゃない ってことないし
>>936 は見てる状況を限定しすぎてないかな? >>941
ほほー型の評価結果と式の評価結果とな
じゃあこれはどう説明する?
const char* ptr
assert(sizeof ptr == sizeof "string literal"); //abend >>943
それは式同士の評価結果の比較
ポインタ型のオブジェクト同士を比較してる
int型変数の場合、iと(i+1)のとき評価結果は異なるが、型は同じというのと同じ >>944
えっ!?
assert(sizeof ptr == sizeof("string literal" + 1)); //pass
おまえさん、これが通るのは何が変わったというんだ? 個人攻撃抜きでやれば、面白い事言っているんだけどなぁ:-P クソ下らんことが141000レスも続いてんだぞ
14万だ
過去スレなんて見た日にゃ目がつぶれてそのまま気絶だ ガイジID:7zaXDMDrは必死になって、
> printf("Hello, C world!\n"); これがポインタだっ どやっ
これを否定するネタを探してきたらしいが
あてにならない(どうとでも取れる)JIS規格票は根拠にならんぞ
> A pointer is a variable that contains the address of another variable.
文字列は変数じゃない
従ってポインタじゃない これは神が決めた事 >>939
配列の時点でスタックに確保されてるけど
それとは別のスタック領域にコピーとして渡したいってことなら構造体かな このスレは必ず絡んでくるやつが居るな
しかも延々とな
レスされて「この野郎!」と思った時には、深呼吸して落ち着こう。
そしてこうつぶやくのだ「相手にするなヨシオ」とな >>951
ははは、JISつまりISO/IECの和訳はおまえの敵か
自らの死刑宣告を読み上げていることに気付いているのか 個人攻撃は、俺もそんなことしにきているわけじゃないんだが
喧嘩売ってくる馬鹿がいるとき、場合によるが応戦することもある
俺には9条みたいなふざけた縛りはない、それだけのことだ
技術的なことを言うたびにもれなく失笑させてくれる
民進党のブーメラン屋みたいなマゾ野郎がいるから、
ちょっとSっ気出ちまってるんだよ >>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"); これがポインタだっ どやっ
は、やっぱりお笑いだ わかったら明日手帳申請にいくんだぞ ガイジ fflush(mevius.2ch.net/test/read.cgi/tech/1500293207/); >>959
英語でDeclaratorsって書いてあるの意味わかってる?
リテラルは宣言して使うものじゃないんで、
そこは全然関係ない
ア フ ォ w w w >>953
そそ
複製を渡して
よばれた関数内での値の書き換えが呼び出し元に伝わらない形が気になってた >>967
pointerの定義は規格票の中でこれしか無いって言ってるんだよ 他は定義せずに使っている
ガイジはどこまで言ってもガイジだな 【問題】
ポインタとは何か
日本語で二行以内で書きなさい >>973
よくある実装ではそうだろうけど必ずしもメモリ上のアドレスでなくてもよかったような?
例えば(何か特殊な事情がないとこんな実装はしないだろうけど)ファイルでもいいんだよね。
*p ってやった時にアクセスできればいいだけだから。そういうアクセスになるようにコンパイルされればそう動く。 【問題】
自己顕示とは何か
日本語で二行以内で書きなさい >>974
学歴?
>>975
いや、ポインタ自体はただのアドレスだよ
厳密に言えば論理アドレス(物理アドレスでは無い)
ファイルってのは構造体に過ぎないわけで、windowsならFILE構造体ってのが用意されてる
だから、FILE *fp;と書けば、fpはただのアドレスだけど、その指す先はFILE構造体のサイズ分のメモリ領域となる >>969
ポインタとは何かという「定義」と、
宣言のうち実体を作る「定義」を混同しているわけね
ア フ ォ w w w ahoとは何かと言う定義と実装された目前のahoの違い
&でアドレス取ろうとしたら住所不定であったでござるw それはlvalueを除くvalue of an expressionだね
&969; //erroneous 長いバトルだのう
>>629
サラっと嘘吐いてないかい? char const **s; // **s を修飾
char * const *s; // *s を修飾
char ** const s; // s を修飾
これなら左と右を間違えたで済むが
あの文面はそうじゃない char const * array = xxx
って初期化したあとで
配列とポインタの区別ってつく? >>982
「ポインタ」はただの単語だ
それに意味を与えることが「定義」
> ポインタとは何かという「定義」と、
> 宣言のうち実体を作る「定義」を混同しているわけね
前者後者で意味を分けるって事はお前が「定義」したって事だ
ガイジのお前がな w >>987
ポインタの型修飾子は左側の*(ポインタ型)への修飾であってるだろ
右側のsを修飾したら識別子への修飾になってしまう
型指定の方のconstは構文規則が違うから、一緒に語ること自体がアレだけど > printf("Hello, C world!\n"); これがポインタだっ どやっ
やはり、これはガイジが自分で定義した「ポインタ」の説明だったな このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
life time: 24日 0時間 31分 31秒 2ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 2ちゃんねる専用ブラウザからの広告除去
★ 2ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.2ch.net/
▼ 浪人ログインはこちら ▼
https://login.2ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。