2017-07-19 1 views
3

Ich bekomme eine Warnung für das Argument einer Funktion, dass die Typumwandlung hier byte_order von bigendian int in int ändert. also ändere ich es zu bigendian int. aber das wird ignoriert.Wann wird eine Byte_Order-Änderung ignoriert?

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

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

Versuchte für https://software.intel.com/en-us/node/628908

Aber die Dinge aus nicht funktioniert diese Lösung zu finden.

Kann ich Hilfe bekommen? :)

Auch, wie man weiß, was byte_order läuft. Ich meine eine #ifdef-Direktive?

+1

Welche Art 'argument1' wollte? – 4386427

+1

Die Webseite, die Sie verknüpft haben, enthält alle Details UND enthält Beispiele für die Deklaration einer Funktion, die eine nicht standardmäßige 'Endian'-Byte-Reihenfolge verwendet. Was machst du, dass die Byte-Reihenfolge überhaupt eine Überlegung ist? – user3629249

+0

@ 4.386.427 Argument 1 ist vom Typ size_t und die Funktion ist wie 'Funktion (int * param1, char * param2);' –

Antwort

0

Wenn diese (Nicht-Standard) Qualifier sind so etwas wie die const Qualifier zum Beispiel dann:

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!) 

Die Unterschiede können diese durch den Versuch beobachtet werden, um sie zu ändern:

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 

Ich denke, Sie wahrscheinlich zu schreiben int __attribute__((bigendian)) *, dh setzen das Attribut vor der Stern zu de beachten Sie, dass Sie ein Zeiger auf Big-Endian-int, da legt es nach würde bedeuten einen Big-Endian-Zeiger auf int ...