什么时候byte_order更改被忽略?

时间:2017-07-19 07:38:52

标签: c

我得到一个函数参数的警告,这里的类型转换是将byte_order从bigendian int更改为int。所以我把它改成了bigendian int。但这样做会被忽略。

function_call_name((int*)&argument1, argument2));

function_call_name((int* __attribute__((bigendian))) & argument1, argument2);

试图找到解决方案 https://software.intel.com/en-us/node/628908

但事情并没有成功。

我可以得到一些帮助吗? :)

另外,如何知道正在运行的byte_order。我的意思是#ifdef指令?

1 个答案:

答案 0 :(得分:0)

例如,如果这些(非标准)限定符与const限定符类似,那么:

const int *a;                 // a is a pointer to const int
int const *b;                 // b is a pointer to int const (same as a)
int * const c = (int[42]){0}; // c is a const pointer to int (DIFFERENT!)

通过尝试修改它们可以观察到这些差异:

a = (int const[]){0}; // This is allowed
a[0] = 42;            // This is NOT allowed
c = NULL;             // This is NOT allowed
c[0] = 42;            // This is allowed

我认为您可能打算写int __attribute__((bigendian)) *,即将属性放在星号之前,表示您想要一个指向大端{em}的指针,因为将放在之后会表示指向int 的大端指针...