パスワードを忘れた? アカウント作成

こちらは、taklさんのユーザページですよ。 アカウントを作成して、スラッシュドットのモデレーションと日記の輪に参加しよう。

896207 comment

コメント: 未定義の挙動になる理由 (スコア 1) 4

これが未定義の挙動になる理由は "6.5.16.1 Simple Assignment" の
> If the value being stored in an object is read from (中略) the behavior is undefined.
の方じゃないでしょうか。

337524 comment

コメント: Re:不具合の修正方法の話をしている訳ではないと思います (スコア 1) 6

by takl (#1973501) ネタ元: C における一時オブジェクトの生存期間
いえ、不具合の修正方法の話でも言語仕様の拡張の話でもなく
「元AC(#1972743)で述べられているスタック操作がおかしい」
という話をしたつもりでした。
つまりコンパイラの実装方法の話です。

「スタックポインタの下は揮発性」という環境下で
「addressee がスタックポインタの下を指すポインタを返す」というコードを吐くコンパイラは
間違ってるのではないかと思います。
337222 comment

コメント: Re:単なる使い方の誤りではないですか (スコア 1) 6

by takl (#1972816) ネタ元: C における一時オブジェクトの生存期間
間違いだと思います。
addressee を内部的に次のような形に変形し、
    void addressee(struct X *r) {
          struct X result = { "world" };
          *r = result;
    }
呼び出し側が代入先オブジェクトへのポインタをこっそり渡せば
きちんとスタック内で完結するコードを生成可能だからです。
実際 cygwin の gcc (GCC) 4.3.4 20090804 (release) 1 はそのようなコードを生成しました。

問題は呼び出し側がどう一時変数を用意するかという点にあります。
例えば次のような関数呼び出しがあったとき、
    void foo(void)
    {
        printf("%s%s", addressee().a, addressee().a);
    }

gcc拡張の書き方になりますが、次のような形に変換されるかもしれませんし、
    void foo(void)
    {
        /* gcc では ({ 文* }) という書き方で 文を式に変換できます。
              式の値は内部の最後の式の値です。*/
        printf("%s%s",
                      ({ struct X tmp1; addressee(&tmp1); tmp1.a; }),
                      ({ struct X tmp2; addressee(&tmp2); tmp2.a; }));
    }

次のように変換されるかもしれません。
    void foo(void)
    {
          struct X tmp1;
          struct X tmp2;
          addressee(&tmp1);
          addressee(&tmp2);
          printf("%s%s", tmp1.a, tmp2.a);
    }

前者のやり方では printf が呼び出される前に一時変数の寿命が尽きますが、
後者のやり方ではfoo()の終わりまで一時変数は生きています。
Cコンパイラはどちらの変換を行ってもかまいません(未定義ですから)。

適合コードに関しては
    struct X my_x = addressee();

    struct X my_x;
    addressee(&my_x);
と変換するようなCコンパイラなら割り込みが入っても問題なく実行できます。
233823 comment

コメント: Re:これでおk? (スコア 2, すばらしい洞察) 93

> 火曜生まれ
少なくとも一人は「男子かつ火曜生まれ」なので

「男月 男月」「男月 男火」「男月 男水」…
「男月 女月」「男月 男火」「男月 男水」…
「女月 男月」「女月 男火」「女月 男水」…
「女月 女月」「女月 女火」「女月 女水」…

のうち片方「男火」になってるものを拾って計算しなきゃならん、という話だと思う。

171670 comment

コメント: Re:見せしめ逮捕の逆 (スコア 1) 34

> 日本だとどうなんでしょうか。

日本の著作権法第三十条では

個人的な利用なら「次に掲げる場合を除き」自分で複製を作ってもよい。
一 公共のコピー機を使った場合
二 技術的保護手段の回避を行った場合

というような書き方になってます。
日本では違法っぽいです。

48512 comment

コメント: Re:受け取れない奴が悪い (スコア 1) 213

> オープンじゃないリレーなら広い意味で受信者に含まれるでしょう。
送信元MUA→自社部署内MTA→自社MTA→どこか→他社MTA→他社部署内MTA→宛先MUA

という感じだとオープンリレーなしで中継者たくさん、という状況になり得ます。
この場合、自社MTAを受信者に含めると話がしにくいと思います。

で、こういう経路のどこかで8ビット目が捨てられてしまったとしましょう。
すると、どこで捨てられたかわからないし、
誰に文句言ったらいいのかもわからないという状況になります。
# 文句言うと逆に怒られそう。
このような状況が考えられる中で
「受け取れない奴が悪い」と言うのはまずいと思います。

> そもそもBase64でエンコードすれば8bit目を落とされても問題ありません。
はい。常時7ビットの符号にしておくのが無難です。
typodupeerror

UNIXはただ死んだだけでなく、本当にひどい臭いを放ち始めている -- あるソフトウェアエンジニア

読み込み中...