20

次のコード行があります。

#define PORT 9987

char *ptr = (char *)&PORT;

これは私のサーバーコードで機能するようです。しかし、クライアントコードに書いたように、次のエラーメッセージが表示されます:

lvalue required as unary ‘&’ operand

私は何を間違っていますか?

4

2 に答える 2

39

ここでは C プリプロセッサが活躍しています。コードを前処理すると、次のようになります。

char *ptr = (char *)&9987;

( ) 演算子のアドレスは&、リテラルではなく変数に適用できます。

于 2013-05-24T03:51:20.367 に答える
8

プリプロセッサ マクロにはメモリがなく、コンパイル時にマクロが値に置き換えられます。したがって、ここで実際に起こっていることはchar *ptr = (char *)&9987、これは不可能です。

于 2013-05-24T03:54:46.687 に答える