我有一个宏,它应该返回一定数量的 uint。我使用宏是因为这是静态数组的大小。最近尝试在16位系统上使用失败:
#define LCD_PIXEL_PER_CHAR 5
#define LCD_CHAR_PER_LINE 16
#define BITMAP_SIZE ((LCD_PIXEL_PER_CHAR * LCD_CHAR_PER_LINE)/(sizeof(int)*8)+1)
现在对于 32 位系统,我的 80 位适合 3 个 uint 和一些余数。 但在 16 位上,80 正好除以 16 = 5 个 uint,我的宏返回 6。显然,+1 是错误的,应该重新设计。
有人有一个聪明的解决办法吗?谢谢
最佳答案
使用条件表达式内的精确匹配检查:
#define BITMAP_SIZE \
( (LCD_PIXEL_PER_CHAR * LCD_CHAR_PER_LINE) / (sizeof(int) * 8) \
+ ((LCD_PIXEL_PER_CHAR * LCD_CHAR_PER_LINE) % (sizeof(int) * 8) ? 1 : 0))
关于c,宏,位数的必要单位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21833614/