我收到以下警告:
warning: left-hand operand of comma expression has no effect
宏定义如下。我正在使用Linux上的GCC(4.4.3)进行编译。这是C代码。
#define MY_MAX(a,b) \
({ __typeof__ (a) _a = (a); \
__typeof__ (b) _b = (b); \
_a > _b ? _a : _b; })
#define MY_MIN(a,b) \
({ __typeof__ (a) _a = (a); \
__typeof__ (b) _b = (b); \
_a < _b ? _a : _b; })
如何修复它们以消除警告?
[[更新]]
实际上,我找到了警告的原因。它与宏本身无关。这是因为我试图找到两个数字的最小值,其中一个是名为MAXIMUM_ARRAYSIZE的#def。它被定义为:
#define MAXIMUM_ARRAYSIZE (sizeof(size_t)==2,16384,1073741824)
这是一个非常奇怪的宏定义。
答案 0 :(得分:1)
错误不在您的宏定义中。
您需要向我们展示MIN
/ MAX
宏的调用代码。听起来您要么错误地使用MIN
/ MAX
的结果,要么您传递了包含意外的令牌(a
或b
)逗号。
答案 1 :(得分:0)
我尝试了以下操作,并且在gcc -Wall
没有任何警告/错误的情况下工作正常。检查你是如何使用这些宏的!
#include <stdio.h>
#define MY_MAX(a,b) \
({ __typeof__ (a) _a = (a); \
__typeof__ (b) _b = (b); \
_a > _b ? _a : _b; })
#define MY_MIN(a,b) \
({ __typeof__ (a) _a = (a); \
__typeof__ (b) _b = (b); \
_a < _b ? _a : _b; })
int main(void)
{
printf("%d \n", MY_MAX(10,20));
printf("%d \n", MY_MIN(10,20));
return 0;
}
输出:
$ gcc ma.c -Wall
$ ./a.out
20
10
$
答案 2 :(得分:-2)
_a < _b ? _a : _b
是一个表达式,而不是一个语句,但是你把它写成了一个语句(所有这些语句本身后跟一个分号)。