C言語なら俺に聞け 148
■ このスレッドは過去ログ倉庫に格納されています
>>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とか正直ウザって思うわ ていうかログのフォーマットってCでは標準化されていないのね、SUS含め。
Javaのlog4jやPythonのloggerみたいなものがあれば 一番嬉しいんだけどね C初心者です、よろしくお願いします
ubuntuのvimでしこしこ書いてgccでコンパイルしています
CでIDEを使ってみたいのですがオススメありましたら教えてください
仕事ではJavaでEclipseを使ってるのですがCで使ってみたらいまいちピンと来ませんでした
やはり皆さんVisualStadioとかVSCodeあたりでしょうか? >>874
ないけどUNIXで昔からsyslog使われてた。というかそれがあったせいで他のログ出力ライブラリが広まらなかったのかも知れない。 ログ出力も奥が深いよな。
大量かつ高速が条件だとなかなか悩む syslogは日付がISOに従ってないのがちょっと嫌だな。
[YYYY-MM-DDThh-mm-ss,ssZ] LOGLEVEL: some messages.
こんな感じがいい >>878
大量⇒高速に処理が必要だから、その条件は大体セットだろ
それにプログラムが異常終了してもログが欠落しないとかの条件がつくと難易度が更に上がる うーん。素人考えなんだけどfprintf()関数を呼び出したり,その中で__FILE__マクロ変数を展開したりするのって
そんなにコスト掛かる動作じゃないよね。
いくら大量の処理とは言え,ログを出力しただけで影響がでるような厳しい環境ってそうなくない?
そしてそもそもそんな環境でログ処理ではないメインの処理って動くの? >>884
マルチプロセスやマルチスレッドだったりすれば排他も必要だし、fprintf 使っただけだとプロセスの突然死なんかではバッファがフラッシュされず失われ、一番欲しい落ちる寸前の情報が欠けかねない。
小まめにフラッシュしたらそれはそれで性能の問題が出る。
奥が深いと思うよ。 >>870
ああ、過剰な例だったか
>>871
あの例は抽象化ではないけどな
まあ例だから深くは言うまい >>884
どの程度の性能を求めてるか次第だと思うよ
時刻取得でも clock_gettime と gettimeofday でうるさく言う人もいるしね
トレースログみたいに高速かつ大容量を考えるなら
ログがN件入るバッファを複数持っておいて
情報は基本バイナリで登録、ローテート時にファイル書き出し、
別途パーサーを作る、とかかな
まあそこまでする必要のあるソフトなんて稀だろうけど ポインタをややこしくしてるのは
int* a;
の a がポインタ変数で
a[10]
という配列がある時、a と書くだけで配列の先頭アドレスの別の書き方として許されてるがいけないんじゃないのかな?って思ったんだけど合ってる?
配列の先頭アドレスは常に&a[0]って書くようにするようにすればポインタのごちゃごちゃって解消されない? Cだったら配列なんてものがあると思わん方がいいかもね
入門書的にはポインタより配列の紹介が先に書いてあったりするが、確かに問題はある。 >>888
あと、p[i] も禁止して、*(p+i) を強制しないとだめ。 >>888
そのへんはシンタックスシュガーというよりは
たまたま結果的に同じものを指している 程度だし
原理原則を省かず丁寧に覚えていくしかないのでは 違う
違うナァ
機械語→BASICのころには
「変数って何だ?!!」として変数なる概念をなかなか理解できなかったやつがいた……
と言う話を聞いてる
今の初心者の一部もなじめないヤツが一定数いる
言ってしまえばC言語は「変数指向」のプログラミング言語だ
オブジェクト指向や関数型に並び立つような、な
気付いてないが現代プログラミング言語は「変数指向」で出来てる
そしてどんな思想であろうとどんだけ説明してもその概念の片鱗すら理解出来ないヤツはいる
なので「変数」概念の理解に原理原則なんて存在しない
一発で理解出来るか素直に受け入れるかのどちらかしかない
それ以上説明しても意味が無い、という人物は少数だがいる
これはしょうがない なんかの本に
int *a;
と宣言してあったら、式の中で
*a
と書かれたものが整数であると的確に説明してあった。 >>893
それが分かりやすいかはちょっと微妙じゃね。
int i; ならその領域は確保されてるけど、int *a; と宣言した *a は型としては i と同じだけどそのままで i と同じように使えるわけじゃないし。
ポインタで迷うレベルに通じる話じゃなさそうだし、これが通じるならポインタで迷ってないんじゃね。 >>892
マシン語でもレジスタが変数みたいなもんだろ これを実行するときに、argcに3が入っているとsegmentation faultとなってしまうのですがなぜだかわかりますか?
OSはopensuseでコンパイラはccです
#include <stdio.h>
#include <string.h>
int main(int argc,char *argv[])
{
int cmp=0;
char *s1=argv[1],*s2=argv[2];
cmp=strcmp(s1,s2);
if(argc!=3){
fprintf(stderr,"usage:%s[string1][string2]\n",argv[0]);
return -1;
}
if(cmp<0){
printf("%d : %s\n",strlen(s2),argv[2]);
}
else{
printf("%d : %s\n",strlen(s1),argv[1]);
}
return 0;
} ■ このスレッドは過去ログ倉庫に格納されています