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.


Anmelden zum Antworten