Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C非法操作员错误_C - Fatal编程技术网

C非法操作员错误

C非法操作员错误,c,C,我试图创建一个基本函数来交换短int的endianness,但它抛出了一个错误: #ifndef __ENDIAN__ #define __ENDIAN__ #define Swap16(value) \ ((((unsigned short)((value) & 0x00FF)) << 8) | \ (((unsigned short)((value) & 0xFF00)) >> 8)) #define Swap32(value) \

我试图创建一个基本函数来交换短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
我使用的是VS2008,确切的错误是:

C2296: '&' : illegal, left operand has type 'short *'

我能做些什么来修复这个错误?

如果你看看宏是如何展开的,你就会很清楚到底出了什么问题

&val
是类型为
short*
的指针。但是你可以直接用宏的参数来计算。所以您试图对指针执行整数运算

因此,这将扩展到:

((((unsigned short)((&val) & 0x00FF)) << 8)
...

(((无符号短)(&val)和0x00FF))
short*value
是指针

你需要去引用它,又名:

void __inline SwapEndian(short* value)
{
    *value = Swap16(*value);
}
试试这个

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