首页 > 解决方案 > C. 二进制 * 的无效操作数(有 'char *' 和 'int')

问题描述

嗨!我在 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) 一切正常,但这是无稽之谈。我应该如何更改代码以使其工作(当然使用定义)?

标签: c

解决方案


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

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

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

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

推荐阅读