MACROS-如何实现除法然后取整

问题描述 投票:2回答:3

对宏执行除法和舍入到较小数字的正确方法是什么?

我正在尝试这样做:

#define TOTAL_NUM_FFTS  (int) NO_SAMPLES / FFT_SIZE

但是我收到该宏重新定义不兼容的警告,编译器将该行重新声明为: #define TOTAL_NUM_FFTS(int) NO_SAMPLES / FFT_SIZE在TOTAL_NUM_FFTS和(int)之间没有空格。

感谢您的帮助!

c c-preprocessor
3个回答
11
投票
#define TOTAL_NUM_FFTS  ((int) (NO_SAMPLES) / (FFT_SIZE))

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

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


1
投票

要检查的几件事:

  • 总是正确地用括号括住宏(和宏参数),如Ilya mentioned
  • 请确保在其他地方没有宏的重复定义(或几乎重复)。错误消息应该告诉您确切的位置,但是如果没有,则grep或类似的命令会有所帮助(也许您头文件的旧版本隐藏在包含路径的其他目录中?)。
  • 请确保您的头文件受到保护,以防止include guards多次包含。我不认为这是发生了什么事,因为应该由C或C ++编译器接受相同的宏重新定义,但是您仍应确保标头具有此定义。

0
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.