ฉันขยายคำตอบที่ดีที่ได้รับจาก @ renato-Chandelier โดยรับรองการสนับสนุน:
_NIBBLE_(…)
- 4 บิต 1 nibble เป็นอาร์กิวเมนต์
_BYTE_(…)
- 8 บิต 2 nibbles เป็นอาร์กิวเมนต์
_SLAB_(…)
- 12 bits, 3 nibbles เป็นอาร์กิวเมนต์
_WORD_(…)
- 16 bits, 4 nibbles เป็นอาร์กิวเมนต์
_QUINTIBBLE_(…)
- 20 บิต 5 nibbles เป็นอาร์กิวเมนต์
_DSLAB_(…)
- 24 bits, 6 nibbles เป็นอาร์กิวเมนต์
_SEPTIBBLE_(…)
- 28 บิต 7 nibbles เป็นอาร์กิวเมนต์
_DWORD_(…)
- 32 บิต 8 nibbles เป็นอาร์กิวเมนต์
จริง ๆ แล้วฉันไม่แน่ใจเกี่ยวกับคำว่า "quintibble" และ "septibble" หากใครรู้ทางเลือกอื่นใดโปรดแจ้งให้เราทราบ
นี่คือแมโครเขียนใหม่:
#define __CAT__(A, B) A##B
#define _CAT_(A, B) __CAT__(A, B)
#define __HEX_0000 0
#define __HEX_0001 1
#define __HEX_0010 2
#define __HEX_0011 3
#define __HEX_0100 4
#define __HEX_0101 5
#define __HEX_0110 6
#define __HEX_0111 7
#define __HEX_1000 8
#define __HEX_1001 9
#define __HEX_1010 a
#define __HEX_1011 b
#define __HEX_1100 c
#define __HEX_1101 d
#define __HEX_1110 e
#define __HEX_1111 f
#define _NIBBLE_(N1) _CAT_(0x, _CAT_(__HEX_, N1))
#define _BYTE_(N1, N2) _CAT_(_NIBBLE_(N1), _CAT_(__HEX_, N2))
#define _SLAB_(N1, N2, N3) _CAT_(_BYTE_(N1, N2), _CAT_(__HEX_, N3))
#define _WORD_(N1, N2, N3, N4) _CAT_(_SLAB_(N1, N2, N3), _CAT_(__HEX_, N4))
#define _QUINTIBBLE_(N1, N2, N3, N4, N5) _CAT_(_WORD_(N1, N2, N3, N4), _CAT_(__HEX_, N5))
#define _DSLAB_(N1, N2, N3, N4, N5, N6) _CAT_(_QUINTIBBLE_(N1, N2, N3, N4, N5), _CAT_(__HEX_, N6))
#define _SEPTIBBLE_(N1, N2, N3, N4, N5, N6, N7) _CAT_(_DSLAB_(N1, N2, N3, N4, N5, N6), _CAT_(__HEX_, N7))
#define _DWORD_(N1, N2, N3, N4, N5, N6, N7, N8) _CAT_(_SEPTIBBLE_(N1, N2, N3, N4, N5, N6, N7), _CAT_(__HEX_, N8))
และนี่คือตัวอย่างการใช้ของ Renato:
char b = _BYTE_(0100, 0001); /* equivalent to b = 65; or b = 'A'; or b = 0x41; */
unsigned int w = _WORD_(1101, 1111, 0100, 0011); /* equivalent to w = 57155; or w = 0xdf43; */
unsigned long int dw = _DWORD_(1101, 1111, 0100, 0011, 1111, 1101, 0010, 1000); /* Equivalent to dw = 3745774888; or dw = 0xdf43fd28; */
00010000
คือเลขฐานแปดใช่ไหม? (และการประกาศของคุณไม่มีประเภท)