嗨!我在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)?
答案 0 :(得分:2)
argv[1]
的类型为char *
。计算绝对值没有任何意义。您可能想将参数转换为int
类型,然后计算绝对值。
printf("%d", ABS(strtol(argv[1], NULL, 10)));
此外,编写宏时,应始终在参数周围加上括号。
#define ABS(Value) (((Value) < 0) ? ((Value) * (-1)) : (Value))