c,宏,位数的必要单位

标签 c macros

我有一个宏,它应该返回一定数量的 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/

相关文章:

c - __pa 返回超出范围的物理地址

c++ - 为什么这两个函数指针在 C/C++ 中都是合法的?

c++ - #定义空格

variables - MASM - 宏变量?

c - 如何在C中检查文件是否存在并创建新文件

c - 在 C 中保存结构地址的变量的数据类型应该是什么?

c++ - 在 C++ 中使用 dlsym 加载共享对象函数

c - 大端交换宏 "uswap"导致意外错误

c++ - 使用 C++ 内联 UnrealEngine UE_LOG 宏

c++ - 我们如何解释这个复杂的 C++ 预处理器宏替换