jiuyuan 发表于 2019-8-16 20:50:10

关于带参数的宏

(1)#define AREA(x,y) (x)*(y)

(2)#define ABS(a) ((a)<0?-(a):a)

上面两个宏定义,书上说定义有问题,让找出来。各位路过的能看出来的给点帮助,谢谢。
第二题让假定参数无副作用,那就应该不是ABS(x++)这种问题。

jiuyuan 发表于 2019-8-17 08:20:34

The problem is the lack of parentheses around the replacement list.
For example,
a = 1/AREA(b, c);
becomes
a = 1/(b)*(c);
Here's the corrected macro:
#define AREA(x,y) ((x)*(y))

#include <stdio.h>
#define ABS(a) ((a) < 0? -(a) : a)

int main(void) {
    printf("%d", ABS((unsigned)-1));
   unsigned a=(unsigned short)(-1);
    printf("\n%d",a);
    return 0;
    }
我在网上找到答案了,大家看看。

jiuyuan 发表于 2019-8-17 08:23:02

这个帖子怎么结呢?

迷雾少年 发表于 2019-8-17 08:23:42

jiuyuan 发表于 2019-8-17 08:23
这个帖子怎么结呢?

随便找一条回复设为最佳答案
页: [1]
查看完整版本: 关于带参数的宏