C言語なら俺に聞け 148
■ このスレッドは過去ログ倉庫に格納されています
「私の書いたプログラムは絶対にメモリーリークは発生しません。バグもありません。試験は不要です」
こういうこと、一度は言ってみたい たったこれだけでリークするコードを仕込んだことになる。
もちろん仕様書通りの動作だけど、ノウハウ集を見るまえに気づくのはわりと難しいかもね。
p = realloc(p, 1 * sizeof(int)); >>772
しかし君はアホだから丁度マッチした適切なレスではないかな。 >>775
そういった意味で realloc は若干まどろっこしいね。
失敗時は元と同じポインタを返して errno を設定してくれる方が変数のやりくりが簡単になりそう。 >>775
それでリークするかどうかはその他の部分がどう書かれているかによるのでは? 実際はmalloc失敗した時点でリークもへったくれもないと思うよ ああ。失敗した時か。確かにリークするな。
そういう時はもう処理続行不能って事にしてexit()させてる。 >>778
realloc() が 0 を返すと p の持っていた値は失われ、free() できなくなる ptr = malloc()
p = ptr
p = realloc(p, ...) >>780
スレッドでの処理だとそのスレッドだけ終了させればよかったりするから、きれいに解放できないと具合が悪いな。
exit していいケースなら exit がいいと思う。 内部でメモリ確保しまくるライブラリを使う仕事に当たっちまったら、思いっきり痛い目に会えると思うよ >>715
俺は書かないと言ったろ。理由は>>705参照。
そして俺は最初に解法も示してる。>>690参照。
つっても理解出来てないようだから、もう少し(非技術的な)解説をしよう。
現状、俺以外の他全員誰も褒めてないんだから、この際理由を『詳しくない』俺にわざわざ求める必要がないだろ。
しかし、何故か俺に意見を書かせようとする輩が多いだろ。お前も含めて。
それがアフィカスじみてて、結果的にスレを潰すから、俺はそれには乗らない、と言ってるんだよ。
見れば分かるとおり、スレの流れが異常だろ。
俺が何度もこのメタ議論を出している理由は、お前らゆとりが全くこの辺について無知だからだ。
お前らゆとりは、オンラインコミュニティは潰していいものだと思っている。
見方が本当に刹那的で、自分の質問に対しての答えが得られれば後はどうなってもいいと思っている。
(ただ乗り出来るし、勝手に発生するものだと思っている)
実際は、オンラインコミュニティだって、成熟するには時間も労力もかかる。
そこがどんなに(お前にとって)糞であれ、住めば都だから住人が居るわけで、そんなに簡単に潰していいものではないんだ。
ゆとりが老害老害と連呼しながらも2chにへばりついているのも、ちょっと考えればおかしいと気づけるだろ。
2chは古いし、年齢層は高い。これは事実で、実際、老害年齢層の存在確率は他のコミュニティよりも高い。
しかし、結局の所、ゆとり流では「既読疲れ」みたいなコミュニティしか形成出来なかったんだよ。これも事実だ。
だからお前らがここに文句を言いつつもへばりついているわけでさ。
それなのに、ゆとり流をここに持ち込もう、というのは全くの筋違いだ。それは2chを破壊するから止めろと言っている。
ゆとりには長期的な視野がない。2chに色々問題があるのも事実だけど、ゆとりに長期的視野と運営能力があれば、
今現在の20代は全員ゆとりなんだし、人数は揃っているのだから、
「ゆとりチャンネル」(通称ゆとりちゃん)が出来ても全くおかしくない状況だろ。
それが出来ないって事は、お前らゆとりにもかなり問題がある、ってことでさ。それは自覚した方がいい。 とはいえ、2chの問題点が目に付くのは理解出来る。
ただ、それに関して「何故そうなっているのかを理解出来ないのに文句を言っている」のが、
全く使えない意識高い系新入社員と同じ事になってる事にも気づいた方がいい。
お前らは完全に空回りしているんだよ。
ハロワも同じだろ。「何故世界中の誰も20年間それを修正しなかったのか」を理解出来ない癖に、
「俺のハロワ、凄いだろ」なんて言っちゃう辺りが痛い。
ただ、それは若さの特権だから、本当にそう思うのなら主張すればいいし、
ゴミなのを誰も褒めないんだから、ここのコミュニティもまだ正常、ってわけだ。
それで、話を戻すと、ゆとり流の無知と横暴は2chを潰すから止めろ、と言っている。
とはいえ、おそらくゆとりには悪気はない。これが話が通じない根本の原因だ。
しかし、2chにはゆとりを排除するシステム自体がなく、へばりつかれたらどうしようもない。
だから俺はゆとりを教育してやろうとしているわけでさ。2chに合う奴だけが2chに来ればいいのであってね。
笑顔で人を殺しても、殺人は殺人なんだよ。ゆとりはこれを理解出来てない。
同様に、どんなに上手に敬語を使っても、スレを毀損しているようでは駄目なんだよ。
ゆとりは乗っ取り行為が酷すぎる。しかもそれを自覚出来てないのが最悪。 お怒りは理解しますけど、長い。もっと簡潔に書こうよ >>787
文句があるのなら、異常な流れになる前に、お前が何とかして終わらせておけ。
それも出来ず、やろうともせずに文句だけ言ってるのだから、お前も相当のゴミだぞ。 >>776
>>775だけを見て同じ方向を向く人たちには言われたくないなw >>788
匿名掲示板なんて、誰が何書いても咎めようがないし
そういうことで腹を立てても何も得しないと思うけど
もっと大人になろうよ >>790
効果はあるんだよ。だから書いてる。
正確に言えば、効果がある奴には効果がある、だが。
はっきり言えば、君の考え方もズレてるんだよ。
コミュニティは、オンラインであれオフラインであれ、存続する為には新人を受け入れるしかないんだよ。
だから、ゆとり世代以降を全員閉め出す、というのもまた間違いだし、
後10-15年後にはゆとりが社会の主力になるんだから、
それまでに駄目なところを鍛え直すのは上の世代の責任でもあるんだよ。
(君の考えに関係なく、俺達はゆとり世代に未来を託すしかない)
だから俺は俺なりの方法でやってる。それで成果も多少は出てる。
お前は何もしようともしてないのに文句だけ言ってるクズだよ。
ネットだから何をやってもいい、ではないんだよ。
同様に、ネットだから何もやらなくてもいい、でもない。
ネットだから咎めようがない、でもない。
まあ君には通じないとも思うけど。 有益なことなら読んでいるが
長い文章書かれても、大概の奴は読まないだろ
読まれれば効果が有るかもしれないが、
読み飛ばされても文句は言えない事は理解しないと >>793
> 読み飛ばされても文句は言えない事は理解しないと
理解してるぞ。というか、当たり前だろ。お前はアホなのか?
まあお前も理解出来てないのだろうが、なんだかんだでみんな読んでるんだよ。
そのうち分かるようになるよ。
それ以前に、2chの『長文』ごときで無理な奴はプログラマは無理だし。 たまに上から目線で長文書くバカいるけど誰も読まないんだよな
何故かって冗長なだけで大した事書いてないから 中身のある、読む価値のあるレスなら長文でもちゃんと読むが、ID:+6TFZypL0のは斜め読みしてめんどくさいだけのやつダナーと思いながら適当に読み飛ばしてる。 >>795
そういうことにしたいのはお前が馬鹿だから。
実際は、賢い奴ほど読んでる。
正確には、賢くなる過程で大量のドキュメントを読む必要があり、結果、
賢くなった奴はおしなべて読む速度が速く、読むことに関してコストがかからないからだが。
そして、俺の意図は馬鹿にはどうせ伝わらないから、俺もそれでいいんだよ。
長文ガー、なんて奴は最初から相手にしてない。
三行で、一行で、というのもまた自由だが、
現代プログラマにドキュメントの読み込み能力がかなり必要なのも事実だし、
これは今後さらに拍車がかるのも目に見えているから、
2chの長文に手こずる程度ならマジで国語からやり直した方がいいぞ。 >>797
国語の能力に関係なく、攻撃的で、感情的で、実のない部分の比率が高い文章は誰にとっても読みにくいと思うぞ。
汚いコードを読みなれてそういうのを読むのが上手くなったからって、自分のアウトプットするコードは論理的かつ明瞭でキレイでありたいと思わない? >>798
何が言いたいのか分からん。
その君の文章が「論理的かつ明瞭でキレイ」だとでも思っているのか?
俺は俺なりの方法で対処してる。
読むかどうかは当然読み手側が決める。それでいいという前提で書いている。
君がもっと上手く対処出来るというのなら、君がやればいいだけ。
おかしな流れにならなければ、俺がわざわざ時間をかけて長文を投下することもない。
だから、君が見事に、アホ共を捌き、流れが正常化していれば、俺が出張ることもない。
君が俺にこの手の文を投下させたくないのなら、君が実力を見せればいいだけだ。
やってから言えよ。 長文連投よりはアホがアホなこと書いてる方がマシだな。 5ちゃんで上から目線で長文書く奴の特徴は驚く程共通してるんだよな
例外無く論理的思考が欠如しているから要点をまとめる事も出来ないんだよ >>801
馬鹿こそそういうことにしたがるのだが、
実際、必要な文章量は、認識/知識のギャップに比例するんだよ。
実例を挙げると、>>653,679、ゴミだね、でしかない。
賢い(知識のある)奴にはこれで十分だし、
無理な奴にはグダグダ説明が必要なだけ。
そして俺はお前らがこの件(メタ議論)については無知だと見てグダグダ説明してるだけ。
そもそもお前らが賢ければこんな事にはならないし。
ただ、そういう、「この場合にはこれ」みたいな定型的な屁理屈返しはマジでゆとりに多い。
そういうのも止めた方がいいと思うぞ。誰の為にもならない。
俺も、何度もその返しは見てきた。
それで、誰も俺みたいな返しをしてこなかったから、
お前らゆとりが調子こいて「これは使える」と勘違いしているのだろうけど、
それは単に見捨てられてるだけだぞ。理解出来てないのだろうが。 >>799
>>>798
>その君の文章が「論理的かつ明瞭でキレイ」だとでも思っているのか?
個人的には >>798 は読みやすいんだが、ID:Av8doxl90 は非常に読みにくい
たとえば >>797 は文脈・論理の線が、不適切な日本語を使用しているせいで滅茶苦茶だ
>>797
>実際は、賢い奴ほど読んでる。…@
>正確には、〜コストがかからないからだが。…A
この「正確には」が、読み手を混乱させるミスリード語。
「正確には」と書く以上、すでに述べた@と同格言い直し内容の後続があるかと期待すると、裏切られて、@の理由を示すAが来る。
>そして、〜伝わらないから、俺もそれでいいんだよ。
「そして」が意味不明、何と何が「そして」で続くのかさっぱりわからない。
「そして」を使うのなら、
「俺の文が、馬鹿には読むコストのかかる文章であったとしても」→「馬鹿にはどうせ俺の意図伝わらないから」→「俺はそれでもいい」…B
と、A部分のキーワード「コスト」という単語を使うことによって、AとBが意味の上でつながっていることを明示するべきだ
Bの冒頭を省くから「そして」が宙に浮く
>>799
>おかしな流れにならなければ、俺がわざわざ時間をかけて長文を投下することもない。
上で示したように、君の文章は「おかしな流れ」そのものといっていい
スレが「おかしな流れ」であるとき、それを正すのに「おかしな流れ」の文章が使えるとでも思っているのか? >>801
>上から目線で長文書く奴の特徴
>論理的思考が欠如している
感情にまかせて思いついた単語を羅列するあまり、
前半と後半の意味の整合性がとれていなかったり、前半と後半をつなぐ接続詞が不適切であったり、で、
はっきりいって脈絡がない
書いている本人はテンポ良く文章を量産できる「頭のいい自分」に酔いしれているのだろうが、
実際には量産されているのはポンコツ文 長文をゆっくり書いていられるゆとりのある人はいいなあ ポンコツかどうかはコード書かせれば分かるだろ。
この世界では他がポンコツでもコードが書ければ正義だ。 >>802
すまん。俺には知識もないし賢くもないので
もしもあなたさえ良ければ>>653のゴミな点を指摘してもらえると嬉しいな。 >>806
いくらコードが書けても設計通りに書けないなら駄目じゃん >>807
hello worldの存在意義は、
その言語に初めて触れる人に、
言語の規格にきちんと準拠して、
最小限の記述で、
きちんと動作する、
何かのプログラムを見せることだよ。
どんな設計スタイルがいいとか教えることじゃない。 hello, worldって
コンパイラをインストールした後
動作確認する為のテスト用だと思ってた ゲーム機ハックした人が最初に実行した自作アプリがhello worldだったとかなんとか。 >>808
設計通りに書けない奴はコードが書ける奴とは言わんだろ。 >>809-810
どっちも正しい。
>>811
GBAハックした時は点を一個表示するのが最初だった。
Hello Worldは二番目。 adjtimeって何秒まで調整できるの? 2145秒? Linuxというかglibcならmanページに書いてあるよ。 make worldでX立ち上がったときは
感動したものだ それで思い出した
プロジェクトでのmakefile、作成が終わった時に
バナー文字で「make end!」って表示するんだけど
ある人のだけは「big cock!」に書き換えてたっけ
ここには関係者いないよね? C言語だから、次世代言語(w)よりもコード出るかと思ったら、出ないのな。 どうでもいいけど
「w」という名前の言語があるのかと思った。割と本気で調べてしまったw 病気の話を持ち出すのは、そういう体験が豊富にあるからだろう >>825
人物と診療科を等値比較とかおまえstd::logic_errorだな Cでfloat型が表す最小の正の数値を求めるプログラム書いてて、
とりあえず1.175494e-38に近づけるように書いてみてるんだが
printfで値表示させながらやってみると1.175494e-38以下も表示されるのなんで?
環境はgcc5.5.0_1
とりあえず最小判定は初期値1.2e-38を0.000001e-38ずつ減らしていって、
1.175494e-38を抜けるとバカな数字が出てくると仮定してif(a / (b - c) != 1)で判定してる
int main(){
float a = 1.2e-38, b;
float c = 0.000001e-38;
while(1){
b = a;
a -= c;
printf("a=%.6e b=%.6e\n", a, b);
if(a < 0 || b < 0) break;
if((a / (b - c) != 1.0)) break;
}
printf("a=%.8e b=%.8e\n", a, b);
if(b < 1.175494e-38) printf("b is not min value\n");
} >>827
精神科医のタイポの指摘しかできなくて悔しいね w >>829
あ、おまえ間違えたの? アホとヴァカしかやらない間違いだなw >>828
なんかいろいろ勘違いしてないか
>1.175494e-38を抜けるとバカな数字が出てくると仮定して
この仮定がはずれてるから無限ループしてんじゃん >>833
int型だとオーバーフローすると馬鹿な数字がでてくるからそう仮定したんだが違うのか
率直に聞くんだけど、この場合どうすればいいの? >>834
バカな数字とかいい加減な理解をしないで、ちゃんとした仕様を調べてみなよ。例えばwikipedia辺りで算術オーバーフローの項目見て全部読んで、分からない語とか関連する語もちゃんと調べるとか。 >>833
>>835
無限ループはしないけどどんどん値は減っていく。
理由わかるの?828じゃないけど俺も知りたい。 >>837
int型で似たようなこと(最大の正の数値を求める)やろうとしたら、バカみたいな数字が出たってだけだよ >>828
非正規化数(denormal)でぐぐれ >>843
意味のわからん解釈で勝ち誇るとか低能の定番乙 w >>845
意味わからんのか
よほど高力価のトランキライザーを打たれているようだな
もう末期でオピオイドとかか?
お大事に >>828ですが、参考書やらをみてアンダーフロー・正規化についてしっかり理解したところ、解決しました。
要は、float型のビット表現の仮数部が 0.(仮数部) ではなく 1.(仮数部) で表現されてるから、
その意味では
0|00000001|00000000000000000000000
が最小の正数になるけど、仮数部を 0.(仮数部) と表現しても計算できないことはないから、
0|00000000|10000000000000000000000
もちゃんと表示される、ということだけど、
これ以降ずっと計算していくといずれ
0|00000000|00000000000000000000000
となるから、150回目くらいでアンダーフローが起こる、ということらしい。
>>835と>>842ありがとうございました。 >>847
>>845
アホとヴァカとしか言えなくて悔しいね w >>849
そうか、847にアホとヴァカって書いてあるのか
実際には、そう言ってるのはおまえだけなんだが
確かに悔しそうに勝ち誇っているシュールな姿だねw >>850
> そうか、847にアホとヴァカって書いてあるのか
> 実際には、そう言ってるのはおまえだけなんだが
ヴァカで検索
>>831 > あ、おまえ間違えたの? アホとヴァカしかやらない間違いだなw
>>840 > アホw ヴァカwww
>>843 > アホとヴァカを認めやがったw
849-850 は指摘なので省略
> 自分にお前だけとかかなりシュールな姿だねw C言語でLinuxのdmesgやffmpegのログのような着色された分かり易いログ出力ができるライブラリってありますか?
[YYYY-MM-DD hh:mm:ss.ss] INFO: creating some file...
のような形式がいいんですけど、Cだと自作するしかないですかね? >>854
標準ライブラリにはない
git漁ればあるはず
でもそのぐらいなら自分でチョロっと書けば終わる 色だけだったら制御コード挟むだけでかなり直接的な操作だから、ライブラリ要らんと思うよ >>851
ヴァカと書いてあるのを血眼で探したのか
ご苦労だったな
で、誰か「自分にお前だけ(ry」とかテレパシーで話しかけてきたのか
なるほど精神科の医者じゃなく患者だな
精神分裂病の陽性症状で幻聴がひどいようだな >>854
サンプル書いてやったぞ
#include <stdio.h>
#include <time.h>
#define D(fmt, ...) \
do { \
struct timespec _ts_; \
struct tm _tm_; \
char _tt_[128] = {0}; \
clock_gettime(CLOCK_REALTIME, &_ts_); \
localtime_r(&_ts_.tv_sec, &_tm_); \
strftime(_tt_, 128, "%H:%M:%S", &_tm_); \
fprintf(stdout, "\033[33m%s.%lu %s:%d %s " fmt "\033[0m\n", \
_tt_, _ts_.tv_nsec, __FILE__, __LINE__, __func__, ##__VA_ARGS__); \
} while (0); 末尾のセミコロンがなければ意味あるけど、
セミコロンのせいで無意味になってるね。 カラーコードをハードコーディングかぁ
やりますねぇ・・・ >>859
ありがとうございます!
一点,おこがましい指摘なのですがfprintfの出力先はstderrのほうがいいのではないかと思います。
ログ出力はコマンドの出力とは別個にするべきなので。 >>862
例えば改行を\x0aで固定するのは良くない方法であり、\nにすべきですが(これだとWindows向けにビルドしてやれば\0x0d\0x0aが出力されるようになる)
着色に関するエスエープシーケンスを固定するのは別に大丈夫だと思います。
ECMA-48/8.3.117などで標準化されてますし。 >>865
ああ
「\e[33m」という記法それ自体ではなく
「33」という文字列を,例えばYELLOWマクロにする,というような意味だったんですね。
まあ確かにそうかも知れないです。 >>867
説明のための例だからそういう定義が分かりやすいとして、
>>866
こういうのを定義するときは、手段じゃなくて目的で定義する方がいいんじゃないかな。
ソース位置の強調をするために STYLE_LINE、タイムスタンプを強調するために STYLE_TIME、プロセスIDを強調するために STYLE_PID、みたいな。
それらを定義するときに YELLOW とか RED とか使う感じ。
#define STYLE_LINE(FMT) (ANSI_COLOR_YELLOW FMT ANSI_COLOR_RESET)
みたいにして、
fprintf(stdout, STYLE_TIME("%s.%lu") " " STYLE_LINE("%s:%d") " " STYLE_MSG(fmt) "¥n",
とか。 >>861
;はミスだわ
>>863
サンプルなのでお好きに
>>868
好みかもしれんが、一行の中で色変えるとか見づらくないか?
そのフォーマットではファイル出力したくなくなるし
俺が色使うなら #define D(type, fmt, ...) でタイプ指定して
fprintf(stdout, COLOR(type) ... COLOR_END "\n",
とかで色変えるぐらいかな >>869
例だから派手にしたけど、言いたいのは目的にちなんだ定義名にした方がいいってこと。
ログレベル毎に色を変えるなら、STYLE_ERROR、STYLE_WARN、STYLE_INFO とかさ。 正論と同じであまり振りかざされても実務では面倒なだけ
>>868とか正直ウザって思うわ ■ このスレッドは過去ログ倉庫に格納されています