C言語では文字列処理の実装にいちいち個性が出る。これはCという言語の文字列実装が貧弱すぎ(char*としてしか扱えない)、string.hで提供されている標準ライブラリも貧弱すぎるのが悪いと思っている。
まず文字列領域を配列で取るかmallocで取るかで分かれる。その大きさをchar strbuf[256]と直接書くか、#define STRBUF_SIZE 256とかマクロに書くかで分かれる。そのマクロを.cのほうに書くか.hに書くかでまた分かれる。
文字列バッファ長を変える可能性を考えて#ifndef STRBUF_SIZEと囲うか、strbuf_sizeを引数に追加するか。引数の型をintにするかsize_tにするかでまた分かれる。そもそも文字列を扱うのにいちいち最大長を考えなきゃいけないC言語の仕様が悪いんだけど、それを言っても始まらない。
込み入った文字列をレンダリングするのに、部分ごとに作ってstrncat()で接続してゆくか、snprintf()でまとめてレンダリングするか。あるいはファイル出力前提としてprintf()で吐き出すか。僕が好んだ手法は部分毎の結合で、しかもstrncatではなくstrcpyを使う方法だった。
char buff[256], char *p=buff, int bufsize=256みたいにして、
atoi(tmpbuf, value); len=strlen(tmpbuf); if (bufsize > len) { strcpy(p, tmpbuf); p+=len, busize-=len; }みたいにつなげてゆくの。これは癖みたいなもので、strncat()やsnprintf()に対して優る理由は特に無い。
DOS用コンパイラに付いてくるライブラリはリエントラント性の保証が無かったので使いたくなかった、str(n)catは毎回「コピー先文字列の長さ」を内部で数え直すのが嫌だった。それだけ。GHzで動きGByte単位のRAMを持ちプロセス空間で動くLinuxでは意味は無い。
自前printf()を作っても良かったんだけど、90年代はじめの組み込み用コンパイラは可変長引数の実装が怪しいのが多くて、va_arg()とかvar_start()とかのANSI標準ではなく独自文法だったり、ANSIですらなくK&R仕様で自前可変引数を実装できない処理系もあった。ANSI-C制式仕様が89年だものね。
そのスタイルをLinux上のコードで真似されているのを見るとorzだよ~。

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with ウチューじん・ささき

ウチューじん・ささき Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @uchujin17

Apr 30
集英社のおかげで「ゴールデンカムイ」一気読みしたんだけど…圧倒されて言葉が出ない。こういう作品が発表できること、それを漫画というかたちで表現できることの素晴らしさを再認識させられた。それは有名無名の漫画家たちが、出版社が、読者が戦って作り上げてきたものだ。
「政治的正しさ」という呪縛にぐるぐる巻きにされて窒息しそうになっているいまのアメリカで、こんな作品を創れるだろうか。発表できるだろうか。アニメ版はネットストリーミングで配信されている(当然のように大好評だ)けれど、劇場ではかけられないだろう。
以前に何度か言及しているけれど、アメリカの漫画界は1950年代に一人の心理学者の「漫画の暴力表現と少年凶悪犯罪の増加」という主張で突き上げられたとき戦うことを選択せずに「自主規制」を選択し、映像作品のレーティング制度もそれに倣って制定された。
Read 10 tweets
Apr 30
まぁ、やられたらやられたで大迷惑間違いないだけどね(´・ω・`) 実務じゃなく課題のための課題をやらせれば被害は防げるけれど、課題を作って指導して結果を評価するのはすっごく手間がかかる。その手間は本業のプログラマー相手に使いたい(大抵の現場ではそれもできていない)。
そしてプログラマーが実務で何を苦労しているかは、課題のための課題をやっても伝わらない。期限を決めて課題をやらせたうえで、期限直前になって「ハイ仕様変更です。課題のこの要求部分、本当はこうでした。期限は変わりません、対応してください」とやるとか。
半分くらい過ぎたところで「はい部署移動です。隣の机どうしで入れ替わって、前の人が作りかけたコードを完成させてください。直接会話は禁止です、質問応答はぜんぶメールで行ってください」とやるとか。
Read 19 tweets
Apr 30
"Hypersonic Transport"で画像検索してみる…なるほど。
「角断面胴体、クサビ型」のHSTたち。
「丸断面、流線型」のHSTたち。
Read 18 tweets
Apr 30
いいだろうお嬢さん。酔っ払った余興に語ってやろうじゃないか。昔一目置いたこともあったネットの知り合いが、円弧の一周を2πで表すラジアンを、同じ単位を360で表す度数度量衡=degree(度)に比して非直感的で不合理だとのたまったことがあったんだよ。
360という数に何の必然性がある?360を素因数分解すると(2^3)*(3*^2)*(5)だろう?それがこの整数であることにどんな意味がある?砲術で使う角度単位のミルの定義は何だ?360÷2πか?それとも360/6400か?
円周を360分割しようが400分割しようが1000分割しようが、この宇宙で円周と半径の比は整数にはならねぇんだよ。何で?俺が知るもんか、この世界を作った神様にでも訊ねてこい。
Read 7 tweets
Apr 29
そもそも「数」とは何だろう、「量」を数によって表記するってどういう事なのだろう、という話になってゆく。
物は1個2個と数えられる。それは本当か?例えば石は数えられる、でも泥は数えられない。石と泥って本質的に違うものか?どちらも各種金属酸化物粒子の混合物で、常温常圧下での結合強度が違うだけとも言えるぞ。
その金属酸化物粒子=砂粒は数えられるのか?砂粒は砕いた石に過ぎないから、更に砕くこともできる。それを繰り返してゆくと原子になって、そこから先は並の方法では砕けない。古典物理学では、そこがモノ行き止まりだった。量は究極的には原子として数えられる。
Read 6 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Don't want to be a Premium member but still want to support us?

Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal

Or Donate anonymously using crypto!

Ethereum

0xfe58350B80634f60Fa6Dc149a72b4DFbc17D341E copy

Bitcoin

3ATGMxNzCUFzxpMCHL5sWSt4DVtS8UqXpi copy

Thank you for your support!

Follow Us on Twitter!

:(