C言語出来るって言いませんでした?

感覚でプログラム書く人なんているんだなぁ。

と、言うのも、昨日

char* hoge();

...

void piyo()
{
    char firstCh;
    ...
    
    firstCh = hoge()[0];
    ...
}

こんなコードを書いたら、「そんなコード通らないでしょ」と。
なんで?と聞いたら、「いや、普通に考えて無理でしょ」と。
普通ってなんだよ。


ほかにも、id*1に入った数値を16進数の文字列に変換するコード

for (i = 0; i < SIZE; i++) {
    sprintf(tmp, "%X", id[i] >> 4);
    buf[i * 2] = tmp[0];
    sprintf(tmp, "%X", id[i] & 0x0f);
    buf[i * 2 + 1] = tmp[0];
}

があって、実際はidには逆順で入っていたことがわかって書き換えたコードがこれ。

for (i = SIZE - 1; i >= 0; i--) {
    sprintf(tmp, "%X", id[i] >> 4);
    buf[i * 2] = tmp[0];
    sprintf(tmp, "%X", id[i] & 0x0f);
    buf[i * 2 + 1] = tmp[0];
}

・・・もうやめて。


ほかにもこんなやりとりが。


俺「末尾に\nつけてー」
彼「わかった」

"hoge piyo\\n";

俺「あー、そうじゃなくて改行コードの・・・」
彼「あー、そっちね」

"hoge piyo\0";

俺「・・・いや、だから\nだってば」
彼「え?何か違った?」
俺「・・・」


極めつけはこれ。


彼「このコードなんだけど・・・」
俺「ちょ、なんでcharと文字列比較してんだよ」*2
彼「え、これじゃ動かないの?」
俺「ダブルクォートは文字列で、文字はシングルクォートじゃないと駄目でしょ」
彼「あれ、そうだっけ?」


C言語わかってないじゃん・・・

*1:符号なし8bit数値型の配列

*2:こんなコード : if (ch == "0") ...