我已将2个宏min(a,b)和max(a,b)定义为
#define min(a,b) (a<b?a:b)
#define max(a,b) (a>b?a:b)
我在我的代码中使用了一个表达式,如下所示:
max( close[i-1][ii], open[i-1][ii] ) < max( close[i-2][ii], open[i-2][ii] )
但是,这会返回以下警告:
警告:X&lt; = Y&lt; = Z之类的比较没有数学意义
我相信预处理器正在做某种事情
a<b<c
替换可能解释编译器的警告。我该如何解决这个问题?
答案 0 :(得分:2)
使用std :: max和std :: min代替
您的宏会像使用它们一样产生副作用。
答案 1 :(得分:1)
宏只是替换文本,因此您需要将所有内容括起来。
#define min(a,b) (((a)<(b))?(a):(b))
#define max(a,b) (((a)>(b))?(a):(b))
如果您使用的是C ++,那么有更好的选择。内联函数具有与宏相同的性能,同时表现得更好。