C非法操作员错误

123*_*123 0 c

我正在尝试创建一个基本函数来交换short int的endianness但是它抛出了一个错误:

#ifndef __ENDIAN__
#define __ENDIAN__

#define Swap16(value) \
    ((((unsigned short)((value) & 0x00FF)) << 8) | \
    (((unsigned short)((value) & 0xFF00)) >> 8))

#define Swap32(value) \
    ((((unsigned)((value) & 0x000000FF)) << 24) | \
    (((unsigned)((value) & 0x0000FF00)) << 8) | \
    (((unsigned)((value) & 0x00FF0000)) >> 8) | \
    (((unsigned)((value) & 0xFF000000)) >> 24))

void __inline SwapEndian(short* value) //ERROR HERE
{
    *value = Swap16(value);
}

#endif
Run Code Online (Sandbox Code Playgroud)

我打算使用如下代码:

short val = 0x1234;
SwapEndian(&val);
//val now contains 0x3412
Run Code Online (Sandbox Code Playgroud)

我正在使用VS2008,确​​切的错误是:

C2296: '&' : illegal, left operand has type 'short *'
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能解决这个错误?

Mys*_*ial 5

如果你看看宏是如何扩展的,那很明显是什么问题.

&val是一个类型的指针short*.但你的宏直接从它的参数算术.所以你试图对指针执行整数运算.

所以这扩展到:

((((unsigned short)((&val) & 0x00FF)) << 8)
...
Run Code Online (Sandbox Code Playgroud)

&val是类型short*,而宏需要一个整数.

在函数中,您需要在将其传递给宏之前将其取消引用为整数.