1

数年前、C が標準化される前は、アドレスに構造体セレクターを使用することが許可されていました。たとえば、次のコードは許可され、頻繁に使用されていました。

#define PTR 0xAA000
struct {  int integ; };

func() {
   int i;
   i = PTR->integ;    /* here, c is set to the first int at PTR */
   return c;
}

あまり綺麗じゃなかったかもしれませんが、私は好きです。私の意見では、この言語のパワーと汎用性は、制約の欠如にも依存しています。現在、コンパイラはエラーをダンプするだけです。GNU C コンパイラでこの制約を取り除くことができるかどうか知りたいです。

PS: 同様のコードが C の発明者によって UNIX カーネルで使用されました (V6 では、いくつかのダミー構造が param.h で宣言されています)。

4

3 に答える 3

3

構造体に型名を付け、マクロを少し調整することで、コードで同じ効果を得ることができます。

typedef struct { int integ; } PTR_t;
#define PTR ((PTR_t*)0xAA000)
于 2013-04-19T16:55:44.333 に答える