makros
-
hi, warum muss ich hier i = to_big_endian_32(i); und nicht to_big_endian_32(i); verwenden?
cu
#include <stdio.h> typedef char int8_t; typedef short int16_t; typedef int int32_t; typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned int uint32_t; // convert a 16-bit Little-Endian to Big-Endian #define to_big_endian_16(A) ((((uint16_t)(A) & 0xff00) >> 8) | \ (((uint16_t)(A) & 0x00ff) << 8)) // convert a 32-bit Little-Endian to Big-Endian #define to_big_endian_32(A) ((((uint32_t)(A) & 0xff000000) >> 24) | \ (((uint32_t)(A) & 0x00ff0000) >> 8) | \ (((uint32_t)(A) & 0x0000ff00) << 8) | \ (((uint32_t)(A) & 0x000000ff) << 24)) #define to_little_endian_16 to_big_endian_16 #define to_little_endian_32 to_big_endian_32 int main() { uint32_t i = 123456789; printf("\n%x", i); i = to_big_endian_32(i); printf("\n%x", i); return 0; }
-
weil #define makro(A) (A<<3)
makro(var); vom Präprozessor als
var<<3; aufgelöst wird.
Also i = var<<3; und Dein Compiler ist glücklich.
EDIT: #define makro(A) A = (A<<3) ist natürlich wieder etwas anderes.