MACROS - 如何实现分割再循环

时间:2010-12-28 18:42:54

标签: c c-preprocessor

对宏执行除数和舍入以降低数字的正确方法是什么?

我正在尝试这样做:

#define TOTAL_NUM_FFTS  (int) NO_SAMPLES / FFT_SIZE

但是我收到一条警告,说明该宏的重新定义无法重复,编译器将该行重述为:  #define TOTAL_NUM_FFTS(int) NO_SAMPLES / FFT_SIZE没有TOTAL_NUM_FFTS和(int)之间的空格。

感谢您的帮助!

3 个答案:

答案 0 :(得分:11)

#define TOTAL_NUM_FFTS  ((int) (NO_SAMPLES) / (FFT_SIZE))

预处理器think(int)是宏的参数。

定义宏时,尽可能多地使用括号。例如,想想如果有人将FFT_SIZE定义为2 + 3会发生什么。不是除以5,而是除以2然后加3。

答案 1 :(得分:1)

要检查的几件事情:

  • 始终正确地将您的宏(和宏参数)括起来,如Ilya mentioned
  • 确保其他地方没有宏的重复(或接近重复)定义。错误消息应该告诉您确切的位置,但如果它没有,grep或类似的将有所帮助(可能有一个旧版本的标头隐藏在包含路径的其他目录中?)。
  • 确保您的头文件受到include guards的多重保护。我不认为这是你发生的事情,因为相同的宏重新定义应该被C或C ++编译器接受,但你仍然应该确保你的标题有这个。

答案 2 :(得分:0)

要进行除法,可以使用math.h库中可用的pow(base,exponent)函数。 我想你必须实现类似的东西,

#define C A/B    //B!=0

然后使用以下内容代替它:

#define C A*pow(B,-1)