Macros 为什么宏的第二个条件不';不要按计划扩张

Macros 为什么宏的第二个条件不';不要按计划扩张,macros,Macros,问题是: 在我的代码的头文件中,有一个宏在第二个宏调用中没有展开,该宏调用被定义为计算周期性边界条件的n_image。如果数字为负数,我将int类型转换替换为floor()库函数。然而,第二个宏对负数的调用甚至没有响应,我猜 宏定义: #define n_int(x) ( (x) >= (0) ? (int)((x)+0.5) : floor((x)-0.5)) #define n_image(a, b) ( (a) - n_int((a)/(b))*(b)) 我的问题

问题是: 在我的代码的头文件中,有一个宏在第二个宏调用中没有展开,该宏调用被定义为计算周期性边界条件的n_image。如果数字为负数,我将int类型转换替换为floor()库函数。然而,第二个宏对负数的调用甚至没有响应,我猜

宏定义:

#define  n_int(x)       ( (x) >= (0) ? (int)((x)+0.5) : floor((x)-0.5))
#define  n_image(a, b)  ( (a) - n_int((a)/(b))*(b))
我的问题:这是编译器的问题还是宏的问题? 顺便说一下,下面的宏只适用于负数,但这不是我需要实现的,应该对用户在第一个宏中提供的数字进行测试

#define  n_image(a, b)  ( (a) - floor(((a)/(b))-0.5)*(b))

不管它值多少钱,它都在Apple LLVM 5.1中工作。或者它是为您编译的,但没有按照您的意图执行吗?n_int中对负数进行四舍五入的第二个条件是(int)((x)-0.5)。但是,如果x为负,则这不响应。例如,如果x=-0.58,我预期为-1,但它给出0。