如何定义一个值,该值是C中其他预定义值的总和?

时间:2013-11-30 15:10:22

标签: c c-preprocessor

如何使用#define表示一个值包含两个其他值的总和。是否允许 C 中的良好做法做这样的事情?

#define VALUE_A 2
#define VALUE_B 2
#define SUM_A_B (VALUE_A + VALUE_B)

如果没有,我该怎么做才能实现这个功能?

2 个答案:

答案 0 :(得分:1)

Linux和GCC头文件经常执行,如果这是一个信任投票。 e.g:

$ grep -r 'define.*+' /usr/include/
...
/usr/include/linux/fdreg.h:#define FD_STATUS    (4 + FD_IOPORT )
...
/usr/include/linux/elf.h:#define PT_GNU_STACK   (PT_LOOS + 0x474e551)
...
/usr/include/i386-linux-gnu/asm/unistd_32.h:#define __NR_timer_settime  (__NR_timer_create+1)

答案 1 :(得分:1)

如果您只需要整数常量(类型int),则可以使用此类常量的枚举

enum { SUM_A_B = (VALUE_A + VALUE_B), };

可能的优势:

  • 总和仅由编译器评估一次。这不是一个大问题 处理现代编译器,如果这只是一个简单的总和,但是 当你使用更复杂的时候可能会产生一些小的差别 表达式
  • 即使现在编译器错误和调试信息也不是这样 适用于来自预处理器的值。枚举常数通常可以很好地跟踪。

缺点是预处理器本身无法访问值本身。所以你不能用#if/#else构造它。但你至少可以把它定义为

#define SUM_A_B SUM_A_B

所以#ifdef/#else构造仍然有用。