有人可以帮助我,因为我不知道这个世界是怎么回事 所以基本上这就是我正在努力完成这些功能
#define LOWCONVERT(c) (if(isupper(c) > (0) \
isupper(c) == (0))
上面的宏应该将大写字母转换为小写字符
应该比较两个数字的第二个宏是:
#define COMPARISON(d,f) (if (d > f))\
printf("d is greater than f\n");\
else\
if (d == f)\
printf("d equals f\n");\
else\
if(d < f)\
printf("d is smaller than f\n");)
当我使用它时,它给了我: “错误:预期表达”
答案 0 :(得分:3)
if
用于语句,而不用于表达式。左括号开始表达。
GCC启用名为statement expressions的扩展程序。
您最好使用inline functions。 (宏非常顽皮,使用方式如COMPARISON(i++,t[i--])
...)
您应该#include <ctype.h>
并使用tolower(3)或isalpha(3)
请求编译器向您显示预处理表单。使用GCC,使用gcc -C -E yoursource.c > yoursource.i
然后使用编辑器或寻呼机查看yoursource.i
内部(例如less yoursource.i
...)
不要忘记启用调试信息&amp;编译器中的所有警告。使用GCC,这意味着使用gcc -Wall -g
答案 1 :(得分:3)
您不能将语句用作表达式。如果要在宏中对多个语句进行分组,常见的方法是使用do...while
循环:
#define COMPARISON(d, f) \
do { \
if ((d) > (f)) \
printf("d is greater than f\n"); \
else if ((d) == (f)) \
printf("d equals f\n"); \
else if((d) < (f)) \
printf("d is smaller than f\n"); \
} while (0)
另请注意,我将宏参数的用法放在括号内,或者参数可能包含导致比较操作失败的表达式。