◎正当な理由による書き込みの削除について: 生島英之 とみられる方へ:C言語なら俺に聞け 151 YouTube動画>5本 ->画像>9枚
動画、画像抽出 ||
この掲示板へ
類似スレ
掲示板一覧 人気スレ 動画人気順
このスレへの固定リンク: http://5chb.net/r/tech/1554171817/ ヒント: 5chスレのurlに http ://xxxx.5chb .net/xxxx のようにb を入れるだけでここでスレ保存、閲覧できます。
前スレ
C言語なら俺に聞け 150
http://2chb.net/r/tech/1549427943/ !extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
↑
次スレを作る時は上記1行を「1行目に」コピーして2行に増やして必ず1行目に入るようにしてください。
…あってる…?
これで良い…のかな
!extend:checked:vvvvv:1000:512
↑
次スレを作る時は
>>1 の上記1行を「1行目に」コピーして2行に増やして必ず1行目に入るようにしてください。
前スレ977のリンクが404ぽいので
魚拓から復元してみた
https://ideone.com/IhBGrr 977 名前:デフォルトの名無しさん (アウアウエー Sa3f-XwTE)[] 投稿日:2019/04/01(月) 21:33:02.04 ID:v6mAk26Pa [1/3]
「要素型がint型で要素数がnの配列を受け取って、
全要素に添字と同じ値を代入する関数set_idx」を作成しました。
http://codepad.org/krsZoljq 配列aの要素数はマクロ定義で#define NUMBER 10とし、
問題なく動作しました。
ところが、この要素数10を60に書き換えてみたところ、
コンパイルされたexeファイルを実行しても動作しません。
コンパイラはMinGW(gcc)です。
思い当たる原因を教えていただけないでしょうか。
>>4 codepadが消えてしまっていたのですね、
復元ありがとうございます。
当初は16行目を
int a[] = {0};
と書いていたため上手く動作せず質問した次第です。
前スレで色々とレス頂きありがとうございました。
プログラムを書く際にバッファオーバーランの危険性を考慮する必要があることすら知らないレベルなので、
メモリの使い方を念頭において学習していきます。
C言語は諦めた方がよいというレスもありましたが、
センスがないのは重々承知の上で、腹を括って勉強していくつもりです。
>>5 いえ
すみません
「呼び出し元で配列長を管理出来ている。問題はない」と言いうるようです /* むしろ free し忘れる方が問題か */
誤解・不適切な部分があったこと、申し訳なく存じます
色々大変かも知れませんが、頑張ってください
>>5 cは非生産的で大したアプリは最初のうちは作れない
しかし覚えれば言語やOSや組み込みなどに手が出せるようになる
独学はイバラの道だが頑張ってね
>「c言語 おすすめしない理由」でググると
>
https://www.sejuku.net/blog/3619 sejukuはねーよ
C言語のウソ記事まき散らしたとこじゃねえか
全く以てくだらんな 何言語だろうが関係ねえ話で 習得できなかったやつの言い訳を集めただけの駄文だ もし「初心者」がここを見ているなら一言いいたい 【 あ ん な の 忘 れ ろ 】 プログラム言語に限らず人生すべてに影響する有害な集団催眠だ
既存のソフト(dll)を引き継いだのですが、そのdll内でバイナリファイルをリードしています。 _open(xxx, _O_BINARY, _S_IREAD) しているのですが、複数のプロセスが同じタイミングでアクセスしても排他処理されないですよね? どうもうまく読めてないのが原因かもしれない障害が発生して困っています。 どうすれば排他処理できるでしょうか。
レスありがとございます。 後だしですが、書き込みはされないです。そこまでかんがえてなかったですが。 リードだけなら大丈夫そうですね。だったら他のとこに問題があるのかな・・・
ファイル書いてる最中に読まないようにそのライブラリを使う側と書き込みする側のプログラムでロック掛けるようにするぐらいしか方法ないのでは? ライブラリのソースもあって自分でも直せるというのなら自分でその辺改造しちゃえば良いんだろうけど。それだったらわざわざここに質問書かんよな?
そもそも1プロセスでもそのファイルをオープンできているのだろうか?
どこまで説明したら適切なアドバイスもらえるかって実務にも重要な要素だよな。これも練習ですな。
https://wandbox.org/ codepad死んだっぽいので次スレから代わりに↑をテンプレに入れよう
ここどう?
https://www.jdoodle.com/ 色んな言語使えるようだ。もちろんCもある。
fprintf_s みたいな foo_s 系の関数実装って増えてるん? 「Visual C++ でガッコウのコードがコンパイルできない」みたいな話をたまに見かけるけど…
セキュリティの為にfoo_sが推奨されてるんだから、ガッコウのコードの方を変えるべきでは? 何年経ったと思ってるんだ。
>>22 その s 系とかいうやつは、いまいち気に要らない仕様でいちいち頭に来るので私は使わないです
>>23 _s 系の関数って言語仕様上はオプショナルでしょ。
安全でない関数の中で明確に仕様から削除されたのは
gets だけのはずだし、もちろん、安全性を意識させるのは
望ましいけど、どこでも _s 系の関数を使えるわけじゃない。
あくまでもオプショナルだから
>>22 は「実装って」という聞き方をしているのだと思うぞ。
>>25 Microsoft のコンパイラ以外では使えない、と聞いているのも納得がいかないのです、本当によいものなら、なぜ _s 系が移植されないのでしょうか…
>>26 そんなことを
>>22 は聞いていない。
誤読。
>>27 失礼。
>>26 は
>>22 への直接または間接の回答を意図しておりません
とある「有用な」実装が広く使われるべき、という意見に対して、microsoft のコンパイラ環境でしか使えない実装を教育目的で強要してもいいのか、というか、そもそもそんなに「有用」な実装なのですか?本当ですか?
という視点で
>>22 を強く批判する内容です
>>28 _s 系の関数はオプショナルとは言えども規格にある存在なので、
Visual C++ は例のひとつとして挙がっているにすぎません。
間違いなくありがちな問題を軽減しますので、
使える処理系ならば使うように誘導するのは合理的です。
>>29 お手数をおかけし恐縮ですが
「規格にある存在」というその規格をご教示願えますか?
手元にある ISO/IEC 9899:1999 には見えないようですが…
visual studioで新しいプロジェクトを作成して始めてビルドする度に /D _CRT_SECURE_NO_WARNINGS に誘導されてます……
localtime_s 使ったら内部でmutex使ってて無茶苦茶遅いのはむかついた
>>30 なぜそんな古いものを…
引数にvoid入れるとびっくりするタイプ?
localtimeについては批判できねぇ。 マルチスレッドでlocaltime呼び出してたせいで正体不明のバグに数日間悩まされたからな。。。
>>30 C99 には無い。 C11 に入った。
Annex K (normative) Bounds-checking interfaces
って項目ね。
Wipkipedia でも言及がある。
https://ja.wikipedia.org/wiki/C11_ (C%E8%A8%80%E8%AA%9E)#.E3.82.AA.E3.83.97.E3.82.B7.E3.83.A7.E3.83.B3.E6.A9.9F.E8.83.BD
>>22 > fprintf_s みたいな
> foo_s 系の関数実装って増えてるん?
「いや増えてない」←わかる
「俺は foo_s みたいな関数が嫌い」←わかる
「俺は foo_s みたいな関数が嫌いだから
>>22 を強く批判する」←全く分からない
誰か解説してくれるのだろうか
私は「ガッコウのセンセイ」でもないし「ガッコウの教材」の著者でもないから何とも
新学期だから知恵袋とかに質問増えそうじゃん?
>>22 を批判してるんじゃなくて
>>22 にかかれてるような状況を批判してるんじゃないの?
>という視点で
>>22 を強く批判する内容です
そう解釈してやっても良いが、この日本語はおかしい
真の漢なら #ifdef _win32 localtime_s() #else localtime_r() #endif
>>42 __STDC_LIB_EXT1__ を使った方がポータブルじゃない?
>>43 ググってヒットした件数的にこんなん使えませんわ。
>>47 件数じゃなくて、用途に対する妥当性で考えてよ
質問スレっぽいスレタイなのにそこまで考えさせられるのかよw あんまり使われてないっぽいものは使わないってスタンスは崩さないよ、俺は。
使われてないものは使わない つまりC言語自体・・・(ボソッ
>>35 ほえ〜
Annex K は確かにみじんも記憶に残っていません…でした
ご教示いただき感謝いたします
>>33 実は K&R2 のみが正義、K&R2 こそ必要にしてかつ十分、という立場なので、そんな私が C99 を推挙した時点で、すでにして大幅に compromise しているつもりなのでした…
K&R2って妥協の産物だろ K&R1こそ原理主義者の拠り所だ
でもまあ JIS の最新は C99 相当だしな。 英語を読むのはしんどいし、 日本語の資料があるなら日本語の方がいいわ。
>>54 >K&R2って妥協の産物
それも理解できます
K&R2 の最大の改悪部分は「構造体の実体渡しができること」
配列の実体を丸まま関数に渡せないくせに、構造体では出来るって意味わかんない
もしかして
struct S {
int a[65536];
};
とかいう構造体があったら、それを全部スタックに載せるつもりなのか?そういうことをする奴が現れる可能性を考えたのか?と小一時間問い詰めたい気分になりました…
struct S { long long ago0[1048576*1048576]; long long ago1[1048576*1048576]; long long ago2[1048576*1048576]; long long ago3[1048576*1048576]; };
>>56 それは、配列の方が悪いんでしょうに
構造体はコピーを渡すのが全然正しいじゃないの
in a galaxy far, far away...
/* not reach here outside the universe */
>>58 構造体といえどもアドレスを渡すのが真に正しく、配列なら言語仕様でそれを強要される、なぜ構造体には甘い顔を見せる必要があるのか?
>>56 極端なことが「できてしまう」のが問題ということですか? そもそも C なんてそんなものでしょう。
状況を見て適当に使い分けるべきで、駄目な使い方をしたら何だって駄目ですよ。
>>63 ド素人の勝手な推測だけれども
「配列だとマジでサイズどんだけか分かったもんじゃないじゃん」
「構造体のメンバ」に配列が来る場合はあるけど、そのサイズは多寡が知れてるじゃん」
という考えかもアリかもしんない
むしろ勝手にアドレス渡しになる配列が甘やかされすぎ 文字列がcharの配列だからしょうがないけど
配列の実引数をポインタ仮引数で受けれるという仕様上、配列のサイズ情報が失われコンパイラは何バイトコピーすれば良いか分からないから致し方ない。
>>56 昔々初心者の頃にやっちゃって物凄く遅くなって気づいた事があったw
構造体も const で渡されたらこっそりポインタ使って読むだけのアクセスするコード作っちゃっても良いのにな。 マルチスレッドで動くプログラムの時に死ぬかも知れんが。
そもそも[]が無ければ誤解も減ったと思うよ いい年した大人が、引数で渡ってきた配列の sizeof 取ろうとするの良く見るぜ
現代教えられてる言語で60年代中期の古さを引きずってる言語だからだ 配列に対してsize適用すれば長さを取れるのは現代じゃあ普通で、 取れないC言語のほうがおかしい、 これ、誤解でも何でもないからな
>>58 事実上、構造体はほとんどの場合ポインタで渡すよな
実体で渡すという特殊なケースがデフォになってて
ポインタで渡すという主要な使い方でアドレス演算子が必須って
おかしくね?
>>70 だよな
[]こそ諸悪の根元
自動変数と仮引数と外部宣言でみんな意味違うとか
気が狂ってるとしか思えない
そして「C言語はおかしい」と満場一致で結論が出て、また新たな言語が作られるのであった。 完
>>73 たまから、構造体はint, doubleとかの変数と同じく値渡しで一貫してる
配列がおかしいだけ
不定と未定義がある限り、C言語はおかしくあり続けるのだ。
>>77 const使わんの? ・・・て、先に誰か言ってるな
>>78 intが値渡しと決められた理由は理解してるか?
配列みたいに暗黙のアドレス演算子にもやればできた話で
そのほうがおまえさんの主張する一貫性にも叶うわけだが
>>80 そりゃ、付けられるときは基本いつでもconstですよ
だからなに
>>84 77で「安全のために」って言っているのを
誤って変更してしまうのを防ぐためと読んでいたが
これがそもそも違うのか?
>>86 変更しようがしまいが、意図があろうがなかろうが、コンテクストを分けるためですよ。
>>87 へー、じゃあ関数を呼び出すたびごとにプロセス生成とかすんの?
>>88 なんで?
チミは頻繁にグローバル変数を使うってこと?やめたほうがええよ
>>89 なんでグローバル変数を使っちゃいかんのだ?
スタックにしまえば安全だと思っているならおめでたいやつよ
>>90 グローバル変数だめでしょ。
スタックってなんのこと?まさか関数呼び出しとスタックがセットだと思ってる?
>>92 そんなもん、密結合・低凝集を実現する目的でしか役に立たんからですよ。
>>93 仮引数と自動変数が置かれるスタックもグローバルなんだが
そのせいで密結合・低凝集になったりしているか?
記憶領域確保に失敗したとき 落ちないように頑張ってくれるのと 即落ちるのと どっちがどうだったか忘れた 最近読んだどっかに書いてあった筈だけど思い出せん… x86 限定で良いので挙動とコーディングの関係に心当たりのある方御教示ねがいます。。。
>>94 そうそう、だからポインタを使わないのがいいね
構造体に限った話でもないが、グローバル変数のポインタが引数として渡され、更にそういう関数が多段に続いたコードとか地獄だよ。 誰かが止めねばならんよ。
>>97 あ、おまえさんそっち系か
・・・なんでCなんか使うの?
>>98 グローバル変数をポインタ渡しは意味あるでしょ
スコープを指定する、的なやつ
>>103 #include <stdio.h>
int x, y;
int main(void)
{
scanf("%d", &x);
scanf("%d", &y);
return 0;
}
暗黙にxに書き込む関数とscanfは
どっちが汎用性が高いか
どっちが見通しがいいか
考えてみな
>>105 おまえさんに解らせることはもう諦めた
放っといてくれ
>>82 でイミフなこと言ってるなって思ったら単なる基地外やんw
結局「constを仮引数に使えないとき」というのがどんなときなのが全く分からず 「規格通りに書いてはならない」ケースが実在したのかしら
いや 仕事で使ってませんから そもそも「毎回」っていうほど書いてませんし 何らかのツールで勝手に入るので「敢えて書く必要性がない」ということなのでしょうか それとも一律に「書くな」というルールが定着している組織が実在しているのでしょうか
>>109 そうか、82がおまえさんはイミフなのか
悪いけど匙を投げるね
>>104 にて
scanf("%d", &x);
と書かれているのですが、ターミナルから9を80字入力されたらどうなさるおつもりなのでしょうか
また、signedともunsignedとも指定されておりませんが、その点はどのように汎用性を確保なさるのでしょうか
>>114 俺に聞くな、規格票を嫁
http://kikakurui.com/x3/X3010-2003-01.html 104のコードが規格厳密合致プログラム(strictly conforming program)であることのみここに宣言する
この命題を反証されたら、潔く敗北を認める
では貴殿の返答を待つ
intだけだったらsigned intになるっしょ。 近代的な環境なら、正しく書式を設定すればscanfはオーバーフローしない。
shortはsigned short、 longはsigned longだが、 charはコンパイラの設定によりsignedにもunsignedにもなる。普通はsignedだがな。
>>115 > 規格厳密合致プログラム
残念ながら、リンク先の日本語文章に定義が無く意味不明だったため
これから英文を読むことにします
型の件含め、皆様の御教示に感謝します
"shall" の訳文に、筆者の苦悩のようなものが見受けられました その点ふくめ、私は知らないことが非常に多いようで、ご迷惑をおかけしました
>>65 >>56 struct S {
int a[65536];
};
>>119 規格の中に現れる shall は十中八九「話者の意思」を示す
例文:You shall die.
超訳:「死ね!」
>>121 > 例文:You shall die.
> 超訳:「死ね!」
さすがにそれは…
日本語の文章の方に "shall" は書かれてなかったもんで把握、と
示唆したつもりだったのですが、通じなかったようで、表現力につき反省する所しきりであります
*'``・* 。 | `*。 ,。∩彡⌒ミ * みんなハゲにな〜れ + (´・ω・`) *。+゚ `*。 ヽ、 つ *゚* `・+。*・' ゚⊃ +゚ ☆ ∪~ 。*゚ `・+。*・ ゚
>>118 4. 規格合致性
規格厳密合致プログラム(strictly conforming program)は,この規格で規定する言語機能及びライブラリ
だけを使用しなければならない(2)。さらに,いかなる未規定の動作,未定義の動作又は処理系定義の動作に依存する出力も生成してはならず,しかもどのような最低限の処理系限界も超えてはならない。
(2)規格厳密合致プログラムは,どの処理系でもサポートしているわけではない機能(附属書 F の中に例
がある。)を使うことができる。ただし,その機能を使うことができるのは,それが適切なマクロをもつ#ifdef 指令とそれに対応する#endif 指令とに囲まれている場合に限る。次に示すプログラム片がその例である。
#ifdef _ _STDC_IEC_559_ _ /* FE_UPWARD
が定義されている */
/* ... */
fesetround(FE_UPWARD);
/*
... */
#endif
RFCなんかである要請の強度( MUST SHALL MAY ) みたいに使う用語の縛りはない?
>>122 あくまで私見ですが、現代英語では will に単純に置き換えられるような shall の使い方はもうありえなく、
shall を使うのは shall を使う必然性があるから、だから、shall は辞書でいうところの「意志未来」であり、したがって shall を訳出しないのは不誠実な訳だとどうしても私は感じてしまいます…
「英文読解」の場ではなかったので控えていたのですが
>>127 個人的には「こんなのを訳出させられた人は凄い」と思ってます
「原典は英語で日本語訳がある」もので「日本語訳が意味不明」の場合
原典で確認すると「訳出で明確ではない」部分が確認できるケースが多々あります
"shall" をどのように訳出するかは個人差ありますし
今回の箇所が「以前同じ文言があったので単純にコピペした」ものかどうかは確認していません
もちろん
>>126 さんが仰るように「強度の要請で助動詞を変える」ものもありえますが
C99の文書の場合は丁寧に "shall" の定義から書かれていますし、
何より "strictly conforming program" という表現は、明確に 4.5 での新情報です
昔の話。 若い頃K&Rの日本語版を買ってきて読み始めて、 間違いというか サンプルとしてよろしくない ところを見つけていた。 それが7年後に役立って 沢山仕事が入ってくるようになった。 本はキチンと読みましょう!
>>129 面白そうな話の気もするが、抽象的すぎてよくさっぱりわからん。
せっかくだしもう少し詳しく教えて欲しい。
You shall die. 日本語の古語にすると分かりやすい 汝死すべし shallはべしに近い
>>131 「べし」が二人称主語のときは「当然〜するべき」「義務」をあらわすことが多いですね
ただしこの場合も、主観的な意見の場合・客観的な義務の場合の両方がありうるかもしれません
shall=べき、べし、というのはいい線いっていると思います
日常会話や文学なら "You shall die." を「汝死すべし」と訳して 原文のもつ「お前死んだ方がいいよ」と「お前はいつか死ぬであろう」の 両方のニュアンス(他の解釈もあるかも)を残すってのはアリだと思うけど、 技術的な文章では、複数の意味に取れる書き方はしないでしょ。 翻訳の読者が欲しい情報も、原文がどちらを意図してるのか、だろうし。
ISO9001の要求事項とか見たことないのか? Shall: しなければいけない Should: した方が良い って訳すのは常識だぞ
>>135 >>121 >>127 のとおり、shall は単純未来の可能性は捨て一律に意志未来に決め打ちしちゃっていいってことですね…
一年程度だが海外で仕事した経験のある俺にコメントさせてくれ。 shallにとくに意味はない。日本語に訳すのは難しいが方向性でいえば 汝死ぬ(shallなし) ↓ 汝はねぇ死ぬよ(shallあり) かな。 つまり特に意味はない。特に強調してるわけでもないけど、つまり断定か。
>>136 未来とか関係ない
そうしないと規格に合致しねーぞって言うある意味条件だよ
>>140 「意志未来」という言葉は辞書の言葉ですが、私の本意は
>>121 つまり「規格」または「規格の書き手」が "You will die" という感情の含まれない淡白な表現を、それが実現するように強要する、それが "You shall die."
いや、ほんとに意味はないんだよ。書き手がなんか気持ち悪いからshallつけてるだけでshall抜きでもかわらん。 willとかshouldに比べてshallどうとかじゃなくて、willとかshouldがなかったらどうかを考えるべき。
そもそも他言語を日本語で正確に訳せるってのは幻想でしかないから 規格でshallやshall notについて扱いが明記されてる(C11なら4.1〜4.2)以上それが全てでしょ
>>141 だからお前さんの本意とかはどうでもいい
規格でのshall/shouldの解釈は
> Shall: しなければいけない
> Should: した方が良い
って訳すのは常識って話
>>128 > 「英文読解」の場ではなかったので控えていたのですが
(中略)
> C99の文書の場合は丁寧に "shall" の定義から書かれています
これ以上、「C言語のスレ」として、どんな話題あるんですか
「ANSI C(なりC90なり)」「C95」「C11」を持ち出すなら意味があるかも知れませんが?
あと、そんなに辞書が好きならshallに「(法律・商業)〜(すべき)である, 〜(するもの)とする, 〜のこと」ってあるからそれが一番近いと思うよ
>>144 その百人一首の上の句と下の句をつなげるように日本語と英語の一対一対応を増やしていくスタイルは、カルタが少ないうちはいいけれども腐るほど多くなったときに困りませんか?
でも、最終的には慣れればなれるほど自動的に丸暗記になるのだろうから(私も「you shall die =死ね」状態なのは事実)、語学に理屈付けは不要なのかもしれませんね…
C95って何? ああAMD1のことか、一瞬ぎくっとした しかしあの文脈では、それを言うならC99だろ
C言語で、配列を渡すときは&付けなくていいとありましたが scanf("%c", &array[i][j]); このときに&つけなならんのはなんでですか cだとつけるのか二次元配列だとつけなきゃならないのか(根本的にわかってないかも) そこら変詳しくおしえてもらえませんか
>>149 配列は、条件を満たしたとき (というより条件を満たす場合の方が多いのだが……) にその先頭要素を指すポインタに型変換されるという特殊ルールがあるから。
配列 array を単に array と書いた場合には、 &array[0] に読み替えられると考えてもいい。
配列 array に & を付けて &array と書いた場合は「配列を指すポインタ」であって、「配列の先頭要素を指すポインタ」ではないことにも注意が要る。 (型が違う)
そのあたりのルールは歴史的経緯があってややこしいんだけど、この規則がないとそれはそれで記述がぐちゃぐちゃになるんでな……。
>>149 int array[2][2]と仮定すると、array[0][0]の型はint
scanf()は渡されたアドレスを書き換える関数なので必要なのはint *
>>149 []は、配列を、配列でなくす(要素にする)演算子だからだ
文字列(Cでは'\0'終端のchar配列)を格納できる変数 char s[SIZE]; に対して、
文字列を格納したい場合は
scanf("%s", s); // 連続したメモリ領域 s[0], s[1], s[2] ... に格納
配列名 s は &s[0](配列の先頭要素へのポインタ)と、値と型が等しい
1文字だけ格納したい場合は
scanf("%c%c", &[0], &s[1]); // s[0] と s[1] に1字ずつ格納
&s[0] は s と同じだが、 &s[1] との対応から &s[0] と書く方が分かりやすい
「配列名が暗黙に先頭要素へのポインタに変換される」話と、
「何を操作しているかをソースの書き方で明瞭に表現しようぜ」って話と、
整頓されずに混乱してるんじゃないかな。
「Cでは“文字列”とは何か」も絡んでるかも。
それに加えて、2次元配列という、これまたCではやや微妙な問題が噛んでるし。
char array[ROW][COLUMN]; // charの2次元配列
char *array[LINE]; // charへのポインタの1次元配列
>>149 の質問では二次元配列と明記されてるから本質じゃないけど、
説明を厳密にしようとすると、触れないのは片手落ちになっちゃうよね。
& 演算子でアドレスを得るときの内部的な処理の周辺。
&[0]なんて構文ねえよ よりにもよって、そんなとこtypoしちまったら致命傷だろうが
ありゃ本当だ。&[0] は誤りだね。ご指摘ありがとう。 誤: scanf("%c%c", &[0], &s[1]); // s[0] と s[1] に1字ずつ格納 正: scanf("%c%c", &s[0], &s[1]); // s[0] と s[1] に1字ずつ格納
C言語ってarray[3]だけじゃなくて3[array]もできるんだね []が演算子って今更知った
>>157 array[3] は *(array+3) と等しい、構文糖であるということになっているので結果的にそうなった。
かといってそんな書き方してるプログラムはサンプルプログラム以外では見たことがない。
>>157 コレ好き。たまーに混ぜ込んでおいてレビュー担当迷わせるの楽しい。
スキルの使い途を間違えているな 弱い者いじめではなく生産に使え チーム得点につながらない無駄なことをするやつを 上司は冷ややかに見ているぞ
初めて5[a]がOKなんだと知ったときの感動を思い出せ。そんな感動と興奮を仕事に散りばめてくれるエンターテイナーだよ。
Cに配列なんて概念なくて、 配列宣言っぽく見えるのはポインタ宣言とallocaの構文糖だという 言語だったらよかったのに。
いや、それは困る ポインタが指す先の実体は いつかどこかで配列になれなきゃ話が発散してしまう
"0123456789abcdef"[n % 10]
忙しかったものですから、ウルトラ亀レスで申し訳ありません。 もちろんK&Rは良い本だとは思いますが、 よくないところがあると書きましたら、「それどこですか?」 のような質問がきていたのですが、仕事に忙殺されてレスが遅くなりました。 例えば、K&Rのハッシュ探索のプログラム。 ソースを見ればバグがあるとすぐわかるはずです。 K&Rのソースは単なるサンプルです。 仕事で実際に使えるわけではありませんし、 吐き出すハッシュ値をチェックしてみてください。 そのソースをF社の東大卒のプログラマがパッケージに組み込んでしまい、 大きなバグを引き起こしました。 で、俺が呼ばれてソースを見た瞬間に原因がわかって直しました。 K&Rを読んだときに気が付いていたからです。 K&Rを読んだときに、気が付く人はすぐ気が付いていると思います。 自分で考える人です。 本当のプログラマです。
>>173 自分で考えるのが良いってのは、プログラマに限らずなんでもそうだよね。
その上で本当のプログラマとやらにもとめられるのは、考えて理解することよりバグを出さないテストを行う能力だと思うね。
考えてもミスる時はミスるし。
場数を踏んだプログラマは、もちろんちゃんと考えるけど、その上で自分の理解やコードを信じない。
ちょっと話が違うかな。
>>173 それはK&Rのよくないところか?
K&RはCとはどんな趣旨のものかを紹介する本で
アルゴリズムを正確に教える本ではない
単にCの機能を説明するために例を挙げただけのナンチャッテコードを
いきなり本番環境に持っていった東大卒とかぬかすやる気のねえクズと
大きな事故に至るまで欠陥を検出できない会社の検証ルールの問題だろうが
買ったもの、存在するものが四角い車輪だけだったとしてもか?
買ったもの、つまり売っているものは、自作したものよりも性能がいい
Cできる人は(ここの住人のような)C++も当たり前にできるん?
>>179 会社に今までC一筋20年くらいの人がC ++のプロジェクトに来たんだが使えなさすぎてクソワロタ
もしかしてCのライブラリのソースコード全部読んでんの アホじゃね
>>175 173です。
おっしゃるとおりです。
俺の言いたかったのは、まあそういう感じです。
K&Rの信奉者があまりに多いので
どゆふうに指摘していいのか困惑している次第です。
つまり、言語の紹介本としては良い本だと思いますけど、
それ以上ではない。
現在、英語版のK&Rしか私の本棚に見つからないけど、
PREFACEの15行目からは、
This book is meant to help the reader learn how to program in C.
と始まっています。
この部分、日本語版にはどのように翻訳されていたか失念しましたが、
まさに、そのとおりなのです。
しかし、ハッシュ値のところですけど、
あと数文字をコーディングするだけでまともなコードになるのに、
なぜしなかったのか?という疑問はあります。
プログラマなんて正常な判断ができないような過酷な状況に追いやられることなんてよくあるし、想像の余地はいろいろあるな。
>>179 Cを数年やってからC++を
やりましたけど
最初は全くわかりませんでしたよ。
C++に慣れるまで1年ぐらいかかったかな?
全く別の言語と思ったほうが
よろしいかと思います。
Cでインターフェース・抽象性を意識したプログラムを書いてたらそんなに変わらんと思う。 ただ現実としては委譲を使ってたところから無理して継承に適応するために混乱することはある。現場で待っているのは神クラス。
まるで別物と思うわ。 ただ仕事で使う分にはみなjavaと同程度の構文しか使ってないから、違いはさほどないと感じるかも
仕事以外でプログラミングすること自体がドMの極みw
34年間、ほぼ毎日プログラミングしてますよ! 定年になってもずっとやってると思います。 作りたいものが一杯有りすぎて体が2つ3つ欲しいです。 今、最も力を入れているのが人工知能です。 人類を滅ぼす悪魔のソフトを造るのが人生最大の目標です!
>>191 >人類を滅ぼす悪魔のソフト
これにはとても興味がありますね
「人類を滅ぼす悪のソフトウェア」
うーん、ぱっと思いつくところではテトリスとか…
>>183 全然わかってねえじゃん
あと数文字をコーディングすることが
Cの機能を説明するサンプルとしては邪魔だったら
その数文字をコーディングしねえのは当たり前だ
サンプルってのはS/N比が大事なんだよ
そこで伝えようとしていること以外のノイズは
徹底排除する必要があるんだ
>>191 おまえ自分が作ったプログラムの敵が未来からタイムマシンで暗殺に来るぞ
脳波を検出して見たいVRを出してやるわ ==> 人類滅亡
>>193 初心者向きの本ですから真似する馬鹿もいるということを
想像すべきでしょうね。
おまえこそ馬鹿だな
想像力がゼロだ
笑えるぞ?
知ったかのクズだ
今どきCとか K&Rとかで 能書きこいて 馬鹿ジジイにも ほどがあるwww
>>196 「初心者」という隠れ蓑に逃げる馬鹿って、自己紹介か?
>>197 イラッとするのはわからんでもないが、ここはC言語スレだからそんなこというのは荒らしだぞ
>>196 あの時代の初心者は今時の初心者と違って、大半はちゃんと自分で考えて自力で技術を習得していく姿勢があり、ただ教えてもらった通りにするだけのようなのは自然と落伍していったと思うよ。当時の想定する読者層にあった適切な内容だったろうと思う。
>>196 人の意見を聞く気がないなら
チラシの裏にでも書いてなよ
175にもあるけど
初心者の真似するバカのコードが
そのままリリースされる態勢を反省した方が前向き
あと何であの本に信奉者がいるのか
理解できない自分も
>>200 当時のccが寡黙だったのが却ってよかったよな
なんで動かないのか自分の頭で考えるしかなかった
今どきのコンパイラは過保護で
落伍すべき者を引っ込み付かないところまで引きずっちまう
>>202 お前のような馬鹿な奴は
そのうち自滅するよ(笑)
お前は「おれ天才!」とか
思ってる低知能のクズだ
もっともたちが悪いクズ
>>179 いや、俺は使えない。
C++は30年ぐらい前にやろうとはしたが当時のPCでもワークステーションでも流行っておらず当然そのような仕事もなく、自分は主にUNIX関係の仕事だったので使う機会がほとんどなかった。
その後PCの方ではWindowsが流行ったが仕事はそのままなので変わらず、趣味ではWindowsでDelphi使ったりもしたがC++はほとんど手を着けず大雑把にしかわからないまま。
仕事はやがてLinux関係に移行するがそこでもC++が必要とされる事はなく現在に至る。趣味でJavaを覚えたりもしたが自分の仕事ではほとんど必要とされなかった。
今は趣味で Kotlin を覚えているところだが、C++については複雑化し過ぎたようなので今さらやる気は起きない。多分今後もやらないと思う。
Windowsプログラムを作る必要が出てきたとしても今ならC++なしで出来そうだし必要になるとしても局所的だろう。
>>204 196の時点ではまだ僅かに技術的な話題に振れていたが
今度は100%罵倒のみ
とうとう落ちるところまで落ちたな
>>179 MFCが流行ってたりC++Builderが流行ってた時にはそれなりに使う人口がいたと思うけど、過去メンテ以外で現在積極的に使ってる人は少ないかもね。
>>157 え?こんな書き方出来たの!?
初めて見た
[]が演算子??
そんなの今まで読んだ本にのってなかったよ!
[]が演算子って常識じゃないのか? どの優先順位表にも載ってるだろ?
もちろんこういう書き方も出来るのが[]演算子と文字列リテラルの合わせ技 int wday = 2; printf("%c", "SMTWTFS"[wday]);
標準入力で最初に数字を入力して、その値だけ文字列を入力するのはどんな感じで書けばいいですか 3 asdf qwert sdfghg こんな感じで最初の入力の値に合わせて配列を用意する?感じになるとおもうんですが なにもひらめきまへん
>>211 配列の宣言に使う[]は演算子ではない
直接宣言子の一部だ
意図的に演算子に似せてあるので
勘違いするのは無理ないが
演算子は式に作用するもので
宣言子に含まれる[]はこの定義に該当しない
>>213 文字を入力するだけで変数に入れる必要がないなら getchar() で '\n' 三回読んだら終わり。
変数に入れる必要があるなら最初の値の分だけ char * を保持する配列を char ** に malloc() や calloc() 使って確保して、更に全要素を malloc() や calloc() 使って確保して、それに対して fgets() を繰り返す。
令和も戦争のない年号になると良いが、ちょっと雲行きが怪しいな。
>>222 日本は戦争しないでしょ?
そして巻き込まれもしないと思う。
だって日本には軍隊がないんだもの。
自衛隊なんて銃もろくに撃てないへなちょこばかりだから。
コンピュータ好きなオタクって勇ましいやつおおいよね
語尾によねをつけて同調を求めたがるのは左巻きの典型だよね
俺は右巻きだが「よね」はよく使う レッテル貼りは瞬時に反証される論議の中では自爆行為だ しょーもね
やっぱり自信がないからコンピュータ好きになるのかな?
ICEデバッグしてるとき、とある変数の値をいくつか足し算して、別の変数に代入する関数で、 変数の内容同じなのに、結果が違う。。 最適化OFFにしてビルドしてる。
その関数は、別の場所から2度呼んでて、1回目と2回目で結果が違う 計算に使う値は全く同じなのに
>>230 自分の経験則で言えば、大抵は関数の処理途中で割り込み処理が発生してメモリかレジスタバンクを書き換えていると思う
一回目から二回目の間で変数のどれかが書き変わってるに決まってんじゃん
>>230 加算に使っているレジスタを割り込みで使いっぱしてね?
まれにポインタ周りバグっててメモリー書き換えてるとか てかICE使ってるならそこで止めて変数の中身確認しろよ
ICE製造の過程でICEそのもののデバッグでもしてんじゃね
ここ20年ほどフルICE使ってないなぁ。 未だにあるんだろうか?
230だけど、俺の見当違いでした。 インプットの変数の値が違っていたので、当然足し算の結果も違っていたというオチ。 ICEデバッグだと変数を表示するとメモリの中じゃなくて表示した時点で割り当てられたレジスタの値を表示するので、 変数としては変わってないはずなのに他で書き換えられるので逐一変わって混乱していた。 ICE初心者でしたw
デバッグ中に最適化を抑制するのは間違いではないと思います。 慣れてくると最適化したままでもある程度推測できるようになりますので、 リリースオプションでICEを使用することの方が多くなるかもしれません。
ぶっこ抜くと言うよりターゲットボードのCPUの代わりに専用のソケットを実装して専用プローブで接続する PCなどと違って組み込みのSoCにソケットなど無いのでぶっこ抜いて差し替えるなど無理
>>243 20年前のICEならそうなんだろう
>>244 JTAGの話か?
ソケット云々の前にGHzオーダーのCPUだと信号引き出すなんてとても無理
scanf("%d%d%d", &a, &b, &c); こうまとめて入力するのをfgets使うとどうやるの? fgets(s, sizeof(s), stdin); sscanf(s, "%d", &a); ↑ このセットをループで三つまわすしかない? 一行でやる方法あるんかな
いや、1行中に入ってるなら同じじゃないか? 行の区切りとか要素の区切りとか細かい話はあるけども
またfgets教か マジいやらしさがカルト教団さながらだ
>>246 なんというか、ほとんど答えが上に書いてあるかのような質問だな・・・
sscanf(s, "%d%d%d", &a, &b, &c);
>>244 そんな感じ
CPUじゃなくてROMだけど
就業先で当たり前のようにICE使わせて頂いてるけど、お値段見てビックリ・・
>>252 それって商売になってるのか?
普通に公開されてるが。
そうなの?何の宣伝になってるのか全くわからんのだが。
誰もアクセスしない隔離スレなんで 時々こうやって宣伝して引っかかるカモを呼び寄せようと
元々有償でプログラム作るスレとして作ったスレだったんだろうけど結局誰もそんな風には使ってなくてただのプログラム発表の場になってるよね? ま、しかし、5ちゃんのような掲示板で稼ぐのは無理があるよなあ。それ専用のサイトなら可能だろうけど。
既存をちょっと修正してほぼデグレのテストというスタイルの俺には、 要望に応じて1から新しいプログラムを組む人を尊敬する 修正は修正で既存への影響の面でそれなりのノウハウは要るにしても
>>258 むしろ俺は人の作ったワケワカメなコードを文句も言わずメンテしてる人はすごいと思う。
>>259 文句を言わずに、というより
文句を言わせずに、だと思う。
俺は奴隷だったので
よくわかる。
会社辞めて派遣になって
気分すっきり!
な~んの責任もないのに
年収1000万だもの
派遣辞められません!
>>260 派遣でそれほどの能力があったら独立して2000万は稼げるのでは
派遣でそれだけ貰える程のスキルがあるってことは、 C言語だと本当に低レベルのデバイスの制御からビジネスロジックの 設計からお任せできるレベル 独立すべきでしょう
ハードの設計から組み込みソフトはもちろんWindows、Android.、iOSのアプリ、DBもWebもゼロから設計できるスキルがあったらどこに行ったらそんな高級取りになれるでしょうか?
自分で開業した方が良さそうな感じもするが、そうなると営業力も必要になるな。
まあでも Android や iOS アプリの場合は営業力あまりなくても世界中に売れれば儲かる事がある。
電卓アプリでこんな風に稼いでいる人も居るし。
https://appmarketinglabo.net/calculator-1100man/ これは世界での需要がどのぐらいあるかとプログラムが簡単かどうかはあまり関係ないってことでもあるかな。
需要がないものだと作るのが大変なプログラムでも売れなくて稼げない。苦労と儲けは無関係。
>>267 日本に前金払うところなんてないから。
たからデスマになる
Linuxでシリアル通信のソフトを作成しています。
http://codepad.org/L4BLwgAQ コマンドを送信すると、相手が応答電文を返してくる仕様なのですが
write→readでは、うまく受信できないようです。
teratermで同じ電文を投げると、受信できるので
このソースが悪いのだと思っています。
投げて、受けるというのを上手くやるにはどうしたらいいでしょうか。
お助けをよろしくおねがいします。
>>270 とりあえずwrite()の戻り値とread()の戻り値が-1でないことから確認しようか
>>272 writeはバイト数の13が返ってきます。
readはここで止まります。ずっと待ち?状態になるようで、ctrl+cで抜けるしかありません。
Cっていいよね。 シンプルで全て見えてる。 キチンと組めば性能も素晴らしく、 ソースも分かりやすい。 ま、馬鹿が使うと酷いことになるから 馬鹿には触らせたくない! 馬鹿にはJavaがお似合いw
>>273 そもそもtioが未初期化
33行目にtcgetattr(fd, &tio)とかを入れて
Cのスレで用途も構造も違うJavaとか出してくるあたり相当頭悪いんだと思った
ああ Javaわかんね―馬鹿か Cしかわからん馬鹿院生って感じかな(笑)
なんでスレがカテゴライズされているかも理解出来ない
Cが分からないってやつはコンピュータの基礎の基礎が理解できてない。 いきなりプログラミングから学ぶからそうなる。
Cしかできない奴はCを評価できない そんな簡単なこともわからない 院生くずれのバカニート(笑)
いや評価はできる この世の森羅万象すべてを知り尽くしているやつなんかいない みんなそれぞれ何らかの「井の中」にいる そこからCならCがどう見えるかを述べているのを 聞いた者がどう捉えるかの問題だ 自分の「井の中」のほうが相手より大きそうだからって 天狗になるやつこそ成長の止まった将来性のないやつだ
>>283 C といえども OS なしではなにもできません
フリースタンディング環境のことだろ ソース入力やビルドをOSなしでって意味ではなく
>>285 C だけではなにも出来ないのではないでしょうか、最低限アセンブラの部分が数%はあるでしょう?
クロス開発ではホスト環境とターゲットは別 小規模組込み開発ではターゲットにはOSと呼べるものが存在しない場合もある
>>287 CPUによってはリセットエントリから100%C言語だけで記述できるよ。
OS無しで動くプログラムが書ける言語はC? ってことだろうな
>>289 へえ!そうなんですか!多倍長演算をCで書くときキャリーフラグはどう扱うのですか?
>>292 15bit+キャリーみたいな形で扱えばいいだけ
>>293 それは私もやりましたが、悲惨なコーディングになりました、キャリーを使えるのにそれを無視してCですべて記述するとか、ありえない選択だと考えています
http://2chb.net/r/tech/1434079972/51 >>294 そりゃビットサーチとか場合によってはCPUの機能を使ったほうが速かったりシンプルに書けるケースもあるけど、それはそれでまた別の話。
それを以てC言語で書けないとは言えないよ。
>>295 まあ java だけで「やってしまった」OSというのもありますから…多分 JNI を使っているとは思いますけど…
C 言語だけで全部やってしまう、というのはありえなく、例外 exception の実装に有用な setjump(), longjump() ですら、CPU を叩かずにはいられない内容ですから、世に蔓延する「C言語マンセー」は、その機会があればなんとしても叩かずにはいられないのです
>>296 もしかしたら貴方と私は違う思想の元で仕事してるのかも。
JNIはAndroidぐらいでしか使ってない、てかそもそもJavaを使う機会が少ないような業界の人です。
なんちゃってtry〜catchのためのsetjmp系はそれでもやっぱりアセンブラを使わないC言語の範疇内な訳であって、やっぱりC言語否定の理由にはならんとです。
唯一、OSを記述する際のタスクプリエンプトだけはC言語だけで記述できず悪魔のスタック操作とコンテキスト切り替えが必要なのでアセンブラが必須だとは思いますが。
>>296 別にsetjmp, longjmpなくてもプログラムは組めるし
Memory Mapped I/Oならデバイス制御もC言語だけで組めるだろ
プログラミング素人です。 scanf関数について質問なのですが、 char str[10]; for(i=0;i<5;i++){ scanf(“%c”,str[i]); } として、「abcd」と入力された場合、 str[0]=‘a’ str[1]=‘b’ str[2]=‘c’ str[3]=‘d’ str[4]=‘¥’ str[5]=‘0’ となるのでしょうか? str配列の0~3番目にa~dが格納されていることはprintfでわかりましたが、4以降は何が格納されているのか自分で調べる方法がわかりません…
>>299 C/C++では文字は整数なんだ。整数として出力して、アスキー表を参照すれば、文字がわかるはず。
>>299 鋭い質問ですね…手元でいろいろ試していますが、今ひとつ事情がつかめないでいます
https://ideone.com/l3ZslT ideone と x64/gcc/cygwin でも結果が変わってしまいます…
str[5]以降は決まってないから調べてもあまり意味がない。多分ゴミデータ。
>>299 str[4]='¥0'
それ以降はゴミ
自作関数内のエラー時にerrnoに値をセットするのってマナー違反ですか?
信長 入れられないなら殺してしまえそのプロセス 秀吉 入れられるまで仕様変更を待とう 家康 俺が直してやる!
>>305 str[4]が改行コードの\nだとして
str[5]は\0にはならないの?
>>310 それは明らかになりません。
null文字入れるのは大抵はこっちの役目です。
%cは文字は全部入る。 受け付ける文字をはっきりさせたいなら[]使うのがよい。
printf()のペアっぽいからという理由で scanf()を使わせる初心者本をこの世から駆逐すべき
使い方を熟知している人が使う分には問題ないが 「良い子はマネをしてはいけません」の典型だな
初心者はただ値が入力できりゃ楽しいんじゃね ついでにscanfはかんたんに間違いを引き起こすことが出来るから脆弱性の説明にも使える このご時世、かんたんに間違いを体験させること自体が難しくなってる セキュリティが高くなると間違えさせる行動へのコストもまた高くなる
昔のマイコン的なものだと暴走したりしてなお良い。 core dump してるようじゃまだまだ安全過ぎる。
たしかにscanfが危険なものだと知った時にどうやってfgetsに置き換えるか考えたの思い出した
>>287 その数%のアセンブラの部分を、おまえさんは「OS」と呼ぶのか?
>>314 scanfの仕様をロクに調べもせず自分の頭で考えもせず
どっかの受け売りを初心者に吹聴する無能老害こそ
この世から駆逐すべきだろうが
>>319 ヨコからスマンけど
そゅ意味じゃないのが
理解できないほどの馬鹿は
ここにくるべきではない
>>315 「よい子は真似をしてはいけません」と言われる芸当をやっているプロになろうって人には当てはまらない
>>321 おまえさんこそ
>>283 からの話の流れを読んでるか?
人を馬鹿呼ばわりした自分の発言に責任を持てよ
匿名掲示板だから逃げたければ逃げられるが おまえさんの人間性の問題が変わるわけではない
馬鹿丸だし(笑) 論文ゼロの院生くずれ馬鹿ニート という雰囲気プンプンだな(爆)
院生とかめっちゃ高評価じゃんw 俺には大学にコロコロコミックを持ってきて、全ての人間が敵に見えて毎日発狂してた同級生の江○君と被ってしまう。 頭はすこぶる良いんだけど、頭が弱い残念なアイツの雰囲気がプンプン
学歴コンプレックスまる出しだな 頭隠して尻隠さずw
効いてる効いてるw 突然論文ゼロとか言い出すカモは扱いやすすぎ
#include <stdio.h>
int main(void){
remove("
http://2chb.net/r/tech/1554171817/" ;);
return 0;
}
Cできるけどアセンブラできない、 ってのはCもできないってことだ。
アセンブラからCに行ったらアセンブラでやってたアルゴリズムがCで表現できなく、非常にもどかしくて・・・
>>335 それは初耳、いや、どういうのに手こずったのか参考に教えていただけませんか?
出来る出来ないっていう話なら、基本Cできるんじゃないかな。 CPU固有のブルック転送命令とかそんなのを除いて。 (それすら別にできるけどね。) 1命令でできてたことがめんどくさくなるってものならあるかも。
アセンブラで作るにしてもでもアルゴリズムで実装しているならCでも出来るんじゃないの?
プラットフォーム依存の問題は言語じゃなくてコンパイラより下が解決するわけでさ、それをできると言っていいならなんでもできると思うよ。
>>335 一つ思い出しました、キャリーフラグを活用するアルゴリズムは、そのままでは C でかけずに大変ですね
ローテートとかシフトとか
>335 キャリーフラグが無くてオーバーフロー/アンダーフロー判定が面倒だとか、 ビットシフトはあってもローテーションが無いとか。 ジャンプ命令使うとパイプラインが初期化されるからなるべく使うなと聞いたのに 逆汗見たらジャンプしまくってるじゃないかとか。 8/16bit時代のアセンブラは1バイト、1ステート削って処理速度稼いでたんで 上記の差を補う処理が無駄に思えて・・・。 かといってインラインアセンブラ使うのはなんか違うと(インライン使うと最適化されないとも聞いてたし)。 それならアセンブラでCから呼べる関数書いた方がすっきりするとか。 20世紀時代のことだ。
マシン語でコード書いてるときはオンレジスタ思考なのに 当時のCはデフォautoつまりオンメモリなので ああ、やはりマシン語よりは速度が落ちる言語なんだな コンパイラ言語とインタプリタ言語のような違いが もう1つあるんだなって思っていた
スパゲッティなものを書いてるならともかく、真っ当にサブルーチン化してたら必要悪としてレジスタ志向は早々に諦めてたわ。 局所的に最適化するならそれは別問題として解決してた。
構造化なんか眼中になかったね 速度こそ純粋で美しい法律だった
>>340 > 一つ思い出しました、キャリーフラグを活用するアルゴリズムは、そのままでは C でかけずに大変ですね
それはアルゴリズムと言うより実装の話かと
PC9801のVRAMを1ドットスクロールさせるのなんか キャリー使って書いてたのをキャリーなしで書き直させられるのは悲しかった
>>345 >アルゴリズムと言うより実装の話
いや、それは不思議な分類だと思います、DES/AES などはローテート・シフトがそのままアルゴリズムになるのでは?
>>347 そのアルゴリズムにキャリーフラグなんて出てこないでしょ?
アルゴリズムという特定ワードに囚われて用語の定義の話に逸れていくつまらん展開だ
文字列入力を受け付けて、それをstrという変数に代入する…というプログラムを書きたいのですが、知りたいことがあって以下のような条件を課させていただきます。 ・for文を使い、その中でscanf(“%c”,str[i])により1文字ずつ文字をstrの各配列に格納していくこと ・文字数は最大50文字までとし、たとえば「abcd」などのように4文字であった場合も、abcdと入力→Enterが押された時点で、その文字列をstrに代入して、その4文字を表示して完了とする ・if文を使ってそれを実現すること #include<stdio.h> int main(void){ int i,str[50]; for(i=0;i<50;i++){ //入力処理 scanf(“%c”,str[i]); } for(i=0;i<50;i++){ //出力 printf(“%c”,str[i]); } } このコードだと、「abcd」と入力してEnterを押しただけでは、出力されません。(50文字入力されるまで入力受け付け状態から遷移しない) どのように改良すればよいでしょうか?
何故誰もscanf("%c", str[i])に突っ込まないのか
>>350 「入力処理」のforループで、「50文字入力されたら」を判定してるけど、
もう一方の終了条件「Enterが押されたら」を判定してないからでしょ。
1文字受け取るごとに、Enter '\n' ならループを抜ける、をやらなきゃ。
というわけで
>>315 に至る。
>>353 このスレッドの伝統かと。
>>299 以下を参照のこと。
あちらはスルーしたのに、こちらでツッコむのは抵抗感がある、みたいな。
誤: というわけで
>>315 に至る。
正: というわけで
>>351 に至る。
315 を確認したところ、まるっきり見当違いでもなかったね。
>>354 >>299 は見逃していたなあ。空目だな。
>>350 もし宿題が本当に scanf(“%c”,str[i]) と書いてある場合は先生が間違えてるので「 scanf(“%c”, &str[i]) ですよね?」とツッコミを入れてみると良い。
そうすると君はできる学生と思われて成績が上がるるか、または気に入らんやつと思われて成績が下がると思う。
そういえば東大では今でも C言語が必修なのか? まじ時代遅れの馬鹿だと思ってたら、 Cしかできない在日の馬鹿教員が いるのだとか
参照型とか出てくるのにそもそも参照がなにかも理解出来てないにわかオブジェクト指向が増えるよりよっぽどマシよ なんの言語とは言わないけども C言語なら理解しなければ先に進まないから
>>358 C が分からないようでは話にならないのでは?
>>361 トヨタ系の研究所には
Cの分かる研究員がもういないのです
研究には全く支障がないです
組込みやってる高卒やFランが
Cをやるべきでしょ?
>>362 それは多分ありえない話でしょうね、なぜならば C は計算機言語の基本で、各種書籍ではアルゴリズムの記述に C を使うものが大半ですから
本も読めない人がトヨタの研究者とか、あなたの空想の話なのでは?
>>364 python で二分木の実装とかできますか?
やっぱり相当コンプレックスの塊で頭悪いんだろうなぁ
>>366 本当ですか?ポインタがない python では無理なんじゃないですか!?
真面目に言うとpythonは基本的に全部参照渡しだね。 参照したものを直接いじれるかというとそうでない場合があるけども。
>>372 なるほど、ではユーザー定義の型は自動的に参照扱い、すなわち Java みたいなかんじなんですね
であれば苦労すれば二分木を実装できますね、大変失礼いたしました
>>370 Python に限らず動的型の言語の多くは変数に値を入れるんじゃなくて、
オブジェクトと変数の間に束縛 (bind) を作ることで成り立ってる。
辿ることでオブジェクトを参照するんだ。 実質的にポインタだよ。 むしろポインタしかない。
(小さい値 (小さい数値とか文字とか) はアロケーションを抑制するためにそのまま
ワードに突っ込むような最適化をする言語 (処理系) もあるけども。)
>>374 Java ならば boxing でヒープにとる値とスタックに取る値とをある程度(意識せずに)変換できますね(そういう C/C++ like な意識が皆無ではない、という意味)
ただし、二分木に関してはいいたいことがまだあって、「本物の」二分木は二重ポインタ(ポインタのポインタ)が必要なのではないか?と思っています
さすがに Java には二重ポインタはない、そんな用途の言語じゃない
Python や ruby にはあるのでしょうか?
二重ポインタを何に使う? Cだと引数でノードのオブジェクトを返す辺りか?
>>376 ノードを追加する関数add の引数を
add(&root, Object)
ってするでしょ?&root ってことは、struct *node のアドレス、すなわち struct node ** が必要なのではないかと
>>377 わからんが、Cでも戻り値でポインタを返せばいいんじゃないか?
>>375 参照を持つオブジェクトへの参照を持てるんだから、事実上の二重ポインタとして使えるよ。
二重までは使うんだよなあ 三重をなぜ使わないか、説明できるか?w
ガベージコレクションと裸のポインタって相性が悪いような
>>378 2個返したい時とか、戻り値は成功かどうかのコードを返したいとか
道はいろいろあると思うが、せっかくあるんだから構造体使って皆くるんじゃえと思うよ。
微妙にスレチのように思うので続きはJava初心者のスレでやった方が良いのではないか? まあ人に聞かなくても Java を勉強して Java の API のソースを読めばそういうのをどうしているのかは何れわかると思うけどね。
Ruby での、Jaggy 配列は、 ary = [ ] # 配列の配列 ary.push [ "a" ] ary.push [ 1, 2 ] p ary #=> [["a"], [1, 2]] C/C++ 以外のたいていの言語では、数字などのprimitive 以外は、すべて参照。 (primitiveは参照にするよりも、その場所へ値を埋め込んだ方が速い) 外側の配列は、内側の配列の参照を持っている。 内側の配列は、(primitive以外の)各要素の参照を持っている primitive以外は、コピーしても参照がコピーされるだけで、値はコピーされない。 つまり、同一インスタンスを指す。 別のインスタンスは作られない new されていなければ、インスタンスは作られない。 代入しただけでは、参照がコピーされるだけ これを、shallow copy (浅いコピー)と呼ぶ(同一インスタンス)。 new して、別のインスタンスを作ることを、deep copy (深いコピー)と呼ぶ(別のインスタンス)
>>380 余裕で三重ポインタなどほいほいと使いますよ
http://2chb.net/r/tech/1434079972/26 void prep_exe(char *sttp, char **path, char ***argv)
char **argv を使うことが理解できるのだったら「argv のアドレスを渡す」みたいな場合に渡された関数側では三重ポインタを使うことになるでしょう
>>388 それcodepadだろ? 使いさえすればいいって話じゃなくて
>>389 無論使いさえすればいい、というわけではなく、この例では小さなシェルを実装しており、シェルのパイプ機能を実装するのに三重ポインタを使ったのです
>>391 代入命令が増えるという意味ではなく、「同じ値」なのに代入してしまう、という作業が
>>378 「戻り値でポインタを返」す方式の書き方だと不可避です
呼び出しの前後で、ptrの値が 同じかもしれない、場合よっては変わるかもしれない関数 ptr = func1(ptr, opt); と func2(&ptr, opt); うーんどっちも使うな…
>>393 前者
>ptr = func1(ptr, opt);
は初心者用で、
>>392 のいう無駄な代入が含まれています、二重ポインタがわかるのなら後者にするべきです
>>394 シンプルな記述ができるのに、わざと複雑な書き方にするのは問題なのでは?
>>396 じゃあ、戻り値そのまま使えば?
mallocは使うんでしょ?
>>397 その場合無駄な代入が発生しますね、
>>393 がいい例を示しています
エラー伝達に NULL を使う realloc は即代入するとお漏らししちゃうし あれ、なん引数書き戻しにしなかったんだろう? 素朴な疑問
>>398 代入されているのかされていないのか、わからない方が良いってこと?
×あれ、なん引数書き戻しに ○あれ、なんで引数書き戻しに
>>399 正直、nullが来た時点で終わってるしなあ…。
まあでも一時変数使うのが筋だと思いますよ。戻り値でも引数でも同じこと。
>>400 ちがいます
代入するのか代入しないのかは malloc() したかしなかったかにかかっています。
代入は malloc() したとききだけにすればよく それが
>>393 の func2(&ptr, opt); の書き方
一方
>>393 ptr = func1(ptr, opt); は malloc() したかしないかにかかわらず代入を行います、これは無駄な代入を含みます
>>403 だから、関数の内部的に何してるのかわからんのが良いってことじゃない?
>>404 着目点はそこにはありません。関数による記述で内部を隠蔽するのが目的ではありません
問題は、malloc() したときだけ代入し、malloc() しなかったときには代入しない、という記述を正確にかけるかどうか…@、にかかっており
>>393 ptr = func1(ptr, opt); は@を記述できる可能性が皆無、一方
>>393 func2(&ptr, opt); は@を記述できる可能性がある、というわけです
>>393 前者の方が好ましい
2重ポインタなんて最適化の妨げになるものは、それしか使えない場面でのみ使うべき
>>406 非常に大きな二分木(ノートが1億個)があって、そのはるか先端で malloc() してそこで代入すればいいだけなのに、
その先端から root に戻ってくる途中の30箇所ほどで、軒並み全部のノードで「必要のない無駄な代入」をするのですか?
>それしか使えない場面でのみ使うべき
この二分木を実装する、というのがまさしく「それしか使えない場面」なのですよ
>>405 つまり、後者でmallocしてnullが返った時はそれを代入するってことですか?同じじゃん。
>>407 二分木のコストってのは比較であって代入じゃないと思いますよ。
まあアルゴリズムの一般論としては。
>>408 >>393 func2(&ptr, opt); では
malloc() して null が返ってきたときは、例えば何もしない、ということはできますね
でも
>>393 ptr = func1(ptr, opt);
は、malloc() しようがしまいが代入してしまいますね、これは「やる必要のない無駄な代入」が含まれることになり、好ましくないです
>>393 ptr = func1(ptr, opt); の記述法は二分木を最初に習うときに、この記述法で理解を促すという意味では有用であっても、
いつまでもこれで書いているようでは進歩していない、もっといえば怠惰である、と考えています
>>409 しかし無駄な代入を放置してよいというわけではないでしょうね、削れるところは削るべきです
単純二分木よりさらに改良された平衡二分木(AVL木、赤黒木等)を紹介する書籍では、最初から
>>393 func2(&ptr, opt); で記述されていますよ
>>410 じゃあ隠蔽しろという話なんじゃないの?
関数の中で成功失敗を判定して外にnullは返すな入力時のままにしとけ、という関数。
>>412 ちがいますね
問題は、malloc() したときだけ代入し、malloc() しなかったときには代入しない、という記述を正確にかけるかどうか…@、にかかっています。
>>413 >>407 に書いておきました、1億ノードの二分木にて各ノードが最適に配置されているとして、削ることのできる代入は malloc() 一回に対して 30 個の代入になります
>>393 ptr = func1(ptr, opt); では 1億ノードの二分木にノードを追加する際、30個の無駄な代入が発生します
代入のコストは大したことがない、にしても、アルゴリズムを正確に記述できないのは問題ですね
洗練された記述とはそういうものではないでしょうか
>>414 いや、mallocがnull返した時はいれないんでしょ?
成功か失敗かじゃないの?呼んだかどうかじゃなくて。
仕事では戻り値に成功失敗が入ってオブジェクトのポインタは引数に来るような関数は使うけどさ、 結局どっちもチェックするよ。信じられねえもんな。
>>415 malloc() が成功したか失敗したかは、今の話には関係ありません
今関係があるのは、
malloc() したときだけ代入し、malloc() しなかったときには代入しない、という記述を正確にかけるかどうか…@
です
>>417 じゃあ、絶対代入するってことだろうよ。
引数に渡したポインタに。ポインタを。
>>418 malloc() したときは代入しますよ、でも malloc() しないときは代入なんかせず、そのまま呼び出し元に返るだけです
それが
>>393 ptr = func1(ptr, opt); 方式と絶対的に違うのです
>>420 >>393 func2(&ptr, opt); 式なら void もありえます
>>422 いいえ、実際に実装するならば、エラーを伝達する手段として返り値を準備することは大いにありえるでしょうね
void が必須ではありません
必要な代入なら使えばいい、でも
>>393 ptr = func1(ptr, opt);
方式は不必要な代入があり、単に二重ポインタを使用して記述すればこれは除去できるので、
>>393 ptr = func1(ptr, opt);
を書くのは問題だし、これを書く人は頭を使っていない、と判断します
異常は戻りをNULLにするパティーンで node_t *func3(node_t**, ...) 正常だった場合に ptr = func3(&ptr, opt); と書けるしw (無駄な努力の可能性
って書いたけど鼻から悪魔踏みそうな嫌らしさがあるな…
>>424 そのパターンでは、異常値 NULL をうっかりノードに登録してしまうと、そのノードより下が浮いてしまい危ないですね、ま、異常系をミスったままリリースしてしまうことも私はよくやりますけど
>>423 いや、必須でしょ?代入消せるんだから。消さないと。
>>427 言葉尻を捕らえて攻めたつもりになっているようですね
「すべての代入を消去できる」なんていってませんよね
>>393 ptr = func1(ptr, opt);
この代入は不要な代入を含むので、
>>393 ptr = func1(ptr, opt);
は不適当な書き方だ、とこれまで首尾一貫して述べているのです
423の文意は 「void が必須なわけではなく 引数と同じ型のポインタを戻すことはせずに、別の目的の何か、たとえばエラーコードとして int を戻す なんてのはアリでしょ?」 ってことだと思うけど
returnしちゃだめでしょ 代入が駄目ってくらいだから
「代入不要なケースでも代入記述を要求するのはよろしくない」スタイルの延長だと 戻り値評価も破棄可能ならそうすべき って話か
>>430 どんな代入もだめだとは主張していませんね…
>>393 ptr = func1(ptr, opt);
方式は不必要な代入があり、単に二重ポインタを使用して記述すればこれは除去できるので、
>>393 ptr = func1(ptr, opt);
の代入が駄目だとはいってきていますけれども
あ、ごめん、ミスって文章を書く前に投稿してもうた。
>>407 あらためて確認するが、この代入を「無駄」としているのはアルゴリズムの表現の上では不要なことをしているという
意味の上での無駄であって、性能上の無駄という意味ではないんだね?
そして、アルゴリズムを正しく表現する上では (ときには二重・三重のも含めて) ポインタが必要だと。
>>434 >性能上の無駄という意味ではないんだね?
性能の上で分析するとなると、間接参照にてデータをロード、ストアするコストと値をストアするコストを天秤にかける、ことになりますね
なるほど、その点を言いたくて、でも言いたくなくて、しつこく絡んでいたのですか…
私は二重ポインタでの表現の方がトータルでお得だ、とは思ってはいますが、これまで表に出ている私の発言は、あえてそこには踏み込まず(だって性能の話はうかつに断言できませんからね…)、
おっしゃるとおり「アルゴリズムの表現の上では不要なことをしている」に留まっています
>>435 たとえば数学上の表記なら「A=1 であり B=1 のとき A=B は真である」と「1=1 は真である」には何も差が無い。
途中で名前を付けるのは人間に対する便宜であって、無駄な「操作」は存在しない。
代入が無駄たりうるのは C のパラダイムだからなので、
「C で表現するにはポインタが必要だし、代入では不適当だ」は事実であっても
「ポインタが無い言語では表現できない」というわけではないよ。
C の低級な世界でまともな意味論を表現しようとするのがそもそもの間違いだろう。
>>436 >「ポインタが無い言語では表現できない」というわけではないよ。
それは理解しています、なぜなら
Java での二分木の実装を検討したことがある(探せば2ch過去ログにあるかもしれません)
Java にはポインタはありませんが、実装できるかできないか、といえば「できる」の方に入りますね
>>437 そこまでわかっているのなら、
「代入しない」と「同じ値を代入しなおす」が意味論的に等しいということがどうしてわからないんだ。
C言語のプログラム内で確保していいメモリってユーザー空間の仮想メモリ上限いっぱいまで取っていいの? 複数の変数a, b, c, ・・・の値を表示するだけのプログラムを時系列に並べて考えてみるんだけど 0. 実行ファイルを起動する 1. 32bitプロセスが生成される ←たとえば32bit windowsだとユーザー空間とカーネル空間で計4GBの仮想メモリが確保される 2. int a; ←仮想メモリ(1で確保されたユーザー空間)上にaが確保される int b; ←上に類似 int c; ←上に類似 ・・・・・(複数の変数の宣言やprintf関数が続く) こんな感じなんだろうけど 上記の2でユーザー空間いっぱいになるまで変数を宣言してもいいの?
>>439 いいけど、もっと効率的な方法があるならそれに越したことは無いっていうそれだけの話
簡潔に書くと 安全のためにはどこまでメモリを使っていいの? そのメモリの大きさはユーザー空間の上限と同じなの? という室問なのに長くなってしまた
>>440 ありがとう
ただ初心者なので効率性を目指すにはきつい部分が出てくる
そうなるとメモリの残量を監視する、つまり残量の値を取得する必要があるわけだけど
これは一般的にはwindowsのAPIを使うのが普通なの?
(そんなものがあるのかは知らない)
>>442 スタックとヒープという概念は知ってる?知らなければまずそれを調べてみて。
それと、初心者なら効率を求める前に正しくメモリ管理を扱えるようになる必要があるが、その時点で残量は気にする必要はないぞ。
FIFOだとかナントカ程度にしか。 「〜〜領域」という幾つかの用語がOSとかの環境が違っても 全く共通のものなのかよく分からないから正直スルーしてる
>>414 >1億ノードの二分木にノードを追加する際、30個の無駄な代入が発生します
2^10 = 約1,000 千
2^20 = 約1,000,000 百万
2^30 = 約1,000,000,000 十億
>>441 Java VM の初期値は、256MB とか。
それよりも大きいと強制終了されるが、起動時に、512MBに設定できる
たぶん、4GB の仮想メモリでも、ユーザー空間3GB・カーネル空間1GBぐらいだろ
それ以上のデータは、動画みたいにstream になる。
バッファサイズ、例えば、1MB を読んでは捨てて、次の1MB読んでは捨てて、の繰り返し
読み込んだデータを使ったら、すぐに捨てないといけない。
ユーザー空間に、空きを作らないといけない
>>445 いつものRubyバカだろ。いい加減な知識でC言語のメモリの話題に口を挟むのはやめろ。この板になれている者からすれば「またいつものか...」ですむが、初心者にとっては害悪でしかないから消えろ。
>>444 組み込みとかの特殊な環境では例外もあるけど、基本的には環境によらずC言語で必須の概念だからスルーせずにちゃんと調べるべき。
>439 >上記の2でユーザー空間いっぱいになるまで変数を宣言してもいいの? 他のプロセスがスワップ起こして重くなるから止めろって言いたい。
>>447 うん調べてみるよ
ありがとう
>>448 そんな視点もあるのか
他のプロセスも考慮しないといけない
思ったよりも数段以上やっかいだな
>読み込んだデータを使ったら、すぐに捨てないといけない データをガンガン読み込んでいくようなプログラムだと「使ったらすぐ捨てる」のが鉄則か
>>439 ユーザープロセスなのでカーネル空間はマッピングされないよ。プロセス管理のための領域はカーネル空間に多少は確保されるとは思うけど、それはユーザープロセス用ではないし。
ページサイズの関係で効率的に確保できるかどうかは別問題だけど仮想メモリ領域いっぱいまで取れるか否かと言えば取ることはできる。
実際にそんなことしたらスワップ発生しまくりでまともに動かないとは思うけど。
実装としてはだいたいcopy on writeだから、確保だけだったら特に問題発生しないよ
>>451 どのOSなのか明示してくれ。
少なくともlinux 32bitは3GB以降はkernel空間にマッピングされてるだろ
配列にある16進数アスキーを 整数型変数に数値として入れたいのですが、上手くいきません。 valの値をprintfで出力しても「0」になります。 rbuf[5]の中身は「0xDC」 rbuf[6]の中身は「0x18」でした。(printfで出力してみたところ。) #include <stdio.h> unsigned char sbuf[255] = {'\0'}; //送信バッファ unsigned char rbuf[255] = {'\0'}; //受信バッファ unsigned char work[10] = {'\0'}; //ワークバッファ unsigned int val = 0; //値 work[0]=rbuf[5]; work[1]=rbuf[6]; work[2]='\0'; sscanf((char *)work, "%x", &val); よろしくお願いします。
sscanf の %x は、文字列で記述された数字+アルファベットの列を 16進数として抜き出す sscanf("10", "%x", &val); → val の値は 10進で16 となる 0xDC 0x18 の並びから どういう整数値にしたいんだろうか?
>>455 回答ありがとうございます。
val=0xDC18
という感じで取り出したいです。
>>456 それなら
val = rbuf[5]; じゃあかんの?
>>457 ありがとうございます。そういうことか・・・
下記で上手くできました!
val= rbuf[5];
val = val << 8;
val |= rbuf[6];
>>458 解決してよかったね
0xDC 0x18 の並びから
(最低でも32bit長の整数)0xDC18 が欲しかったということだね
(俺がちゃんと
>>456 を読めてなかった説 val=0xDC18 って書いてるやんけw)
>>454 > rbuf[5]の中身は「0xDC」
> rbuf[6]の中身は「0x18」でした。(printfで出力してみたところ。)
だったらそれはASCIIではないよね。
>>460 >>461 ありがとうございます。
お陰様で解決できました。
勝手にASCII、文字列と勘違いしていたのがよくなかったです。
ASCII は、7 bit キャラだろ 欧州文字コードなら、8 bitとか
BASIC時代 文字→文字コード変換関数が ASC(文字) だったな。
わらってよりとも というのは、当時の人気番組名をもじったものだよ
質問です 文字列の配列 char matrix[Y][X]を関数に引数として渡して、渡した先の関数でtxtファイルに出力したい。 YとXはその時々によって違う値でmatrixは文字列の配列だけど1行ごとに'\0'が入っていないとき、渡した先の関数でYとXをどうやれば参照できますか? 例えば matrix = {{‘a’, ‘b’, ‘c’}, {‘d’, ‘e’, ‘f’}}; みたいな配列です
X(配列のサイズ)を共有してやればいいんじゃないかな
>>472 matrixのアドレスと共にX、Yの値を渡さないと無理
>>474 やっぱり配列のサイズ一緒に渡さないとだためですか
そう。他の言語だと裏でこっそり渡すようになっていたりしてプログラムに書かなくても動くかも知れないが、Cはそこまでやってくれない。
標準関数も一次元配列ですら大きさを渡してるからねー (文字列は '\0' が終端である という了解を持って大きさを不要にしているだけ)
>>475 URL張って解党した気になってるアスペルガーのカスがスレ来んな
確かにつまらんね リンクだけとかググレカスとか せっかく掲示板にいるのに対話がないのは
>>481 リンクを示すのも、ググればわかるようなことにググれというのも対話だよ。
対話を終わらせてるのはお前だろ。
リンク先を見て意味がわからんかったならどうわからなかったか、
よりよい説明があると思うならそれを示してもいい。
望むことだけ欲しいというのは対話とは言えんよ。
>>482 話が噛み合ってない
おまえさんとは平行線のようだな
ID:glRpLuyC0が対話する気なさすぎて草w
ここは質疑を行うスレであって 対話したり、雑談したりする場ではない
Cの上位互換(?)として、C++がありますが。C++は覚えた方がいいですか? もしくは、CとC++を両方覚えたら、Cは不要になり、C++でコードを書くようになりますか? C++でできることはCでもできるように見えますので、ならCだけでいいようにも思えたり。
>>486 C++ は最近規格の改定がすすみ、いろんなことが C++ の枠内でできるようになりました
>>486 言っておくが、python,C++,Java,javascript,C#,shellでできる事はC言語でも出来る
更に君が作ろうとしてるものや、やりたいことは、もう誰かが作ってる
ましてや大規模になると、googleとかamazonと戦う羽目にもなる
それが嫌ならプログラミングなんて辞めとけ
>>487-488 了解です、ありがとうございます
>>484-485 482は反対意見を述べているという意味でまだいいところがあったが
てめーらは一方的な押しつけしか頭にない100%真のノイズだ
>>490 既に解説があると示すのも質問に対する回答として十分だし、それで不満な理由がまるでわからん。
それが対話でないと断言するのも意味がわからん。
結局のところどうして欲しいの?
>>491 意味がわからんからどうした?
平行線の相手に何か言って欲しいのか?
>>493 そう決めつけて続きを拒むなら「一方的な押し付けしか頭にない」「対話がない」というまさにそれでしかなくね?
意味がわからんから解説してくれっての。
わからんことを理解する必要があるから対話になるんだろ。
>>494 自分の言葉で何か言えよと思う俺の意見を
おまえ真っ向から全否定しただろ
だから接点がないと判断したんだ
接点があるなら最初の態度を撤回しろ
話はそれからだ
>>495 意見を全否定って、そりゃ異なる意見があるのは当然だろう。異なる考えなら議論にならないなんて、議論する気が無いだけだろう。
ついでだが、俺もお前さんの意見には反対だ。自分の言葉で書くかはまったく重要ではないと思う。お手軽に書ける掲示板のレスは言葉足らずだったり不正確な表現なことも多々あるが、それよりきちんと纏まった情報をリンクされた方がありがたいことも多い。
>>496 意見が異なるのと全否定は違うぞ
自分はこう思うと述べるのと
おまえは間違っているというのの違いだ
よくいるんだよ、どっかからの受け売りを壊れたレコードみたいに繰り返すだけなやつとか
俺は自分の知見からは何も出てこないのかよと思うことがあるが
おまえはそれで満足なら勝手に満足してろよ
そこが俺とおまえの違いだな
質問です テキストファイルから文字を1文字ずつ読み込んでchar型の2次元配列matrixに入れていきたい。 この時改行は配列に入れたくないときどうすれば良いですか? うまくいかないコード for (i=0;i<10;i++) { for (j=0;j<10;j++) { if (fgetc(fp) == ‘\n’) { continue; } matrix[i][j] = fgetc(fp); } } テキストファイルは行数と列数があらかじめ分かってるとして 例えば AAAAAAAAAA BBBBBBBBBB … のようなファイルです
>>498 continueだと内ループ先頭に戻るから違うんじゃないの
>>498 .for ... {
. for ... {
. char c = fgetc(fp);
. if (c != '\r' && c != '\n') {
. matrix[i][j] = c;
. }
. }
.}
>>499 呼ばなくていいです
>>501 これでもうまくいかないです
for (i=0;i<10;i++) { for (j=0;j<10;j++) { matrix[i][j] = fgetc(fp); } fgetc(fp); //読み捨て }
サイズが固定なら fread でよくない? そうすべきというほどのものでもないだろうが。
>>498 「うまくいかない」症状を見れば、もう少し見当がつくんだけど…。
格納先の配列を char matrix[LINES][CHRS]; とか定義して、
printf("%s\n", matrix[n]); で表示してるの違うかな。
各行の文字列の末尾にあるべき '\0' が格納されてない、みたいな。
2重ループやめても良いか? while (1) { int c = fgetc(fp); if (c == EOF) { break; } if (c == '\n') { continue; } matrix[i][j] = c; j++; if (j == 10) { i++; j = 0; } }
501の方法だと'\n'読んだ時に、スキップしているけど ループ変数の方は ++1 してるからズレてくる
>>503 >>507 どちらも行けました
507のは理解できるんですが
503の読み捨てというのはどう言うことなのでしょうか
OSSで構造体を公開しようとおもってる そのサイズをバージョンアップしても固定にしたいんだけどいいアイデアないかな? struct foo { int a; double b; // ここをバージョンアップで追加 } char[100] buffer; 上記を予め含めておいて、追加サイズ分だけ減らすってのがよくある手段だと思うけど、intや他の型が固定サイズの保証はないから、処理系をかんがえると使えない パディングでサイズも変わっちゃうしね C++ならテンプレートでいけるけど、OSSだから利用者が多いC言語で書いておく必要がある 構造体を公開しないで、ハンドラとセッタで扱えばいけるだろうけど、今回は構造体でいきたい
「sizeof(int)が環境依存」を前提にするなら バージョンアップ以前のint a;だけでもう既にサイズ固定じゃないじゃん int32_tですら必ずある保証はないよ 「汎用な記述で全ての環境に対応したい」ってのが、土台無理な注文なのよ 低レベルなことやるなら、サポートする環境を列挙限定しなければならない 素直に「よくある手段」でやりなさいってことだ
>>512 処理系によるパディングとかの問題を別にしたら、bufferをunionにしといたらわざわざ減らさなくても良いのでは?
>>513 たしかにint aですでに違うね
ただ今回考えてるのは、コンパイルせずに共有ライブラリを差し替えるって状況を想定してる
そのときにセグメンテーションフォールトがでないようにしたい
だから、すべての処理系で同じサイズにしたいってわけじゃなくて、同じ処理系の中ではバージョンにかかわらずサイズを保ちたいってことなんだよね
説明不足ですまん
あらゆる環境だったらシリアライズしないとだし。 同じ処理系だったら同じ構造体でいいだろうし。
>>514 のはこんな感じですかの union foo { struct { int a; double b; // ここをバージョンアップで追加 }; char dummyBuffer[100]; }; 構造体の大きさが char[100] に収まってる範囲での話
>>512 のように末尾に用意したギャップを引き算していくにしても、引ききれなくなった段階で破綻するよね
※ 突破したことをチェックするには sizoef(union foo) と sizeof(char[100]) とを比較すんのかなぁ…
C99 <stdint.h>のuint*_t型を使った方がいいと思う。
今はstatic_assertとかいうものがあるらしいぞ これでコンパイル時にチェックすればよい
>>512 不格好だけどこれでいけるよ
全部プリプロセッサで処理できて、構造体サイズは100バイト固定になる。
予想を超えてサイズを突き破った場合は別構造体作るしかないね。
#include <stddef.h>
struct inner_foo {
int a;
char buf[];
};
#define MAX_STRUCT_SIZE 100
#define BUF_SIZE (MAX_STRUCT_SIZE - offsetof(struct inner_foo, buf))
struct foo {
int a;
double b;
char buf[BUF_SIZE];
};
>>523 ちょっと間違ってるみたい。
struct foo には struct inner_foo に double b; が追加されてるせいで
sizeof(struct foo) == MAX_STRUCT_SIZE にならない。
sizeof(struct foo) == MAX_STRUCT_SIZE + sizeof(double) になっちゃう。
inner_foo と foo とで char buf[] より前のメンバを一致させる必要がある。
>>515 なんでサイズが違うとセグメンテーションフォールトになるのかよくわからんが…
Win32APIみたいに頭にサイズ入れときゃいいんじゃね?
データファイルの話なら分かるが、intのサイズが違う環境の共有ライブラリってそもそも使えるのか?
コンパイルは自分でしろって話だと思うよ。 そうすると単にメモリ配置を意識したプログラムだな。 当然、バイトオーダーも気にしろよっていう話に
やっぱ int32_t みたいな環境に関係なく同じビット数になるやつにしといた方が良いんじゃないかな。
515の >ただ今回考えてるのは、コンパイルせずに共有ライブラリを差し替えるって状況を想定してる >そのときにセグメンテーションフォールトがでないようにしたい 構造体のパラメータを追加し共有ライブラリを差し替えつつ 呼び出し側のコンパイルは行わないって無理ないか? 旧ソースで追加されたパラメータ部分は不定値であって その不定値をうけて共有ライブラリ内部が正しく動作できるとは思えないが…
構造体には、サイズの変わらない、ポインタだけを置いておいて、 実際の領域は、ライブラリ内で確保して使って、解放すれば?
さすがに実体を共有するという目的がないとこういう発想にはならんでしょ。 共有メモリとか、ファイルとか、通信とか。
>>529 呼び出す側がバージョン情報をもっておいて、処理側で振り分けてアクセスしないようにすれば問題ないね
#define version 2
void func (const struct* foo) {
func_impl(foo, version);
}
void func_impl(const struct* foo, int version) {
if (version > 1) {
foo.b;
}
}
>>532 そのバージョン情報の数字を埋め込むのに一番適度なのは実構造体のサイズって話に(
>>525 )
>>531 のような背景なら
ペイロードサイズは触りたくない ってのは納得できるな
バージョン違いの吸収法は別途必要だけど
構造体の中身を公開しないでポインタだけ使わせて読み書きする関数を別途用意するって方法もあると思う。オブジェクト指向の言語でのプロパティのようなものね。 内容のファイルへの読み書きやネットワークでのやり取りはそれようにデータをpack、unpackする処理を作ってそこにバージョン番号も埋め込む。
exeがnew(malloc)するけど中をいじるのは全てdllの関数ってのはままある dllだけ差し替えで済ましたい、サイズが変わらなければexeはビルドし直さなくていいのに… ってことだろう >512の >intや他の型が固定サイズの保証はないから、処理系をかんがえると使えない >パディングでサイズも変わっちゃうしね は全く関係ない話だったということだ 素直に「よくある手段」でやればいい >514,517のunionもいいと思うけど foo.aでアクセスできないよね?foo.body.aとかしないと
>>517 の foo.a でいきなりアクセスできる union が記述できるのは C11 からみたい
無名構造体/無名共用体
>>535 intが4バイトなんて保証はないから、char[] bufの大きさを決められないって話でしょ?
intメンバを追加したとして、bufのサイズはどれだけ減らせばいいのかわからないのが問題
4の環境が多いだろけど、2の環境だと2を減らさなきゃいけないわけで
dll差し替えで再ビルドしない場合、構造体サイズが変わると特に配列渡しの場合はセグメンテーションフォールトになる可能性が高くて危険
セーブデータみたいに構造体をそのままファイルに落とすとしても、サイズはずっと不変なのが扱いやすいね
数字付かないintのでかい方に合わせるなら、それこそunion使って明示的にオフセット決めるとか。 本当にそんなことしたいのか?という話は置いといて。 もちろんint32_tとかint_least32_t使う方がいいし、本当に位置合わせするならバイト位置指定して読み書きするし、そもそもサイズ固定せずにシリアライズ用のライブラリ使うのが正しいよ。
>>537 > intが4バイトなんて保証はないから、char[] bufの大きさを決められないって話でしょ?
そんな話はとっくに終わっとる
>>515 をちゃんと読めよ
>>536 ほう知らんかった
なら>517でほぼデメリットないね
>>537 「その環境」でのintのサイズはsizeof(int)でおk
win32apiはバージョンによって構造体の変数が追加になるから構造体のサイズを構造体の先頭にセットする
文字配列列sを逆順に文字配列tに格納して出力したいのですが、 以下のコードでは実行してもt=[]と出力されてしまいます #include <stdio.h> #define MAXLINE 1000 main() { char s[MAXLINE],t[MAXLINE]; int c,i,I; for(i=0; i<MAXLINE-1 && (c=getchar())!=EOF && c!='¥n'; ++i) { s[i]=c; } if(c=='¥n'){ s[i]=c; ++i; } s[i]='\0'; I=i; for(i=i; 0<=i; i=i-1) { t[I-i]=s[i]; } printf("t=[%s]",t); } どこがおかしいのでしょうか…
後のループの一発目は s[i]='\0'; I=i; /* ここのforを削って */ t[I-i]=s[i]; こういうことになるから t[0] = s[i] ってことになって t[0] = '\0'; をやってることになる 上記のは 1 2 3 4 \0 → \0 4 3 2 1 のコード 実装すべきなのは 1 2 3 4 \0 → 4 3 2 1 \0 となるコード
おっしゃる通りでした…今度は上手くいきました ありがとうございます
おっしゃる通りでした…今度は上手くいきました ありがとうございます
自己解決できたようでなにより 整数の配列を逆に整列させるなら正解だったんだけどねー 「文字列」操作の落とし穴ですな
今C言語教室でSQLとGUIやってる初心者なんだがCでDB弄る仕事ってあるのか JavaとかC#に取られそうだけど
>>549 ODBC 経由ならできますが…昔、ハンドルのキャストをとちったミスを、その意味不明の動きから突き止めるのは大変でした
ODBC を直書きする情報はネットにほとんどありませんね
SQL使うのか慣れてないからあんまやりたくないんだよなあ 頑張るか
>>549 C++ならまだしもC言語でGUI?
どこの教室だよ…
むかーし、Pro*C って使った事がある Cのソース内にSQLを埋め込み プリコンパイルする感じ 今は流行らないかもしれない
SQL使いこなしてる人ってすごいけど、正直ああはなりたくないという感じだよな。
同じ事をCのロジックで組むとなると、アタマおかしくなるかも
普通にアプリケーションの規模が大きくなるとsql使いたくなるだろ そういう場合はsqlite使う
5ちゃんねる専用ブラウザもsqlite使っているそうですね? プログラムコードはCではないですが
IoTのデバイス開発やってるけど、C言語でDBのクライアントライブラリ使ってるよ
リーナスさんはC++嫌いつーてるしな トレードマークのfuck口調で
この頃は間に何かライブラリ挟んでDB変わってもSQL文がほぼ同じままで行けるようなのが流行りなのでは?
大学の情報科の人たちってどのレベルでC言語使えるんですかね? Cに限ったことではないですが大学4年でどの程度の練度が身につくのか
人によるだろ そもそも好きなやつは大学入る前からやってるからな
>>565 おまえは情報科に来るなってだけ
やる気ねえやつが畑違いな学部に入ること自体が害悪だ
学校だとアルゴリズムやシステム設計手法は学べるだろうが 練度が上がるのはやはり仕事を始めてからだと思う
コンピュータサイカヨウの基本は一通りやるんじゃない? 情報処理試験の基本レベルくらいのもの 初心者は実務にはそのままは使えないけど、中級以上のエンジニアならこのあたりの知識があると差がついてくるね
業務のほとんどは手作業の自動化だから差は出ない。そしてみんなリストラされる。
仕事で出会った、いろいろな人を思い出すに、ガチに使える人材って凄いからなあ。 学校や仕事を通じて学ぶ、みたいな次元じゃないんだよねえ。
setbuf関数っていつなんの為に使うんや? バッファリングのためにあるのはわかるけどそもそもバッファリングがなんの為にあるのかわからん
ちまちま出力するより溜めてからまとめて出力した方が高速
1万文字くらいのテキストファイルを標準出力でやってみたけど変わった気しなかったぞ もしかして数百万文字レベルの巨大ファイルだと劇的に変わるんか?
というか普通はバッファリングする関数ばっかりだが、自前でバッファ用意したいときもあるって話。 基本変わらんよたぶん。
確かに少ないな と思ったんで2,700kbでやってみたらむしろ4秒長くなったぞ
>>574 FILE * 経由で出力する printf() 等は内部でバッファリングしていてバッファがいっぱいになったらまとめて出力する(出力先が端末の場合は行単位で出力する)。
そのバッファを自分で指定した領域を使わせるか、またはなしにできるのが setbuf()。更に自由に大きさやモードも指定したいなら setvbuf() を使う。
バッファリングに関して考慮しなくても良い入出力をする場合は read(), write() で行う。この場合は全くバッファリングされないので少ないバイト数の入出力が多いと遅くなる。
それと printf() のようなフォーマットを考慮した出力はないので必要なら自作する。
>>576 open()してwrite()で1バイトづつ書くのとまとめて書くのとではバイト数によっては大幅に違いが出ると思う。環境依存ではあるが。
>>581 大きなファイルの入出力を高速化したい時はsetbuf(fp,buf)
バッファリング無しにしてバッファをフラッシュするタイミングを順番に逐一実行させたい時はsetbuf(fp,NULL)
みたいな感じでええんかな?
>>582 setvbuf()で自分でバッファの大きさ決めてしまった方が良いかも。
既出かもしれませんがconstがjavaのfinalと違うと知りました。どう違うのでしょうか?c初心者です
>>576 OSによってはHDDへ遅延書き込みするから、結局バッファしてるのと大して変わらなかったりする。
>>584 20年前くらいの知識で、しかも完全に理解してるわけではないので、間違っていたらゴメンだけど。
変数について言えば、Java の final 変数は、値が未定義かどうか、という情報を内部的に持っていて。
もし、変数の値が未定義の場合は、1回だけ代入できたはず。例えば
final int i;
System.out.println("test");
i=4;
System.out.println(i);
i=5;
System.out.println(i);
の場合、1回目の代入(i=4)は許されるけど、2回目の代入(i=5)は怒られる。
それに対して、(C89の頃のだけど)Cのconst変数は・・・
const int i;
printf("test\n");
i=0;
printf("%d\n",i);
1回目の代入(i=0)であっても怒られる。
みたいな感じの違いはあったような。最近のCやJavaは知らないんだけどね。
あまり自信がないので、詳しい方のレスを待ちましょう。
>>585 そっちもあるけどAPI呼出し回数の削減もあるから
>>585 今どきのディスクならほぼ遅延書き込みしてるといってもいいね
バッファには二段階あって、
@プロセスが持ってるバッファ
AOSが持ってるバッファ
flush関係のライブラリ関数やシステムコールは@をAに吐き出す
Aを吐き出すにはLinuxだとfsyncもしくはfdatasync
>>584 Cはポインタの指す先が const という指定ができるがJavaは配列の要素まで final にする指定ができなかったと思う。
つまり配列やクラスそのもののインスタンスへの参照は final にてきる。しかし参照される中身までは final にできず書き換え可能(クラスの場合はpublicのクラス変数とか、外部から書き換えられるようになっていれば書き換えられる)。
ま、ちょっと試してみな。
LTOのオプション を使ってコンパイルすれば インライン関数をヘッ ダーに書かなくても 勝手にインライン化できるものはインラ イン化してくれる という理解で あってますか?
>>589 これな
Javaを最初に設計した奴はバカなんじゃないかと final の仕様を見たとき思ったな
Linux では、HDD へ書き込むのは、デフォルトで、5秒に1回 USB メモリで、書き込み回数を減らしたい場合は、 15秒に1回とかに設定する人もいる
>>593 書き出し周期はファイルシステムに依存するよ
例えばext3かext4かで挙動は違う
C言語のfprintfを用いるときに、前行の改行を消す方法をご存知ないですか? エスケープシーケンスでバックスペースを試したのですか上手くいかなくて困っています。 状況としてはfor文を用いて改行を含んだ文字列を繰り返し出力させているんですが、最後の行だけ改行を無くし、続けて別の文を出力したいのです。 繰り返しの回数を変えて最後に改行なしの処理をいれればいいと思うのですが、簡単な方法があればと思い質問させていただきました。 よろしくお願いします。
ストリームの撒き戻しは難しいんじゃないか? 表示装置なのかファイルなのかでも変わるだろうし…
ファイルポインタは巻き戻せる 標準出力ならエスケープシーケンスで右上に行けばいい
こんな感じでいいのか? #include <stdio.h> int main(void) { FILE* fp; fp = fopen("Test.txt","w"); fprintf(fp,"hoge\n"); fseek(fp,-1,SEEK_CUR); /* 改行2byteなら-2 */ fprintf(fp,"fuga\n"); fclose(fp); return 0; }
質問者が知りたい情報とは違うので、スルー推奨かもですが。 もし自分が、同じことをやれ、と言われたら。 「改行を含んだ文字列」を、「改行」と「それ以外の文字列」の2つに分けて、別々に出力しようとするかなあ。 ループの回数を変える必要はなくて。イメージとしては for() ※行単位のループ { if(最初の行でなければ) fprintf で「改行」を出力 fprintf で「それ以外の文字列」を出力 } fprintf で「別の文を出力」
>>595 bool First = true;
for( … ){
if(First){
First = false;
} else {
fprintf("¥n");
}
fprintf( … );
}
ファイルが標準出力等でvt100互換端末であれば。 #include <stdio.h> #include <string.h> int main(void) { int i; i=fprintf(stdout,"hogehogehogehoge\n"); if (0) fprintf(stdout,"\E[01Afuga%*c\n",i,' '); /* これか? */ else fprintf(stdout,"\E[01A\E[%02dCfuga\n",i-strlen("\n")); /* あるいはこれか? */ return 0; } cmdとかdos窓なら無理?
>>596-602 皆様回答ありがとうございます。
ファイルを扱っているので、fseekで戻す方法を試してみようと思います。
プログラムいじられるなら、改行出す方をどうにかした方が良さそうだが
ansi.sysを組み込めばVT100互換エスケープシーケンスが という昔話…と思ったが、ググったらvistaまであったんだな驚き Windows 10 Threshold 2(10.0.1058)ではコマンドプロンプトでANSI/VT100互換表示が可能に というスラドの記事も出た
最後に改行出すんじゃなくて最初に改行出すようにすれば良いだけでは? 一番最初の行だけは最初に出さなければ良いだけ。 バッファリングされて出力されないのが嫌なら行末でfflush()する。
>>607 おお。既にあった。
さっきスマホで見てて気付かなかった。
>>604-607 603です。
>>600 の意味をちゃんとわかってませんでしたが、
>>606 の方のレスでわかりました。
>>600 の方が安全な気がするのでそちらを検討します。
C言語はクラスが無い。 それは実際どれくらい問題になりますか? 昔C使ってたけど、本格的な抽象的設計をやってたわけじゃなくて、 最近Java使っててそういうのをやりだしたけど、 今思い返してみるとC言語はクラスや継承や多態性が無いから かなり厳しい言語なんじゃないかな、と思ったんです。 メジャーなカーネルがCで作られてるという事実に驚愕します。 クラス無しで大規模開発は不可能としか思えません。 それどころか、1アルゴリズムの実装でもクラスは有用だと思うんですが。 最近、NimとかRustのようなCを代替するかもしれない勢いのある言語があります。 そういう言語はかなり抽象的な設計が可能です。 そういうのと比べると、小さなデバイスドライバみたいなものはCでいいだろうけど、 大規模開発におけるCはかなり無理があるんじゃないかな?と そうでもないものですか?
まあファイルがクラスと同じだし。 継承はしづらいけど、そんなもん使ったらC++でもむしろ見通し悪くなるでしょ?
最大のデバイスドライバがOSのカーネルなんじゃねえの そしてそれがC言語の限界
Linuxカーネルは2100万行を超えているそうなので たぶん地球上でもっとも大規模な開発の1つです。
Cでもオブジェクト指向的に考えて作ることは可能。構造体へのポインタまたは情報を区別する番号などを渡してその中身に基づいて処理する関数作ればいいので。 ファイルアクセスとかは作りがそうなってるよね。
クラスはコンストラクタ/デストラクタは活用したけど 継承で面倒になって、ちょっと便利な関数付き構造体としてしか設計したことない。
C言語ではオブジェクト指向も関数型プログラミングもできる。その下位レイヤーだから。 面倒臭いけど。
>>613 デバドラとかが山ほどあるだけでコア部分はそんなにたいしたことないよ
>>610 構造体に関数ポインタ入れたりすれば継承も多態も可能
書くのが面倒ってだけの話
モジュールを適切に分割すれば個々の開発部分はそんなにでかくならないし
まあしかしC++は複雑怪奇な状態になったような感じがするのでなんか別の言語でオブジェクト指向やった方が良いような気がする。
linux kernelなんておもくそオブジェクト指向的な構造だろ
関係ないけどOOPが流行り始めた頃に「WindowsのUIはオブジェクト指向だ」と言ってたやつを思い出した。
>>615 >Cでもオブジェクト指向的に考えて作ること
あくまでも「オブジェクト指向『的』」であることに注意すること
C ではオブジェクト指向を実現できない(断言)
>>617 >C言語ではオブジェクト指向も関数型プログラミングもできる
C ではオブジェクト指向はできない(断言)
継承をCでどのように記述するのでしょうか?
>>622 >linux kernelなんておもくそオブジェクト指向的な構造だろ
あくまでも「オブジェクト指向『的』」であってオブジェクト指向そのものではありません(断言)
いやできなくはないよ。何せC++は元々はCへのコンバータだったしな。C++のソースを読んでC言語に変換して後のことはCコンパイラに任せてたんだよ。それが初期のC++。 もちろんCは言語そのものがオブジェクト指向をサポートしてないから人間がそれをやろうとするととても面倒な事になるけどな。
そんなん言い始めたらアセンブラでもオブジェクト指向プログラミングできることになっちゃう。 言語としてOOPがサポートされてなきゃ認められないでしょ。
>>628 >C++のソースを読んでC言語に変換して後のことはCコンパイラに任せてたんだよ。それが初期のC++。
C++ から C へのトランスパイラが存在したからといって、C にてオブジェクト指向(的ではなくそのものずばり)なプログラミングができるわけではありません
C++ のコンパイラが存在するからといって機械語が OO でないのと同じです、まず、
C++
https://ideone.com/vAp2Sj に対応する C のコードを示してください
>>629 >言語としてOOPがサポートされてなきゃ認められないでしょ。
激しく同感いたします!
>>610 全く問題にならない
classというキーワードがなくても
コードを書く者の考え方次第でカプセル化や継承はできる
FILE構造体がその例だ
多態性がないというのは、おまえさんの認識不足で
関数ポインタでそんなものはすぐに実現できる
そういう認識不足があるからこそ
メジャーなカーネルをなぜ書けたかが理解できないのだ
>>630 対応するCのコードを示せるやつがいたら、おまえどうする?
朝8時の品川駅のホームでストリーキングでもするか?
>>632 >classというキーワードがなくても
>コードを書く者の考え方次第でカプセル化や継承はできる
C ではカプセル化はできても継承は不可能ですよ
>>633 >対応するCのコードを示せるやつがいたら、おまえどうする?
あなたができないことをそんなにアピールしなくてもいいと思いますよ
仮想関数テーブルの実装方法について語るスレはここですか?
>>635 いーや、できる
おまえさん禿本やリップマンくらい読んだか?
裸踊りを賭す自信もねえやつがいきがってんなよ
>>638 ではストロヴストルップやリップマンはどういっているのか、ここに引用していただけますか?
あらかじめいっておきますが、引用はできない、なぜならば、そんな内容をストロヴストルップもリップマンも書いていないのだから
>>625-627 ,
>>629 オブジェクト指向と言う概念と実装の区別がついてないんだな
低能なプログラマーによくある行動w
例えばLinuxで言えばリダイレクトなんて言うのはもろオブジェクト指向な機能だよね
Applicatlon > xxx
ってやればxxxがファイルならApplicatlon が出力したデータをファイルに書き込むし、xxxが端末なら端末にデータを表示するし、xxxがプリンタならデータを印刷する
Applicatlonは出力先が何であるかを気にする必要はない
もちろんLinuxはC言語でこれを実現してるしより面倒だろうけど当然アセンブラで実装することも可能
>>640 >typedef struct C
>{
> A ThisA;
> B ThisB;
> int c;
>} C;
これは委譲であって継承ではありません。私は
>>626 で「Cでは継承はできない」と主張しており、これを否定するために委譲は使えません
>>642 それは smalltalk 的な OO であって C++ の OO の概念とは多少食い違うと思います
コンストラクタとデストラクタの機構だけは欲しいと思ったことがしばしば
>>643 FILE は OO 的ではありますが、OO そのものではありません
OO というからには委譲とは別の継承を表現できねばなりませんが、
C では継承を表現できません
glibとか大昔からあるじゃん… glibがooでないならooの定義をまず示せ
オブジェクト指向ってC++固有の概念なの? だとすると、そりゃCで実現は無理でしょう。関係ないんだから。CとC++は。
>>648 glibc++ は OO かもしれませんが glibc が OO だとは寡聞にして聞きませんね
>>649 >オブジェクト指向ってC++固有の概念なの?
いいえ、Java も C# も OO だし、 python も ruby も OO で表現できます
>>650 GLibだよGLib
今知らないのもどうかと思うけど、使ってみると面白いと思うよ
>>651 いや、それだとつじつま合わないでしょ
自分の決めた道を突き進めよ
>>653 どうつじつまがあわないというのですか?説明ください
私は「OO ならば委譲と区別された継承を記述されなければならない」と主張しています
>>650 glibcじゃねーよ…
gimp、inkscape、gnomeほか様々なソフトウェアで使われてる。
linuxとは無縁だったんだな
>>629 出来るに決まっている
OO言語はオブジェクト指向プログラミングがやり易いようになっているだけでそれじゃなきゃOO出来ないというのはOOについて理解していないだけ
>>644 多重じゃない継承の場合Cでは1つめのメンバにベースクラスのインスタンスを書くというルールなだけ
それだけで呼び出し元のコードはほぼなにも考えずにベースクラスの機能を使うことができる
>>655 CでもOOできるし、継承できるし、オーバーライドもできる。
20年位前の本に「ANSI C に準拠したコンパイラならできる」と紹介されている。
メモリを意識したコードを書けない人には理解できないけどね。
C言語はABIが標準化されている、という文を見たんですが、 その標準仕様の名前は何ですか? 新しいプラットフォームがその標準仕様を満たせば バイナリレベルあるいはソースレベルで移植性があるんでしょうか?
>>654 ていうかお前、MZ級にウンコな片山博文やんけ。
>>660 標準の名前は無いんじゃないの?
とりあえず「ABI」でググれ。
アーキテクチャ跨いでABIが統一できるわけないよね 引数の渡し方なんてアーキテクチャ変わったらそもそも使えるレジスタ変わるし 同一アーキテクチャの特定OS内ならバージョン変わってもABI互換ってのは良くあるけど
>>645 お前のOOの定義書いてくれ
俺の思うOOじゃないとか言われたらどうしようもないわなw
Cでオブジェクト指向プログラムなんて書くのは時間の無駄 速度が必要な部分だけCで作るのが正解
>>641 てめえの怠慢を俺が尻拭いする筋合いはねえぜ
調べるところまで教えてやったんだ
自分で調べる気がねえなら不勉強のまま取り残されろ
>>665 > Cでオブジェクト指向プログラムなんて書くのは時間の無駄
そう言うこと
ただ時間がかかると言うのとできるできないの話は別
なのでお前のレスのほうが時間の無駄w
>>658 >多重じゃない継承の場合Cでは1つめのメンバにベースクラスのインスタンスを書くというルールなだけ
C では構造体のメンバの順番をプログラムから指定することはできたのでしょうか?
C コンパイラはアラインメントを考慮して最適化をはかり構造体のメンバを、プログラマの記述から適宜入れ替えていもいいのでは?
となると一つめのメンバにベースクラスのインスタンスを書いても、コンパイラに入れ替えられてしまっては無意味なのでは?
>>659 >CでもOOできるし、継承できるし、オーバーライドもできる。
できないとおもいますよ、できるというのなら
>>630 を C で記述してみてください
>20年位前の本に「ANSI C に準拠したコンパイラならできる」と紹介されている。
出典を明記ください
>>666 >てめえの怠慢を俺が尻拭いする筋合いはねえぜ
あなたは私の怠慢を主張するのと同様の筋で、私はあなたの欺瞞を主張します
出典元や引用を正確にできないのであれば、あなたは嘘をついていると判断されてもしかたがないと思います
>>661 片山先生は私とは比較にならないほど生産性の高いプログラマですよ
>>652 はじめて知りました、
>>650 は勘違いした内容でした、すみません
ご紹介ありがとうございます。今試しているところです!
>>668 真面目な話、規格書読んでこい
ツッコミどころが頓珍漢すぎる
>>673 コメントありがとうございます。確かに
>>668 には誤りが含まれていました
ISO/IEC 9899:1999
6.7.2.1.5
As discussed in 6.2.5, a structure is a type consisting of a sequence of members, whose
storage is allocated in an ordered sequence,
JIS X3010:2003
構造体は,メンバの列から成る型とし,メンバの記憶域は,並べられた順に割り付ける(6.2.5参照)。
しかし、この記述は構造体のパディングが構造体の先頭に詰められる場合を排除していないと考えます
よって、
>>658 >多重じゃない継承の場合Cでは1つめのメンバにベースクラスのインスタンスを書く
>それだけで呼び出し元のコードはほぼなにも考えずにベースクラスの機能を使うことができる
構造体の先頭にパディングがあった場合は、この記述は正しくないのではないでしょうか。
>>674 よくよく考えると、私の「この記述は構造体のパディングが構造体の先頭に詰められる場合を排除していないと考えます」もかなり疑わしい、
パディングというものは、一つのメンバがあって、それに対してもう一つのメンバを置くときにパディングを置くものであって、最初からパディングを置く必然性がないですね
struct S {
int a;
} b;
のとき
&b = &(b.a)
は保障されている、時間がたつにつれてそんな気がどんどんしてきました…
>>658 を認め、同時に単一継承であれば C で OO と継承を表現できることを認めます
>>674 > a type consisting of a sequence of members, whose storage is allocated …
この is にも惑わされてしまいました
これは
a type consisting of a sequence of members, each of which is allocated about storage in an ordered sequence
とか
a type consisting of a sequence of members, each of which's storage is allocated in an ordered sequence
くらいに解釈するべきなんですね
検討する機会をいただきありがとうございました
オブジェクト指向って抽象化が目的なのに、メモリ配置とか気にするのは馬鹿みたいだよな
MicrosoftのCOMはほとんど全てのコンパイラが構造体のメモリ配列を同じ様にするってのを利用してるんだっけ?
>>678 ここにも概念と実装の区別がついてないバカが…w
>>669 C言語でオブジェクト指向を表現する (クラス、継承)
https://qiita.com/qiita_kuru/items/8f3441bce9b2f53d1d62 この辺でも読んどけ。
「何故できるか」まで言及したもっといい文献はあるがカスには教えない。
俺は「せざるを得ない」状況だったのでCでOOしたが、ネイティブでOOできるならそれに越したことはない。
あ、同じ板でハッシュが一致してるのでお前は蟻。
>>670 は? 俺は主張なんざしてねえぜ
事実をありのまま指摘しただけだ
何勘違いしてやがる
というか勘違いということにせねば立場がねえってかw
もうこんなとこで喧嘩しても勝敗つかないんだからやめろw 仲良くできねえのかお前らは
でも冷静になって考えてみろ 単細胞時代から何億年と喧嘩してきた結果今の人間がいる訳だから喧嘩をやめてしまったらそれは果たして生物と言えるのか 逆に言えばAIが人知を超える時 人間は機械に滅ぼされ地球から人間はいなくなっているという事 つまり今何をすべきかと言うと人間は思考をやめアホになるべきである そうアホの坂田こそ未来の救世主ネオなのである
>>681 そのご紹介のリンク先は、内容について、はっきりいって詰めが甘いです
すなわち、継承と委譲を区別できていません
そんな中途半端な理解で quita に掲載するとか、玉か石かどちらかといえば、石の部類でしょう、全然参考になりませんでした
そんな中途半端な内容の記事を掲載するあなたも同様と判断いたします
>>683 事実かどうかは、主観的か客観的か、に依存すると思いますが、
相対論においてはすべての事象について純客観的などありえない…@
ので、@より、あなたは主観を主張しているものと私は理解します
>>686 「継承」に必要な操作一式を委譲に基づいて提供できているなら継承できていると思うんだけど、
言語サポートを伴って暗黙的に機能しない限り「継承」と呼ぶべきではない、ということなの?
そこで明確に区別することにあんまり意義が見出せないんだけど、その定義どっか出典示せる?
>>688 委譲による実装で継承を実現できているのなら、それは継承(の一形態)である、…@ という主張ですね
@は私にも理解できますが、委譲はダイヤモンド継承を回避できない欠点があるのでは、と考えています
「ダイヤモンド継承」については C++ の書籍には大概載っているかと、具体的な書籍名は探しておきます
>>690 それは初耳です
Object Oriented に継承は憑き物だと思っていました、継承のない OO って存在するのですか?それは例えばなにですか?
>>689 ちょっと何言ってるかわからないな。
ダイアモンド継承の問題を「継承」で回避しているが委譲では回避できないであろう例を挙げてくれたら考える。
明確に区別しないことも理解できると言うなら「詰めが甘い」とか「中途半端」とか言ってたのは何なのか・・・。
クラスベースのOOP言語ではクラスの継承は一般的だけどプロトタイプベースのOOP言語では継承の概念は存在しないよ
>>692 クラス A, B, C, D について、
A のメンバ変数を a とする、また
B->A(B は A を派生する)
C->A
D->B, C (多重継承)
において、これを委譲で実装すると、B.A.a と C.A.a が同じであるべきにもかかわらず二重にインスタンスとして生成されてしまうので、
継承で実装した D.a を、委譲で実装した D.B.a と同一視するか、D.C.a と同一視するか、また継承における D.a を更新した場合に委譲では D.B.a と D.C.a の両方を更新するコードを生成しなければならないのか、
等あいまいな部分がでてくる、これがダイヤモンド継承問題です
継承で実装すれば、C++ ではこれを仮想継承といいますが D.a の実態を一つに限定することができますし、D.B.a, D.C.a の両方を保存することもできます、つまりモデリングにおいて選択肢を準備できる
しかし委譲で実装すると D.a の実態を一つに限定することが不可能です、つまり選択肢を準備できません
以上より委譲で継承のすべてを代行できないため、委譲と継承を区別する必要が生じると考えます
ただし、多重継承を認めないのであれば、委譲と継承は同一視しても差し支えないと考えます
>>693-694 ふーん、インタプリタ JavaScript には継承はないのですか
>>692 >明確に区別しないことも理解できると言うなら「詰めが甘い」とか「中途半端」とか言ってたのは何なのか・・・。
「単一継承に限定するのならば委譲による継承の実装も可能である」という意味での
>>689 の「理解します」の文言だと解釈ください
ただし委譲で継承をすべて実現できないので、
>>681 掲載のリンク先は「詰めが甘い」と判断せざるを得ない、そんなリンク先を紹介する
>>681 も同様と判断するものです
継承がオブジェクト指向と無関係なんだから、委譲で実現する必要がない
>>695 C++が仮想継承・多重継承でやっていることをコードで書き下せば済む話。
アップキャストがnopで済むか、オフセットの足し算になるかなどの詳細に基づいて区別しろってことに
聞こえるんだけど、やっぱりそんな区別の意義が見えてこない。
もうそろそろ別スレ立ててやれや > それは smalltalk 的な OO であって C++ の OO の概念とは多少食い違うと思います とか言う様な奴を相手にしても永遠に終わらんと思うが…
>>700 >C++が仮想継承・多重継承でやっていることをコードで書き下せば済む話。
そこで実現されているのは私のいうところの継承であって、私のいうところの委譲ではありません
委譲ではダイヤモンド継承に対応できない(選択肢を提供できない)
したがって、委譲と継承とは区別するべきであり委譲で継承を実装するべきではない、という私の主観には一貫性があると思います
>>702 継承はだめだよ
これから使ったら反省文ね
>>702 むちゃくちゃだなぁ。「私のいうところの」「継承」「委譲」の区別がどうにも掴めないし、
その区別の意義も示されなさそうだし、迷惑してる人もいるみたいだから、離脱させてもらうよ。
>>703 私がいつ「継承は要らない子」とかいいましたか?
あくまでも「継承を委譲で実装できない」とは言っていますが(これは部分的に意見を修正していますが)「継承不要論」とかは一切主張していないと考えていますよ
>>704 継承と委譲の区別は必要だと思いますよ、その言葉を贈らせていただきましょう
>>705 だから、世界の共通認識として要らないもの。
使っちゃだめ。
もういい加減やめてくれないかな やりたいなら、Cでクラス実装とかって 別スレたててその中でやってくれ
>>706 私のいうところのって、最初の論旨からずいぶん乖離しているな
カプセル化や継承ができるかどうかって話だっただろうがよ
いつから、おまえのお気に召すかどうかって話になったんだよ
>>686 煽って、良い文献の情報を得ようとしているのだろうが、カスにはやらんよwwww
ソロソロ終わって良いですよね? この議論は、C使っている人とは違う世界に感じる
stddef.hをインクルードして #define __STDC_WANT_LIB_EXT1__ 1 を定義して -std=c11をつけても gccでrsize_tが使えないですけど なぜですか? windows版のGCCでは使えました
rsize_tって多分オプションだから実装されてないよね? windowsはなぜか実装してる
C#でポインタ使えばC、C++は無くても良いんじゃないですか?
C#使うならポインタのように面倒臭いこと考えなくても変数でも関数でも参照できるだろ
C#のポインタはC/C++ほど使い勝手が良くない C#でポインタを使ったところでパフォーマンスはC++の半分程度 まあトータルで見れば最優秀クラスの言語なのは間違いないけどね C++みたいなスパゲティ言語ではないし
まあ、だいたいの後から出た言語はC/C++の欠点を補おうとしているのでポインタがあっても安全なのが普通だな。
安全じゃないのがc#のポインタの特長だろ。 特徴じゃなく
そりゃC#のポインタ使うにはunsafeオプションが必要だからね。安全じゃないわね。 C#のポインタは過去資産APIを使うための必要悪って感じか。
>>722 Cの前からでてたPascalにもポインタはあるんだが…
むしろC/C++が例外的
数年前からこのプロジェクトがちょっと注目されてるけどどう思う?
RustはC++を置き換えてもCを置き換えないだろうと思うし、
ZigはCの置き換えとしては妥当なんじゃないかという気がする。
Cより高速、単純、堅牢らしい。
https://ziglang.org/ Cより速いと主張 >Speaking of performance, Zig is faster than C. 単純な言語仕様 >Small, simple language 性能と堅牢性 >Performance and Safety: Choose Two 個人的にとても興味を持ってるんだが
CはC++ほどではないにせよ色々酷いから Cを置き換えられる言語があるなら見てみたいしぜひ置き換えてほしい
>>726 ちょっと検索してみたらもうドット絵まで準備されてるらしい
さすがに西洋人は仕事が早いな
https://www.datadeliver.net/receiver/file_box.do?fb=966f97555e424f19a29d0d866b4b3cf5& ;rc=683943257e194056afc95195b542ba5d&lang=ja
キューを実装する?プログラムを書いたのだがコアダンプになってしまったため、どこが悪いのか調べるために1回だけenqueueをするように変えたら無限に10を生成するようになってしまった
どこが悪かったのか、どうして10が無限に生成されるのか、教えて欲しい
環境は学校の端末演習室でやったから詳しいことはわからんです
>>730 それじゃあ検証のしようがない
ネットカフェで書いてここに晒せ
「無限に10を生成するようになってしまった」「どうして10が無限に生成されるのか」 コレがポイントだな 無限に生成してるように見えるだけだよ 要するにprintが悪い whileだと分かりづらいんだよ forだとラク 「q->head = temp;」とか、自分で書いてて分からなかったんだろ だからwhile文だとこのケースでは分かりにくくなる forを試gうのが正解 void print(struct queuel *q){ struct cell *pt; printf("["); for( pt = q; pt != NULL; pt = pt->next ){ printf(" %d", pt->data); } printf(" ]\n"); }
>>725 Pascalの方が先にできたんだっけ?
まあでも用途が大幅に違うよね。Pascalはコンピュータの学習用の高級言語でCはOS記述用でアセンブラ代わりに使う言語。
>>733 だからそんなことを言い出したら
>>722 の言うポインタが安全な言語って用途が違う言語だよね
って話にしかならないんだが…
>>735 まあそうだな。
Cは用途が違う上に古くて安全性が低い感じか。
安全性って何だよ インテルのerrataみたいなことか?
>>736 いやOSを書くにはその安全性が邪魔になるから両立は難しいよ
OSのコードはどんな感じなの? ポインタを使ったトリッキーな事をやってるの? 未だにLinuxでバッファオーバーフローの脆弱性出てるよね
>>740 OSのソースなんてちょっとググればいくらでも出てくるから自分で見なよ
詳細linuxとかいう1000ページの宗教書だろ 持ってるだけで御利益がある
オープンソースなのだから1分もあればソースコードくらい見られるだろうに
>>740 >未だにLinuxでバッファオーバーフローの脆弱性出てるよね
最近は聞かないね…
今普通に静的・動的解析使うとバッファオーバーフローなんてあり得ない感じするわ。
strcpyとかsprintfとか使ってるコードはまだたくさんあるでしょ dstのサイズ指定しないライブラリとか
Cが最も好きだけど、 C十十のほうがライブラリが 便利なのあるから、 個人で趣味で作るものは最近は CとC++混在で作ります。 わりと自由に混在できるので とても助かってます。 こうゆの俺だけですかね?
C言語認定一級を取得したら転職でどれぐらい評価されますか?
さあ? その会社がどの程度その知識を必要としているかで変わるのでは?
>>758 そういうときは一般化して正確じゃなくても妥当な範囲で思考して回答する癖をつけましょうね〜
うちの周囲じゃ全く参考にもしていないし資格給が出るわけでもないって所が多いな
http://codepad.org/NUCaFYyE 雨が降る様子を自分の今持ってる知識だけで作ろうとしたんですが、表現が上手くできてない気がします
だれか改善案があれば助言お願いします
>>763 抜けてました
プログラムの問題として、実行すると縦に雨粒が重なってしまうのが目立っていて、この原因がわからず質問しようと思いました。
>>764 それは使用する言語とは無関係に、雨らしく見せるアルゴリズムの問題ではないか?
ある処理をC言語で実現したいがどう書いていいか分からないとか、書いたものが想定通りにならないのはなぜかとかなら答えようがあるが。
>>765 1番上の行で雨を発生させるとき何列目で発生させるかは乱数できめているはずなのに、何行か連続で同じ列に発生しているのがよく見られていて、それが何故なのかがわかりません。
このプログラムは改良中のもので、その前のプログラムは雨粒が全部同じ速さのやつを作っていてそれは問題なく(上の現象も起きず)動いていたので、乱数でなくプログラムの問題かなと思って質問しました
>>766 乱数っていうのは偏るものだから、同じ列に連続して発生することが普通。
同じ列に発生しないような作為をする場合は乱数とは言わないと思う。
https://twitter.com/Newton_Science/status/1031788874836529152 あと、'o'が縦に連続するのに違和感があるのなら'|'などに置き換えれば良いと思う。
みたいな感じで
適当に作っててチカチカしちゃってるからあまり参考にならないかもしれない
https://twitter.com/5chan_nel (5ch newer account)
>>767 すごい!!!
一気に雨っぽく見えるようになりましたw
乱数の件大変勉強になりました
もっと改良するとしたら、そのツイートのように不自然に見えるランダムさをなくすため振るいにかけるような工夫もしてみようと思います。
あと、もしよければGIFのやつのソースコードを貼ってもらえないでしょうか。よろしくお願いします
>>768 一応貼るけど自分はC言語あまり得意でない上に適当にササっと作ったのだからあんまり参考にはしないでほしい
https://ideone.com/FG3nNS system("cls")で画面更新してるけどチカチカさせずに滑らかに動かしたいならpdcursesとか使ったほうが良いと思う
あとLinuxだったらclsでは動かない
>>770 ありがとうございます!
初心者なので関数の使い方とか、あと自分がいかに無駄なコードを書いてたかとかがわかってとても参考になります
調べてみようと思います。ありがとうございました
constが外れるのにキャストせずに char *p = "abc"; とできることを定めている条文どこだっけ?
ちんぷんかんぷんなので教えて下さい
影があって見えない。 ていうか、試験中に撮影して書き込みか? 思い切ったカンニングだな。
(3)のとこ、この試験問題を作った教官がどういう教え方をしているのか聞かせてくれ
正解は *(const char **)&s なんだが解答群にねえだろ
>>781 C++11以降でもなさそうだし、回答群にあるsでいいでしょ。
タイミングがよすぎるし
>>772 と
>>774 は同一人物なのかな
簡単なテストがちんぷんかんぷんな人が規約を気にするとは思えない。
【速報】金券五百円分とすかいらーく優侍券をすぐもらえる @ スマホでたいむばんくを入手 A 会員登録を済ませる B マイページへ移動する C 招待コード→招待コードを入力する [Rirz Tu](スペース抜き) 今なら更に4日18時までの登録で2倍の600円の紹介金を入手 クオカードとすかいらーく優待券を両方ゲットできます。 数分で終えられるのでぜひお試し下さい。 >>786 複数スレに書き込みまくってID変えてレスも書き込みまくってる。
迷惑メール来るようになるっていう報告もあるからこれはスルーしたほうが良いと思う
ありとあらゆるスレに貼られてるbotだから気にしなくていいぞw
内容を変えてNG対策すり抜けをやろうとしているから、悪質だと考えた
サービスの提供もとに不正行為として通報して、そいつの招待コードとやらを無効にさせられないかな。
これってどこの企業がやってるんだろう 普通に5chでは荒らしに近い迷惑行為だしなんとかできないかな
しかし500円だの600円だのしょぼいな。 PayPayみたいにずっと二割引でたまに全額当たるぐらいやらなきゃ宣伝にならんだろう。
とてもいいアプリだからダウンロードして星つけてあげたらいいと思うよ
真って0でしたっけ?1でしたっけ?0以外でしたっけ?1以外でしたっけ?
0以外は真として扱われることが多いな。 0は明示的にfalseになると思う。 そのfalseの否定がtrue。
論理演算結果を整数化したら 偽が0 真は1 整数を論理評価したら 偽が0 で真はそれ以外
#define TRUE (1==1) #define FALSE (!TRUE) こんな事書いてたな 値がいくつなのかは気にしなかった
OR EAX,EAX JZ FALSE JNZ TRUE こんなんか?
!!a == TRUE ならセーフになると思われるー
論理演算では1が真なのに終了は1が異常終了なのはなぜですか? 1が正しく0が間違いというイメージなのですが
昔はintを返す習慣が多分にあったのでその習慣によるが、自分は異常終了は-1返してたな。
>>807 いや、boolが戻り値なら真を成功にすることがむしろ多いと思う。
「エラーを返す」関数の需要が多いということではないか。
正常というのは1つの状態しかないが 異常には色々な種類があるのでそれを区別するためにコードとして返したい というのと 2値しかない真偽をどう値に配分するか というのを同列に並べるとパニック。 C言語では別のものとして割り切る なぜC言語では偽を0に割り当てたのか?という問いの答えを求めているのならば… 俺は知らない
>>807 正常は 0でいいけど、異常はいろいろな状態の別を報告できるようにでは
ソフト会社に長年いて開発者からこの質問は初 OSインストールできませんなんてすごく高度なんだなって思った コマンドのテストでコマンドの戻り値ってあるんですがなんですか?
>>813 windowsの終了ステータスの確認の仕方とか忘れるしなあ。
言葉で出てくる結果しか見れないなんて普通だと思うわ。
0が偽なのにnoerrというイカれた慣習はどうして生まれたんだろうねぇ。
最初に誕生した OS、system/360 の JCLでも、正常は 0、警告が 4だったか 8だったかで、異常が 8だったか 16だったかだったな z/OSでも同じだろうけど 知らんけど
幸福な戻り値はどれも似たものだが、不幸な戻り値はいずれもそれぞれに不幸なものである。
if (error == 0) で違和感ないじゃん
0 informational 1 warning 2 error 3 severe 4 critical
返り値0でエラーなしはUNIXのコマンド終了ステータス以来の慣習かな。 「正常終了」は状態が1種類しかないけど、失敗は「どう失敗したか」で 複数の状態があるから、正常で0、他の値はエラーコードってのは便利でしょ。 論理演算子の結果で true false の1と0は、論理学の数値表現を プログラム言語にそのまま写しこんだからじゃないかと。 関数は一般にエラー状態を返り値で返す、と思っていれば 正常 == 返り値0 == false は違和感ないかと。 このルールから外れてるのは「失敗時にNULLを返す」タイプの関数で、 結構たくさん存在するのが困ったところだけど。
Cでは同一のもとして動かせてしまうが そもそもエラーコードとboolを同一視してる時点で論外なんだが
論理型を別に設けずに整数型で代用してしまおうというアイデアはBやCの言語仕様をコンパクトに 抑えるのに役立ったが、今となってはプリプロセッサマクロと同じくらいの悪しき遺産だなぁ。
C99以降であれば_Bool型を使えばいいのでは?
正常時1で異常時0を返す関数が混ざってたり 正常時ポインタで異常時ヌルポ返す関数があったり それらの関数の返り値を全部 if でチェックしててカオスだったことがあります
BOOLを返す関数が負数を返したかどうか調べにゃあかんやつとかな
ワインバーグの本にあったなあ。ドル紙幣はみんな同じ色、同じサイズで見分けがつきにくいけど、 それが常識だと思っている人は、一定の確率で間違えてしまうことも世界の法則で仕方のない ことだと思っているとか。
>>827 GetMessage()の悪口はいくら言ってもよいぞ
DWORDにしとけよ
>>826 カオスっていうかこれ普通じゃない?
標準ライブラリのラッパー書くとき互換性保つために0成功にするでしょ
で他のオレオレライブラリはboolという
戻り地がboolのときはtrueが成功 intのときは0が成功なんだよ
boolぐらいなにもインクルードしなくても使わせてくれぽよ
>>830 それのせいでPrelではシステムコールと同名の関数の返り値がいまいち統一取れてなかったりして、結局マニュアル見ながら個別に覚えざるを得なかったりする。
Perlはだいたいは1が成功でundefが失敗なんだけどね。(undefはCでのNULLみたいなもの。未定義を意味する。定義されてて値が0の時とは違うが、書き方によっては同じように扱えることもある)。
今C++にあるoptionalだっけ? あんな感じの有ってもいいな。かなりうざい感じになるから使わんか。
インクルードをURLで引っ張ってこれたら面白いのに。
コスパ最強の副業「動画編集」で稼ぐ方法【生ハム登場】
VIDEO 【最強の副業】動画編集で稼ぎ続ける人の条件【未来予想】
VIDEO 【おすすめ副業・在宅ワーク】「動画編集」は初心者でも時給1,500円狙えます。
VIDEO ;t=168s
【与沢翼】動画編集素人でも本気でやれば個人で月収1000万も夢ではないですよ。
実は動画ってすぐプロと同じクオリティで作れちゃうし月収20万はすぐですよ
VIDEO センスのいい映像を短時間で編集する方法
VIDEO >>837 /use/include ディレクトリをNFS マウントでもしとけ。
すみません、質問があります。 環境はlinuxです。 ある共有ライブラリlibA.soをロードするプログラムbがあります。 このプログラムbをlibA.so抜きでgccでビルドすることはできるでしょうか? もちろん実行時にはlibA.soは用意します。
>>841 リンクされる関数やグローバル変数が全て揃ってれば誤魔化し効くのではないかな。
シンボルだけ定義したsoファイルを用意するのが普通ではないかと
ビルド用のsoファイルを用意する、でいこうと思います。ありがとうございました!
スタブってやつね。 dlopen使うと基本そうなると思う。 もともと自動的なシンボル解決してる場合は無視できたかも。
たぶん、DLL import, export みたいな定義ファイルさえあれば、コンパイルできるだろ?
a) dll import キーワードつきのヘッダでコンパイル DLLを読み込みシンボル解決する .lib をリンク 実行時には dll 読み込みをやってくれる (無いと文句言う) b) 自前で DLL読み込んで GetProcAddress で関ポにセットして、 その関ポを呼び出すラップ関数を用意 自前ロードしてるので、実行時に無い時別の処理の記述が可能になるん
大学でc言語を学び始めました ポインタが意味不明でした 何がわからないのかわからない
現実世界にポインタと同じものを説明する概念がないから簡単な説明のしようがないんだよなぁ。住所録とか余計こんがらがるし。 素直に本を沢山読んでプログラムを組んで慣れるしか無い
アドレスは&つけてprintfした時に出てくるやつでしょ? 箱のラベルみたいなのだとかなんとか言われた気がする メモリは単純に容量? 別関数で計算した値をmain関数に持ってくる時にポインタを使えばreturnがいらないだとかコピーじゃなくて直接数値を変えるから処理が楽だとか書いてあるけど結局普通に代入するのに比べて利点がよくわからない
何かの容量と言ったときの「何か」がメモリです。 利点は基本的にないです。
みんな思い思いのモデルで遊んでるから、パパは箱モデル出しちゃうぞ
なんか分からない部分のコード示してもらわないと ここの有能な人たちもどう説明したらいいか分かんないから雑談始まったがw
1ビットが0か1かの二通りを表せる情報量。 1バイトは0〜255までの256通り(2の8乗)を表せる情報量で8ビットに等しい。 1バイトを複数並べたのがメモリーで、各バイトの位置がアドレス。
アドレスに型情報を加えて、先頭アドレスを起点として配列のようにアクセス可能にしたものがポインタ。 しかし、配列は実体を要求するが、ポインタは実体を要求しない。ヌルポインタは、何も指し示さないポインタ。
ポインタ配列ってやると実体のない配列になるのかなw
ポインタ配列? ポインタの配列 *array[] 配列のポインタ (*array)[]
“メモリ”って言葉がフラッシュメモリのような、 ストレージデバイスのイメージになってるのも 説明を難しくしてる要因かもしれないね。 メモリは記憶単位ごとに数字で番地が振られていて…と言っても、 「メモリってディレクトリ構造中のファイルとして記憶するんじゃないの?」 みたいな感じに、互いの言葉の意味がチグハグで。
RAMとROMの違いなんて今の時代説明しても分かる人の方が少ない気がする
>メモリは記憶単位ごとに数字で番地が振られていて キャッシュメモリ「せやろか?」
やっぱりコレを見せれば理解しやすいんでね?
>>872 磁気コアメモリと、右側はRAMACか?
磁気ドラムだよ ランダムアクセスでさえないのにメインメモリにしたとかいう
>>856 ポインタ=君と感覚を共有してる全く同性能の影分身だ。
君の価値が100万なら、影分身は1円で作れる。
ポインタのメリットは会社が君を働かせたい時、君を直接雇うと100万円かかるが、影分身を雇うと1円で済むわけだ。
影分身が働いてる間、君は家でエロゲでもしてればいい。
気をつけないといけないのは、仕事中、影分身の腕が切断されたら、エロゲやってる君の腕も切断されるし
影分身が死んだら君も死ぬ。
これ以上わかりやすい説明はないと思うが、どうよ?w
例えられても伝わらないとさらに混乱させるのが、ポインタと配列周辺の話
>>875 分身と言ってしまうとそっくりな実体がもう一つあるかのように思ってしまうのではないか?
やはり実体を指し示すものを連想させる何かにした方が良いのではないか?道標とか。
このように、どうわかりやすく書こうとしてもどっかに不都合が生じるのがポインタの説明 素直にコンピュータの仕組みを勉強するしかないんや・・・
ポインタはWindowsのショートカットみたいなもの。 これでもまだ誤解されそうね。
キャッシュは次回のアクセスを高速化するためにデータを一時的に保存しておくこと。 バッファはデータを受け止めるために、保存場所を確保するためのメモリー領域。
>>881 文脈による
汎用機だと二次キャッシュをバッファストレージなんて言ったりすることもあるし
>>875 本体がパンツ下ろしたら影分身も職場でパンツ下ろすんですね分かります
ポインタがよくわからないんだけど、普通にメモリアドレス==ポインタって認識なの? int i; int *p=&i; の時に変数iのポインタであるpっていういい方は正しいですか
メモリアドレスは格納されるけど メモリアドレス==ポインタっていうのは違う気がする nullだのvoidだのもあるし
iのポインタを格納してるポインタ変数p 値自体を問題にするときはアドレスだが、プログラム中で操作の対象となってる場合はポインタって感じだな。
>>886 ポインタはメモリアドレスと型もってて
メモリアドレスからのデータをその型として解釈する
なるほど、なんとなくわかったありがとう。混乱の原因はポインタっていう言葉がいろんな使われ方してるからだった。
こう書くとまた荒れそうだが、ポインターとはアドレスが入った変数である、というのは正しい。 NULLは0番地を特別扱いしてるだけだし、void *もあくまでアドレスだ。
>>887 nullはまだしもvoidは関係なくね?
荒れる要素なくない? メモリアドレスを保持する整数と型を組合せてあるだけだし void*はアドレス保持するだけの変数って意味じゃないの
void *p; p++ を許すのは GCC拡張だっけか
>>891 「正しい」とか書くと荒れる元にしかならん
(初心者のうちは)…「という理解でいい」ぐらいにしとき
>>891 NULLの件はそれ逆だろう。
実際の0番地を特別扱いにしているのではなく、「どこも指さない特殊なアドレス」を表記するために整数0を使用しているだけで、0番地が特別な訳ではないはず。まあ実際にメモリ割り当てで0番地を割り当てることはしないだろうけど。
void*も、型を指定しないポインタを表すのに使っている型の指定であり、アドレスというのはおかしい。
>>897 確かポインタ演算時は1バイト (char) 扱いだったかな?
void*なんていらなくね?char*でいいじゃん 構造のわからないものは「バイト列」って意識でしょ?
>>900 void *がないとmemcpyに引数を渡すとき面倒。
double * には double * だけを許し char * や strucut foo * を渡したらアカンと 要求される型を厳しくチェックしようとすると 「ポインタだったら実体の型は何でもいい」 という指示を char * に含ますわけにはいかない
汎用ポインタがchar*型になってたらコードレビューは絶対に通さないわ
汎用ポインタというかvoid型という概念そのものが嫌い。 全てを厳密にやれ。言語を作る時点でまず関数に戻り値を強制すべきだったんだ。 ポインタわからん軍の原因はvoid型とかいう曖昧なせいなのがあるせいなのも一理あろうて。
windowsにおいて setLocale(LC_ALL, "en_US.UTF-8"); が成功する環境と失敗する環境があるのですが何が原因かわかりません。。何かご存じの方いらっしゃらないでしょうか?
>>904 お前の好き嫌いなんてどうでもいいし、よくわからん時点ならvoid*なんて無視しとけばいいだけ
この手の人は何故か全部を一気に理解しようとするけど今どきの言語仕様でそれやったら終わらんよ
「俺の考える最強に分かりやすいポインタの説明」 ・・・無理
>>908 void君だろ
C言語なら俺に聞け 148
http://2chb.net/r/tech/1537347410/37 37 名前:デフォルトの名無しさん (ワッチョイ f94f-yqSl)[sage] 投稿日:2018/09/22(土) 01:42:06.64 ID:16ZpsTnK0
>>36 マジでIDE使え。
そして貼るときはlanguageをCにしとけ。シンタックスハイライトが変わるから。
で、どれが分からんの?
> enter
> find
> delete
> show_all
> delete_all
mainはこの際分からなくていい。
最初に理解しないといけないのは show_all だ。
ただし細かいことを言ってもキリがないが、
> void show_all(void)
なんだこれ?引数 void って初めて見たぞ。文法的にありなのかこれ?
さらに酷いのは show_all 内でグローバル変数 address を掴んでいること。
普通は void show_all(tag_address* ta) だよ。
そうじゃないと複数のリストがあったときに使い物にならないだろ。
マジな話、このソースのレベルの本なら捨てた方がいい。
俺は大学の教材がいいと思うぞ。
(読んでないが)リストならググったら東工大とか出てきた。
http://www.is.titech.ac.jp/compview/clang/chap11.html >>910 コメントありがとうございます。
8と10で成功する端末があることを確認しています。失敗する端末は今のところ10だけです。
そして
SetConsoleOutputCP(65001);
を使用することで失敗する端末でもUTF-8をコンソールに表示でき、一応目的は達成できました。
調べてみると、結局のところwindowsではsetlocaleで2バイト以上文字は設定できないとのことだったのですが、ではなぜ成功する端末があるのか……
と、古いシステムの保守なんかやったことねえやつがぬかすか
void show_all(); なんて書くやつ見かけたらなるべく距離を置く
>>918 の場合
C++なら問題ない
C言語だとちょっと不味い
おまえからも距離を置きたいぜ ここをどこだと思っている C++なら無問題などと言わねばわからぬ者がいるとでも思っているのか
とりあえず、シングルステートでも返り値をboolにする俺がやってきましたよ。
>>921 >>918 の意図が分かってない者がいるぞ
さあどうする?
大丈夫だよ ここを見ながらシステム作っている奴はいないから
Cはvoid省略すると可変長引数扱いになるんじゃなかったっけ? C++は省略してもvoidだけど
>>927 無指定でどうこう、というのは確か C89 までの話だったかと
C99 では C++ と同じく省略しても void と記憶しています
>>928 破壊的変更が行われた仕様が回避できるなら回避すべきだな
>>928 記憶違いでしょ。変わってないよ。違うと言うなら出典確認してから来てね。
http://kikakurui.com/x3/X3010-2003-01.html#93 > ...関数定義の一部でない関数宣言子の識別子並びが
> 空の場合,仮引数の個数及び型の情報がないことを指定する。
>>915 新しく作るプログラムでも引数なしならvoidにするよ。
まあこの頃Cで作ることそのものが減ったけどな。
>なんだこれ?引数 void って初めて見たぞ。文法的にありなのかこれ? こんな汚物が上から目線で何かもの言ってるかと思うと反吐が出る さっさと消えてほしい
DCL20-C. 引数を受け付けない関数の場合も必ず void を指定する
https://www.jpcert.or.jp/sc-rules/c-dcl20-c.html を見ると(かなり読み解きにくいんだけど)…
プロトタイプ宣言では
int func(void); ... 引数0個
int func(); ... 関数呼び出しでの引数の整合をチェックしない
関数定義では
int func(void) {...} ... 引数0個
int func() {...} ... 引数0個
って具合に func() の解釈が一貫していない、
だから引数0個の関数は同じ形になるようにvoidをつけましょう、
という話に思える。
この辺が議論の混乱を生んでるんじゃないかな。
ついでに関数定義の int func() {...} の形式は廃止予定とも出てる。
プロトタイプの方は廃止予定ではない、ってことかな。
そこでjpcertを持ち出すのは興醒めだ どっかの馬の骨が「こうすべき」と主張してるってだけな話は 現実のマシンの動きとそれ束縛しているiso/iec9899でどうなのかという話とは論点が違う
>>936 JPCERTを引用したのは「プロトタイプ宣言と関数定義とで
引数部が空の関数 func() の引数の解釈が違う」って話を
根拠つきで引き出すためでな。
>>927-930 あたりの流れを受けて。
規格の文章が並べて載ってるので都合が良いのだ(読みにくいけど)。
実際のところ、JPCERTのルールっていうか提案には
俺も全面的に賛成してるわけじゃない。むしろ強く反発する部分もあったり。
必要ねえじゃん iso/iec9899の条文を引用して その箇所がどのように解釈できると 自分の言葉で言えばいいのを 虎の威を借る形でサボる怠慢を 読まされる側は付き合ってらんねー
>>932 そうだね。関数ではないね。しかしCだと処理をまとめる方法が関数しかないから仕方がないね。
まあしかし getchar() みたいにプログラムとは無関係な所から取ってきた値を返すとか、バッファやstatic変数で外部からアクセスできない変数の内容を返すみたいな処理は必要だから引数なしも必要だ。 グローバル変数やハードウエアの初期化処理だけまとめて書きたいなんて時にも使える。
○○Initialize() 的な関数の存在に違和感ないんだが
クラスのメンバーの操作だとしても、だったらそのクラスのコンテキストを渡すのが正しいだろうとは思うけどね。 現実としてはまあ規模による。
プログラムの関数は数学の関数とは微妙に違うから仕方ない 仕方ないと思えない奴らが関数型言語を作った 兎に角Cでは本来の関数に制限するのは事実上不可能
functionって関数の他に機能って意味もあるけど、英語圏の人はどちらの意味で使ってるんだろうね?
>>944 多分語義をわざわざ意識していないと思われ
>>942 オブジェクト指向言語のクラスだとプロパティでゲッターやセッター作る事があるが、ゲッターは普通は引数なしだな。
で、そういう言語ではだいたいはメソッドの引数なしで ()にしとけばC言語での(void)と同じ意味になる。
機能という意味で言いたいときは、functionalityという単語もある。
ゲッターセッター自体が、本当にそれ要るのかって思うこと多いよ。 手元にインスタンス持ってるわけだしさ。
ゲッターセッターはインスタンス変数を隠蔽化することでインスタンス間の結合強度を下げるのが目的 なんでもなんでもインスタンス内部の構造に直接アクセスするとOOPの意味がない
いや、ゲッター使うんだったら隠蔽できてないじゃん。
昔ゲッターセッターってスレッドセーフにするための仕組みだと思ってた。 それくらいしか意味が思いつかなかった…
そうね、なんか前後に処理を入れるくらいの使い方はある。 でもそもそもその値を使う処理をそのクラスに持たせるのが隠蔽ということだね。
今の仕組み上での利点としては GetterSetter作ることで インターフェースに適合させれるようになる Cは知らん
Cのスレで言っても仕方ないが オブジェクト指向においてクラス外からフィールドに直接アクセスするのは禁じ手だぞ
getter/setterなんてうざいだけだぜ メンバ変数直でいいじゃん
>>954 そうそう、だからゲッターは駄目なんだよね。
C++でclassとstructのアクセス範囲が異なる理由がわかってない人が多すぎる。
>>955 お前には一生オブジェクト指向は無理だな
まあ、ゲッター使うのはバカ。 データとメソッドを集約しないのはオブジェクト指向ではない。 ゲッターとセッターしかないオブジェクトなんて構造体で充分。
たしかPythonだとgetterもsetterも推奨されてないんだっけ?
文字列クラスで文字数返すやつなんかはゲッターの一種だが、ああいうのは必用だよな。 文字数指定する事が出来るようにする場合もセッター必用だよな。
問題ないというよりも下手な設計をとりあえずカプセル化する時はラッパー被せて誤魔化すしかない
ラッパーって関数に対して被せるもんだろ? メンバー変数のラッパーってなんだよ
「メンバ書き換えたから更新よろしくな関数」の呼び出しで やっと内部状態が変更するようなしくみ?
>>960 ゲッターとセッターは使わないのが主流
とくにゲッターとか名前からしておっかねーだろ
>>966 え?でも値のセットや取得時に何か処理が必要なやつはゲッターやセッターではないの?
名前がそれっぽくなくて普通のメソッドだったとしても機能としてはそうなるよな。
>>968 だから、何故値を取得する必要があるのかと
値を取得する必要ガーとか馬鹿なのか? 主要言語の標準ライブラリにGetterを含まないクラスとかまず無いぞ
>>970 引数のvoid見たこともないのによくそんなこと言えるな…
>>969 例えばファイルデスクリプタのようなものもそのデスクリプタによって識別されるファイルに関する情報の読み書きをするオブジェクトと言えるが、それ使ってファイルのバイト数を取得するとかデータを読み書きするとか、普通にやるよね。
>>968 そのオブジェクトの中で密接にデータと関連する処理だったらゲッターは使わんでしょう。this->hogeを直接使うだけ。
あとたぶんあなたの場合はセッターゲッターの神髄を知らんと思う。単に構造体のメンバーにアクセスするだけのメソッドをイメージしてもらえれば。
>>968 ゲッターはあぶない
同一インスタンス内なら余計なことしなくても直接アクセスできる セッターゲッターは他のインスタンスの変数にアクセスするための手段 オブジェクト間のメッセージパッシングにセッターやゲッターを利用する
>>974 あー。それでもリードオンリーにしたい時に言語にその機能がないならゲッターだけ作るよね。
Kotlinの場合はvalで済んじゃってしかも自動でゲッター作られてるけど。
で、真髄って何?
>>978 リードオンリーとか言わず、読ませなきゃいいじゃん
>>979 上で書いた文字列クラスの場合の文字数とかファイルのバイト数とか、外部から読めないとまずいものがあると思うんだが。
>>980 たとえばstd::stringのメソッドでgetってついてるのget_allocatorとgetlineくらいだよね。setなんてないし。
ゲッター感のあるやつ無くない?要らないのでは?
メンバー変数はreadonlyなどの属性ではなくてprivateアクセス権限を設定して他オブジェクトから隠蔽するのが一般的
なんでC++とかいう後付けのオブジェクト指向もどき言語で延々と語ってるんだろうか…
>>983 そりゃもう、javaについで保守的だから。
他の意識高い感じの言語だとゲッターセッターなんて発想はありえないでしょ。
>>984 保守的?単なる継ぎ接ぎの欠陥言語だぞ
C#だとプロパティで隠蔽されてるが結局はGetter/Setterだな
>>985 つまり、Cの構造体アクセスは実質ゲッターセッターだという主張か?
>>987 引数void馬鹿を馬鹿にしてんだよ。わからんか?
>>981 うーん。C++のクラスで喩えられてもすがわからんなあ。C++この頃全然やってないし。
昔ちょっとC++Builder使ったことあるがDelphiの延長線上の使い方しかしなかったし。
とりあえずJavaで言うとそれは何にあたるんだ?
Kotlinでもいいぞ。
すが、じゃねえ、すぐだ。 スマホだと間違いが変になるな。
>>992 >>2-3 あたりの
「次スレを作るときは…」の説明を書き足さなくて良いのかしら?
自分、その辺の正しい立て方を知らず下手に書き加えられないので指摘だけ。
IDを非表示にする場合 !extend:none::1000:512 IDを表示し、強制コテハンは表示しない(5ch標準設定と同じ) !extend:checked::1000:512 IDを表示し、IPアドレスを表示 !extend:checked:vvvv:1000:512 IDを表示し、強制コテハンを表示 (レスの名前欄に「ワッチョイ」「スプー」「ササクッテロ 」などのニックネームがつく) !extend:checked:vvvvv:1000:512 ← 今はこれ IDを表示し、IPアドレスと強制コテハンを表示 !extend:checked:vvvvvv:1000:512 RONIN使えばまた表示を消せるので、強制とは言いがたいが
ああワッチョイ消してる奴ってRONIN使ってるのか 知らなかったな
>>995 RONIN 餅ですがワッチョイの消し方がわからないのです、消すつもりもないのですが…
名前欄に!slip:verboseじゃないの? コテハンとかはどうなるかまでは知らないけど
>>945 そんなことはどうでもいい
C99ではどうたらを早く説明しろ
逃 げ ん な こ ら !
-curl lud20241221021046ncaこのスレへの固定リンク: http://5chb.net/r/tech/1554171817/ ヒント: 5chスレのurlに http ://xxxx.5chb .net/xxxx のようにb を入れるだけでここでスレ保存、閲覧できます。TOPへ TOPへ
全掲示板一覧 この掲示板へ 人気スレ |
Youtube 動画
>50
>100
>200
>300
>500
>1000枚
新着画像 ↓「C言語なら俺に聞け 151 YouTube動画>5本 ->画像>9枚 」 を見た人も見ています:・C言語なら俺に聞け 150 ・C言語なら俺に聞け 140 ・【レーダー照射】韓国「日本の英語の発音が流暢でないから何言ってるのか聞き取れなかった」★15 ・【籠池佳茂】私の妹の長女は菅野完から「言うことを聞かなければレイプする。セックスさせろ」と迫られて教育勅語をやめました ・【レーダー照射】韓国「日本の英語の発音が流暢でないから何言ってるのか聞き取れなかった」★12 ・【レーダー照射】韓国「日本の英語の発音が流暢でないから何言ってるのか聞き取れなかった」★10 ・【悲報】「オデッセイ」←正直言って糞JAPはこのレヴェルの単語の意味も知らない。周りにいるやつに聞いてみ?知らないから ・俺「プロレス初めて見たけど面白いね〜」 友達「プロレスラー20名言ってみ、言えないニワカのくせに語んなや」 俺「」 ・【森友学園】辻元清美氏「3つの疑惑」報道で民進党が産経新聞に抗議文「流言飛語を疑惑扱い」「首相夫人とは事柄の本質異なる」★35 [無断転載禁止] ・敵「プログラミングはやりたいことを見つけてからやれ」俺「よし見つけたぞ!C言語始めてみよう!」 ・民進党・階猛「国民の多くは読売新聞の内容を容易には知り得ないから首相の発言は憲法違反」「憲法改正を語る資格はない」 [無断転載禁止] ・【森友学園】辻元清美氏「3つの疑惑」報道で民進党が産経新聞に抗議文「流言飛語を疑惑扱い」「首相夫人とは事柄の本質異なる」★26 [無断転載禁止] ・【レーダー照射】韓国「日本の英語の発音が流暢でないから何言ってるのか聞き取れなかった」★2 ・公には言えない俺のわだかまりを聞いてくれ ・【レーダー照射】韓国「日本の英語の発音が流暢でないから何言ってるのか聞き取れなかった」★3 ・警察官の証言だけで有罪にされた俺が日本の司法の問題点について語るスレ ・母親「言うこと聞かないなら置いてくよ!」幼女「やだあああ!!」俺「おっ!」 ・山崎拓「新聞を読む力と言うのは今の若い人には乏しいように思える。国語力が弱いんじゃないか」 ネット「情弱の典型」 ・「慰安婦問題は心の問題。謝罪の言葉が一つでもあれば解決できる」韓国国会議長が朝日新聞に語る ・パクりの語源って「朴李(パク・リ)」って言う朝鮮人の泥棒が語源ってネトウヨから聞いたけどマジ? ・日本語って差別主義者が作った言語だよな。例えば『日本』。これを音声で伝えると、耳の聞こえない障がい者には理解できない最低な言語 [無断転載禁止] ・外国語とか言ってるけど方言みたいなもんだろ?集中して見聞きすれば理解余裕だって [無断転載禁止] ・動画マニュアルを“多言語”に自動翻訳! 外国人労働者の育成コストも減るAIサービスの秘密を聞いた ・梅沢富美男さん、生放送で差別用語を連発するも開き直る。「俺が言われた言葉なんだよ?言われた俺はどうすんだよ!」 ・自分が発音出来ない言語は聞き取れないは嘘! ・【中高年限定】俺の話を聞け!1ボヤキ【寂しき独り言】 ・【YouTube】「どうしたら勇気を持って発言できるのか」#ウーマン村本大輔 さんと東京新聞の#望月衣塑子記者 が体験を語る [鉄チーズ烏★] ・【政治】立民は500円払えば俺たちの言うことも聞いてくれるらしい ・千葉科学大学客員教授(獣医学)「獣医学部の新設など言語道断 むしろ今の16校から4校に集約すべき」 [無断転載禁止]©2ch.net ・ドラ100シャドーイングしたら英語アニメが聞き取れるようになった ・俺が死ぬほど聞いてた日本語ラップの名曲BEST10を発表するぞ! ・民進党・小西洋之、朝日新聞が抗議した百田発言取り上げて安倍首相を批判「安倍総理は言語道断の放送法違反を犯していた」 ・【研究/言語】英語のL(Light)とR(Right)、聞き分け能力は瞳孔反応で分かる 黒目の大きさが無意識の認知状態を反映★2 [しじみ★] ・「善意で聞いた」 茂木外相が「日本語分かっていただけましたか」発言を釈明 [クロ★] ・宇部が自分にしか理解できない意味不明な幻覚妄想言語障害ヘリクツをほざいたらあげるスレ11 [無断転載禁止] ・ネパール、日本の外国人奴隷問題が影響か人気言語1位が韓国語になる ・親が「うちは一族高卒だから進学させない」とか言って俺に受験させてくれなかったのに弟の大学受験を許したんだけど ・竹原ピストル「よーそこの若えの俺の言う事を聞いてくれ」←わかる ・【朝日新聞】 悪質をデマで事実を歪曲し世論操作するとは、言語道断 ・【政治/読売】“ナベツネ”こと渡辺恒雄氏、言語不明瞭…巨人激励会で挨拶も取材陣聞き取れず 今年5月で89歳 ・今から始める? 就職に有利なお勧めのプログラミング言語16選 [無断転載禁止] ・言語ごとに文法(語順)が違うのって何でなんだ?単語はともかく、語順って時代が経っても変わらない気がするんだが ・これからめちゃくちゃ気持ち悪い奴の言うことを聞かないといけない ・聞くのも怖いけど中西卒紺で勝田がどんな顔で何言ったのかちょっと気になる ・ベイブレードを始めてしまった俺になにか一言かけるスレ ・世界から隔絶したマイナー言語しか扱えない国民が大多数を占めると言うのは為政者にとって都合の良いことだな… ・イチロー(44) に何かひとつ言う事聞かせられるなら何してもらいたい? ・【プログラミング】止まらないC言語の下落 - 12月言語ランキング [無断転載禁止] ・キャンプの事なら俺に聞け! [無断転載禁止] ・「ネット流行語アワード2018」発表 今年話題になった言葉はこれだ! ・【伝われ】好きな人に言いたい聞きたい事201 ・【日本語】言ってはいけない!「日本人の3分の1は日本語が読めない」★3 ・【読売新聞/社説】徴用工問題 文氏は判決を言い訳にするな[1/11] ・【伝われ】好きな人に言いたい聞きたい事211 ・俺の独り言を聞いててくれ。 ・いやらしい意味はないのにいやらしく聞こえる言葉V ・【東北】東北以北にしかこの気持ちは伝わらない…のか? 標準語にできない謎の方言「うるかす」とは★2 [七波羅探題★] ・妹の部屋からカローシって書いたメモが出てきてさ。何これって聞いたら「知らないの?本当にバカだな」と言われた ・【芸能】月亭方正が語る『笑ってはいけない』の魅力 蝶野の“ビンタ封印”発言に本音 ・下着泥棒から執行猶予判決、職を失い故郷で農家になることを決意した俺、親父の「帰ってくるんじゃねえ!」って一言に希望を失う・・・ ・親に固定電話解約しろって言ってるのに言うこと聞かないんだけど ・【IT】Swiftがトップ10入り、Pythonは3位から4位へ--10月TIOBEの人気言語ランキング ・【話題】張本勲氏、喝!の哲学を語る「いいか悪いか言わないと評論家にはならない」 ・今さら聞けない競馬専門用語 ・桂文珍の落語聞き取りにくいと思ったけどあれ落語界で上手な扱いになってるの? ・いやらしい意味はないのに、いやらしく聞こえる言葉 ©bbspink.com
12:10:46 up 8 days, 22:34, 0 users, load average: 7.85, 8.78, 8.83
in 2.5802359580994 sec
@0.051482915878296@0b7 on 122102