C.无效的操作数为二进制*(具有“ char *”和“ int”)

时间:2018-09-30 23:59:18

标签: c

嗨!我在C语言中学习#define。我的程序了解绝对值。我有2个文件:ft_abs.h:

#ifndef FT_ABS_H
# define FT_ABS_H

# define ABS(Value) ((Value < 0) ? (Value * (-1)) : (Value))

#endif

和main.c:

#include "ft_abs.h"
#include <stdio.h>
#include <string.h>

int     main(int argc, char **argv)
{
    printf("%s", ABS(argv[1]));
    return (0);
}

编译

gcc -o abs ft_abs.h main.c 

和...

  

在main.c:2:0中包含的文件中:main.c:在“ main”函数中:   ft_abs.h:16:41:错误:对二进制*无效的操作数(具有'char *'和   'int')#define ABS(Value)((Value <0)?(Value *(-1)):(Value))                                             main.c:17:18:注意:在宏“ ABS”的扩展中        printf(“%s”,ABS(argv [1]));

当我将(Value *(-1))更改为(-Value)时,它也不起作用(错误的一元减负类型参数)。如果我将(-Value)更改为(Value)都可以,但是这是胡说。我应该如何更改代码以使其正常工作(当然要使用define)?

1 个答案:

答案 0 :(得分:2)

argv[1]的类型为char *。计算绝对值没有任何意义。您可能想将参数转换为int类型,然后计算绝对值。

printf("%d", ABS(strtol(argv[1], NULL, 10)));

此外,编写宏时,应始终在参数周围加上括号。

#define ABS(Value) (((Value) < 0) ? ((Value) * (-1)) : (Value))