50

私の読書の過程で、私は1993年に書かれたWG14欠陥レポート#51に出くわしました(またはおそらく1893年、彼らは世紀と千年紀を中断しました)。そこにあるコードサンプルでは、​​スペルト小麦の演算子->>がへのポインタに使用されているようstructです。私が見つけた演算子の優先順位テーブルでそれを見つけることができないので、私はそれが演算子であるか、またはこれまでであったかどうか疑問に思っています、もしそうなら、この演算子は何をしますか(または場合によってはしましたか)?

最初はタイプミスだと思っていましたが、質問への回答として、テキストで2回、コードサンプルでもう1回再現されており、少なくとも2人のCエキスパートをすり抜けただけだとは信じられません。それが私のような初心者に飛び出したとき、気づきました。また、コードの焦点であり、非常に気づきやすく、修正されることはありませんでした。

インデントが追加されたコードは次のとおりです。

#include <stdlib.h>

struct A {
    char x[1];
};

main()
{
    struct A *p = (struct A *) malloc(sizeof(struct A) + 100);
    p->>x[5] = '?';  /* This is the key line [for both them and us] */
    return 0;
}

このコードをCコンパイラとC++コンパイラの両方でコンパイルしようとしましたが、どちらかで解析できませんでした。おそらくこれは、Cの初期バージョンで、もう使用されていない演算子でしたか?

これは、この演算子の名前は何ですか:「->」のように不審に感じます。質問ですが、これは他の2つの演算子の組み合わせではないと思います。どのように分割して、有効にすることができるかわかりません。

4

3 に答える 3

29

転写プロセスに問題があるようです。大なり記号が 2 倍になっている DR 42 にも同様の問題があり ます。

于 2012-10-24T14:26:07.907 に答える
23

私は 1992 年に C を学びましたが、当時はそのような演算子はなかったと 100% 確信しています。

コンテキストからp->>x[5]、 よりよく知られている矢印演算子 とまったく同じことを行うように見えると推測できます->。したがって、タイプミスの可能性があります。


または、コードを HTML に転写する際のエンコーディングの問題である可能性もあります。そのページのソースを見ると、エスケープ コードとリテラル<>文字が奇妙に混在していることがわかります。

<TT><B>#include &lt;stdlib.h><BR>
于 2012-10-24T13:29:42.797 に答える